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-data-path

Envoy Terminology

Envoy-terminology.png

Envoy基础组件

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等功能,是服务网格功能实现的关键位置
      deployment_type

入向流量代理示意图

入向流量代理示意图

出向流量代理示意图

出向流量代理示意图

服务对服务加前端代理

Service_to_service_Plus_front_proxy

上图显示了位于用作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等项目均是为此数据平面代理提供的控制平面;
最后修改:2024 年 06 月 21 日
如果觉得我的文章对你有用,请随意赞赏