赞
踩
点击 "阅读原文" 可以获得更好的阅读体验。
前言
Envoy
是专为大型现代 SOA
(面向服务架构)架构设计的 L7 代理和通信总线,体积小,性能高,它通过一款单一的软件满足了我们的众多需求,而不需要我们去搭配一些工具混合使用。
关注我的小伙伴们应该知道我已经断断续续分享过一些 Envoy
使用指南了,但大多都比较零散随性,没有形成体系。为了能让更多人从零开始入坑 Envoy
,我决定撰写一本 Envoy
中文指南,主要内容来自 Envoy
官方文档、各路大神分享的文章以及我自己以前写的一些文章。本指南包括了本人平时在使用 Envoy
时的参考指南和实践总结,形成一个系统化的参考指南以方便查阅。
文档地址:https://fuckcloudnative.io/envoy-handbook/
你也可以直接点击底部的“阅读原文”。
下面摘录一段本指南中的章节:
Envoy 的架构如图所示:
Envoy 接收到请求后,会先走 FilterChain
,通过各种 L3/L4/L7 Filter 对请求进行微处理,然后再路由到指定的集群,并通过负载均衡获取一个目标地址,最后再转发出去。
其中每一个环节可以静态配置,也可以动态服务发现,也就是所谓的 xDS
。这里的 x
是一个代词,类似云计算里的 XaaS
可以指代 IaaS、PaaS、SaaS 等。
Envoy 的整体配置结构如下:
- {
- "node": "{...}",
- "static_resources": "{...}",
- "dynamic_resources": "{...}",
- "cluster_manager": "{...}",
- "hds_config": "{...}",
- "flags_path": "...",
- "stats_sinks": [],
- "stats_config": "{...}",
- "stats_flush_interval": "{...}",
- "watchdog": "{...}",
- "tracing": "{...}",
- "runtime": "{...}",
- "layered_runtime": "{...}",
- "admin": "{...}",
- "overload_manager": "{...}",
- "enable_dispatcher_stats": "...",
- "header_prefix": "...",
- "stats_server_version_override": "{...}",
- "use_tcp_for_dns_lookups": "..."
- }
node : 节点标识,配置的是 Envoy 的标记信息,management server 利用它来标识不同的 Envoy 实例。参考 core.Node
static_resources : 定义静态配置,是 Envoy 核心工作需要的资源,由 Listener
、Cluster
和 Secret
三部分组成。参考 config.bootstrap.v2.Bootstrap.StaticResources
dynamic_resources : 定义动态配置,通过 xDS
来获取配置。可以同时配置动态和静态。
cluster_manager : 管理所有的上游集群。它封装了连接后端服务的操作,当 Filter
认为可以建立连接时,便调用 cluster_manager
的 API 来建立连接。cluster_manager
负责处理负载均衡、健康检查等细节。
hds_config : 健康检查服务发现动态配置。
stats_sinks : 状态输出插件。可以将状态数据输出到多种采集系统中。一般通过 Envoy 的管理接口 /stats/prometheus
就可以获取 Prometheus
格式的指标,这里的配置应该是为了支持其他的监控系统。
stats_config : 状态指标配置。
stats_flush_interval : 状态指标刷新时间。
watchdog : 看门狗配置。Envoy 内置了一个看门狗系统,可以在 Envoy 没有响应时增加相应的计数器,并根据计数来决定是否关闭 Envoy 服务。
tracing : 分布式追踪相关配置。
runtime : 运行时状态配置(已弃用)。
layered_runtime : 层级化的运行时状态配置。可以静态配置,也可以通过 RTDS
动态加载配置。
admin : 管理接口。
overload_manager : 过载过滤器。
header_prefix : Header 字段前缀修改。例如,如果将该字段设为 X-Foo
,那么 Header 中的 x-envoy-retry-on
将被会变成 x-foo-retry-on
。
use_tcp_for_dns_lookups : 强制使用 TCP
查询 DNS
。可以在 Cluster
的配置中覆盖此配置。
Envoy 进程中运行着一系列 Inbound/Outbound
监听器(Listener),Inbound
代理入站流量,Outbound
代理出站流量。Listener 的核心就是过滤器链(FilterChain),链中每个过滤器都能够控制流量的处理流程。过滤器链中的过滤器分为两个类别:
网络过滤器(Network Filters): 工作在 L3/L4
,是 Envoy 网络连接处理的核心。
HTTP 过滤器(HTTP Filters): 工作在 L7
,由特殊的网络过滤器 HTTP connection manager
管理,专门处理 HTTP1/HTTP2/gRPC
请求。
除了 HTTP connection manager
之外,还有一种特别的网络过滤器叫 Thrift Proxy
。Thrift
是一套包含序列化功能和支持服务通信的 RPC 框架,详情参考维基百科。Thrift Proxy 管理了两个 Filter:Router 和 Rate Limit。
除了过滤器链之外,还有一种过滤器叫监听器过滤器(Listener Filters),它会在过滤器链之前执行,用于操纵连接的元数据。这样做的目的是,无需更改 Envoy 的核心代码就可以方便地集成更多功能。例如,当监听的地址协议是 UDP
时,就可以指定 UDP 监听器过滤器。
根据上面的分类,Envoy 过滤器的架构如下图所示:
你可能还喜欢
点击下方图片即可阅读
云原生是一种信仰 ????
扫码关注公众号
后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!
点击 "阅读原文" 获取更好的阅读体验!
❤️给个「在看」,是对我最大的支持❤️
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。