Envoy基础
Envoy是为大型现代面向服务架构设计的L7代理和通信总线
核心特性
L3/L4 filter architecture
- Envoy的核心是一个L3/L4的网络代理程序,可插拔的过滤器链(filter chain)机制,允许用户按需开发各类TCP/UDP代理过滤器,以扩充主程序的功能
- Envoy社区业已提供了诸如raw TCP proxy、UDP proxy、HTTP proxy、Redis、MongoDB等过滤器
HTTP L7 filter architecture
- Envoy内置提供一个HTTP L7过滤器
- 该过滤器支持诸多高级特性,包括buffering、rate limiting、routing/forwarding等
First class HTTP/2 support
- HTTP模式支持HTTP/1.1和HTTP/2的双向透明代理
- 自1.19版本开始支持HTTP/3(Alpha级特性)
HTTP L7 routing
- HTTP模式内置了一个高级路由子系统
- 支持基于path、authority、content type和runtime values等机制的路由和重定向功能
gRPC support
- gRPC是Google开发的rpc框架,基于HTTP/2或以上版本在底层实现多路传输
- Envoy支持gPRC依赖到的HTTP/2的所有特性
服务发现和动态配置
- 支持动态配置API,以实现集中式管控
可动态配置的内容
- hosts within a backend cluster (后端群集中的主机)
- the backend clusters themselves(后端集群本身)
- HTTP routing (HTTP路由)
- listening sockets (侦听套接字)
- cryptographic material (加密链路)
健康检查
- 内置健康状态检测子系统,支持对上游服务集群进行主动式健康状态监测
- Enovy基于服务发现和健康状态监测信息判定上游集群中健康可用的端点
高级负载平衡
- 支持多种高级负载均衡机制,包括zone aware、 Locality weighted load balancing和priority/locality load balancing等
- 支持automatic retries、circuit breaking、global rate limiting via an external rate limiting service、request shadowing和outlierdetection高级功能
- Front/edge proxy support(前端/边缘代理支持)
Best in class observability(可观测性)
- 内置支持对各子系统生成统计信息,默认以statsD为statistics sink,以及通过admin接口对外暴露
- 支持链路跟踪
Enovy数据路径
Envoy Terminology
Envoy基础组件
Envoy的逻辑组件
Enovy API常用术语总结
- 主机(Host):一个具有网络通信能力的端点,例如服务器、移动智能设备等
- 集群(Cluster):集群是Envoy连接到的一组逻辑上相似的端点;在v2中,RDS通过路由指向集群,CDS提供集群配置,而Envoy通过EDS发现集群成员,即端点;
- 下游(Downstream):下游主机连接到Envoy,发送请求并接收响应,它们是Envoy的客户端;
- 上游(Upstream):上游主机接收来自Envoy的连接和请求并返回响应,它们是Envoy代理的后端服务器;
- 端点(Endpoint):端点即上游主机,是一个或多个集群的成员,可通过EDS发现;
- 侦听器(Listener):侦听器是能够由下游客户端连接的命名网络位置,例如端口或unix域套接字等;
- 位置(Locality):上游端点运行的区域拓扑,包括地域、区域和子区域等;
- 管理服务器(Management Server):实现v2/v3 API的服务器,它支持复制和分片,并且能够在不同的物理机器上实现针对不同xDS API的API服务;
- 地域(Region):区域所属地理位置;
- 区域(Zone):AWS中的可用区(AZ)或GCP中的区域等;
- 子区域:Envoy实例或端点运行的区域内的位置,用于支持区域内的多个负载均衡目标;
- xDS:CDS 、EDS、HDS 、LDS、RLS(Rate Limit)、 RDS 、 SDS、VHDS和RTDS等API的统称;
- Mesh和Envoy Mesh
部署类型
- Envoy通常用于以容器编排系统为底层环境的服务网格中,并以sidecar的形式与主程序容器运行为单个Pod;非编排系统环境中测试时,可以将主程序与Envoy运行于同一容器,或手动组织主程序容器与Envoy容器共享同一网络名称空间;
具体使用时的常见部署类型如下图所示
- Ingress Listener:仅负责代理本地服务的入向流量,并提供buffering和circuit breaking等功能
- Egress Listener:负责代理本地客户端外发的请求流量,为针对请求的目标服务进行service discovery、load balancing和rate limiting等功能,是服务网格功能实现的关键位置
入向流量代理示意图
出向流量代理示意图
服务对服务加前端代理
上图显示了位于用作HTTP L7边缘反向代理的Envoy集群后面的服务到服务配置。
- 终止TLS连接;
- 支持HTTP/1.1和HTTP/2;
- HTTP L7路由;
- 通过Front-Envoy的Ingress接入请求,并结合发现服务与Service-to-Service的Envoy网格进行通信;
前端Envoy主机的工作方式与任何其他Envoy宿主相同,不同之处在于它们不与另一个服务并置运行。
Envoy的关键特性总结
性能、可扩展性及动态可配置性
- 性能:除了大量功能外,Envoy还提供极高的吞吐量和低尾延迟差异,同时消耗相对较少的CPU和RAM;
- 可扩展性:Envoy在L4和L7上提供丰富的可插拔过滤器功能,允许用户轻松添加新功能;
API可配置性:Envoy提供了一组可由控制平面服务实现的管理API,也称为xDS API
- 若控制平面实现了这所有的API,则可以使用通用引导配置在整个基础架构中运行Envoy
- 所有进一步的配置更改都可通过管理服务器无缝地进行动态传递,使得Envoy永远不需要重新启动
- 于是,这使得Envoy成为一个通用数据平面,当与足够复杂的控制平面相结合时,可大大降低整体操作复杂性
Envoy xDS API存在v1、v2和v3三个版本
- v1 API 仅使用 JSON/REST,本质上是轮询
v2 API 是 v1 的演进,而不是革命,它是 v1 功能的超集,新的API模式使用 proto3 指定,并同时以 gRPC 和 REST + JSON/YAML 端点实现
- 2021年第1季度结束支持
- v3 API:当前支持的版本,支持start_tls、拒绝传入的tcp连接、4096位的tls密钥、SkyWalking和WASM等
- Envoy业已成为现代服务网格和边缘网关的“ 通用数据平面API ”,Istio、Ambassador和Gloo等项目均是为此数据平面代理提供的控制平面;
仅登录用户可评论,点击 登录