本节将介绍 Envoy 架构机器核心组件。

部署架构

下图展示的是 Envoy 的典型部署架构,Envoy 代理在客户端和上游服务之间充当中间层,提供高效的流量管理、安全控制和监控功能,确保系统的稳定性和性能。

image
Envoy 的部署架构

简要说明:

  1. 客户端发送请求
    • 客户端(例如浏览器、移动应用或其他服务)发起一个请求,发送到 Envoy 代理。
  2. Envoy 代理接收请求
    • Envoy 代理接收来自客户端的请求,并准备根据配置进行处理。
  3. 请求路由
    • Envoy 根据预定义的路由规则决定将请求转发到哪个上游集群(服务 1、服务 2 或服务 3)。
    • 路由决策可以基于请求路径、头部信息等属性。
  4. 请求转发到上游集群
    • 根据路由决策,Envoy 将请求转发到相应的上游集群中的服务实例(例如,服务 1、服务 2 或服务 3)。
    • Envoy 负责负载均衡,将请求均匀地分发到集群中的各个服务实例。
  5. 健康检查和服务发现
    • Envoy 定期对上游服务实例进行健康检查,确保请求只发往健康的服务实例。
    • 通过服务发现机制,Envoy 动态获取上游集群中的服务实例信息,保持最新的服务状态。
  6. 监控和数据收集
    • Envoy 收集并发送指标、日志和追踪数据到监控系统,用于监控和分析服务的性能和健康状态。
    • 这些数据帮助运维人员了解系统运行情况,并快速响应和解决问题。
  7. 认证和授权
    • Envoy 集成外部认证授权系统,对请求进行身份验证和访问控制。
    • 认证授权系统可以是 OAuth、JWT 或其他安全机制,确保请求的合法性和安全性。
  8. 动态配置管理
    • 管理平面负责动态配置和管理 Envoy 代理。
    • 管理平面将配置变更推送到 Envoy 代理,以适应业务需求的变化,确保系统的高可用性和灵活性。

核心组件

Envoy 的架构由多个核心组件组成,每个组件都有特定的职责,以确保代理的高效运行:

  • Listener(监听器):监听来自客户端的网络请求,支持多种协议(如 TCP、HTTP)。
  • Filter Chains(过滤器链):包含一系列过滤器,用于处理和转换请求和响应。
  • Cluster(集群):定义后端服务的集合,提供负载均衡和健康检查功能。
  • Endpoint(端点):具体的服务实例,作为集群中的成员。

下图展示了 Envoy 核心组件之间的关系。

image
Envoy 的核心组件

下面是对 Envoy 核心组件详细介绍。

Listener(监听器)

  • 职责

    • 监听器是 Envoy 的入口点,负责监听来自客户端的网络请求。
    • 支持多种协议,能够处理各种类型的网络流量。
    • 监听器配置了网络地址(IP 地址和端口),用于接收来自客户端的连接请求。
  • 功能

    • 网络监听:通过配置的网络地址和端口,接收并解析客户端请求。
    • 协议识别:识别请求所使用的协议,并将请求分发到相应的过滤器链进行处理。
    • 初步处理:可以在监听器级别进行一些基本的流量管理和控制,如速率限制和连接管理。

Filter Chains(过滤器链)

  • 职责

    • 过滤器链包含一系列按顺序排列的过滤器,用于处理和转换请求和响应。
    • 每个过滤器在请求和响应的生命周期中都扮演着特定的角色。
  • 功能

    • 请求处理:从监听器接收到请求后,过滤器链中的每个过滤器依次对请求进行处理。
    • 响应处理:上游服务返回响应后,过滤器链中的每个过滤器依次对响应进行处理。
    • 各种过滤器类型
      • HTTP 过滤器:用于处理 HTTP 请求和响应,如认证、路由、重试等。
      • 网络过滤器:处理低级别的网络层数据,如 IP 数据包或 TCP 数据流。这些过滤器通常用于执行安全检查、连接管理、协议解析等任务,如 TCP 代理、防火墙功能和数据加密。
      • TCP 过滤器:用于处理 TCP 连接和数据包,如负载均衡、健康检查等。
      • 自定义过滤器:用户可以编写自定义过滤器来实现特定的处理逻辑。
Envoy 中支持的过滤器概述

Envoy 代理支持多种类型的过滤器,每种过滤器在网络流量的处理过程中扮演不同的角色。以下列出的 Envoy 支持的各个过滤器。欲了解详情,请见 Envoy 文档

点击查看

监听器过滤器 (Listener Filters)

  • HTTP Inspector Filter:检测和解析 HTTP 流量。
  • Local Rate Limit Filter:在本地对流量进行速率限制。
  • Original Dst Filter:使用原始目标地址。
  • Original Src Filter:使用原始源地址。
  • Proxy Protocol Filter:支持 Proxy Protocol,用于传递客户端连接信息。
  • TLS Inspector Filter:检测和解析 TLS 流量。

网络过滤器 (Network Filters)

  • Client TLS authentication:进行客户端 TLS 认证。
  • Connection limit:限制连接数量。
  • Direct response:直接响应请求。
  • Dubbo Proxy:支持 Dubbo 协议的代理。
  • Dubbo Proxy Route Configuration:配置 Dubbo 路由。
  • Echo:用于测试,回显请求内容。
  • Network External Authorization:进行外部授权。
  • Generic Proxy:通用代理过滤器。
  • Generic Proxy Route Configuration:配置通用代理路由。
  • Golang network filter:基于 Golang 的网络过滤器。
  • HTTP connection manager:管理 HTTP 连接。
  • Kafka Broker:支持 Kafka 协议的代理。
  • Kafka Mesh:支持 Kafka Mesh。
  • Local rate limit:在本地对流量进行速率限制。
  • Mongo proxy:支持 MongoDB 协议的代理。
  • MySQL proxy:支持 MySQL 协议的代理。
  • Postgres proxy:支持 Postgres 协议的代理。
  • Rate limit:进行速率限制。
  • RBAC:基于角色的访问控制。
  • Redis Proxy:支持 Redis 协议的代理。
  • RocketMQ Proxy:支持 RocketMQ 协议的代理。
  • Rocketmq Proxy Route Configuration:配置 RocketMQ 路由。
  • Set-Filter-State Filter:设置过滤器状态。
  • Sip Proxy:支持 SIP 协议的代理。
  • Sip Proxy Route Configuration:配置 SIP 路由。
  • SNI Cluster Filter:基于 SNI 进行集群选择。
  • SNI dynamic forward proxy:支持 SNI 动态正向代理。
  • TCP Proxy:TCP 代理过滤器。
  • Thrift Proxy:支持 Thrift 协议的代理。
  • Thrift Proxy Route Configuration:配置 Thrift 路由。
  • Wasm:WebAssembly 过滤器。
  • ZooKeeper proxy:支持 ZooKeeper 协议的代理。

UDP 监听器过滤器 (UDP Listener Filters)

  • DNS Filter:支持 DNS 协议的代理。
  • UDP proxy route configuration:配置 UDP 路由。
  • UDP proxy:UDP 代理过滤器。

UDP 会话过滤器 (UDP Session Filters)

  • Filter state dynamic forward proxy:动态正向代理。
  • UDP HTTP Capsule filter:支持 UDP HTTP 胶囊协议。

HTTP 过滤器 (HTTP Filters)

  • Adaptive Concurrency:自适应并发控制。
  • Admission Control:入场控制。
  • Alternate Protocols Cache:替代协议缓存。
  • AWS Lambda:集成 AWS Lambda。
  • AwsRequestSigning:AWS 请求签名。
  • Bandwidth limit:带宽限制。
  • Basic Auth:基本认证。
  • Buffer:请求缓冲。
  • HTTP Cache Filter:HTTP 缓存过滤器。
  • HTTP CDN-Loop Filter:CDN 循环检测过滤器。
  • Checksum HTTP filter:校验和过滤器。
  • Composite:组合过滤器。
  • Compressor:压缩过滤器。
  • Connect RPC to gRPC:将 RPC 连接桥接到 gRPC。
  • Cors:跨域资源共享过滤器。
  • Credential Injector:凭据注入过滤器。
  • CSRF:防跨站请求伪造过滤器。
  • Custom Response Filter:自定义响应过滤器。
  • Decompressor:解压缩过滤器。
  • Dynamic forward proxy:动态正向代理。
  • Dynamo:集成 AWS DynamoDB。
  • External Authorization:外部授权。
  • External Processing Filter:外部处理过滤器。
  • Fault Injection:故障注入过滤器。
  • FileSystemBufferFilterConfig:文件系统缓冲配置。
  • GCP authentication:谷歌云认证过滤器。
  • Geoip:地理位置过滤器。
  • Golang HTTP filter:基于 Golang 的 HTTP 过滤器。
  • gRPC Field Extraction:gRPC 字段提取。
  • gRPC HTTP/1.1 Bridge:gRPC 到 HTTP/1.1 桥接。
  • gRPC HTTP/1.1 Reverse Bridge:HTTP/1.1 到 gRPC 反向桥接。
  • gRPC-JSON transcoder:gRPC 到 JSON 转码。
  • gRPC statistics:gRPC 统计信息。
  • gRPC Web:gRPC Web 支持。
  • Gzip:Gzip 压缩过滤器。
  • Header mutation filter configuration:头部变更过滤器。
  • Header-To-Metadata Filter:头部信息转元数据过滤器。
  • Health check:健康检查过滤器。
  • IP tagging:IP 标记过滤器。
  • Json-To-Metadata Filter:JSON 转元数据过滤器。
  • JWT Authentication:JWT 认证过滤器。
  • Kill Request:请求终止过滤器。
  • Language:语言过滤器。
  • Local Rate limit:本地速率限制过滤器。
  • Lua:Lua 脚本过滤器。
  • OAuth:OAuth 认证过滤器。
  • On Demand Discovery:按需发现过滤器。
  • Original Src Filter:使用原始源地址过滤器。
  • Rate Limit Quota:速率限制配额过滤器。
  • Rate limit:速率限制过滤器。
  • RBAC:基于角色的访问控制过滤器。
  • Router:路由过滤器。
  • Set-Filter-State Filter:设置过滤器状态。
  • Set-Metadata Filter:设置元数据过滤器。
  • Squash:调试会话压缩过滤器。
  • Stateful session filter:有状态会话过滤器。
  • Signed HTTP Exchange Filter:签名 HTTP 交换过滤器。
  • Tap:流量捕获过滤器。
  • Thrift-To-Metadata Filter:Thrift 到元数据过滤器。
  • UpstreamCodec:上游编解码过滤器。
  • Wasm:WebAssembly 过滤器。

Dubbo 过滤器 (Dubbo Filters)

  • Router:Dubbo 路由过滤器。

Thrift 过滤器 (Thrift Filters)

  • Router:Thrift 路由过滤器。
  • Header-To-Metadata Filter:头部信息转元数据过滤器。
  • Payload-To-Metadata Filter:负载转元数据过滤器。
  • Rate limit:速率限制过滤器。

通用过滤器 (Generic Filters)

  • Generic Proxy Route Action Configuration:通用代理路由动作配置。
  • Dubbo codec configuration for Generic Proxy:通用代理的 Dubbo 编解码配置。
  • HTTP1 codec configuration for Generic Proxy:通用代理的 HTTP1 编解码配置。
  • Kafka codec configuration for Generic Proxy:通用代理的 Kafka 编解码配置。
  • Generic Proxy Route Matcher Configuration:通用代理路由匹配器配置。
  • Router for generic proxy:通用代理的路由过滤器。

这些过滤器涵盖了 Envoy 中各个层次和不同协议的处理需求,提供了灵活而强大的功能,帮助用户实现多种流量管理和处理场景。

Cluster(集群)

  • 职责

    • 集群表示一组上游服务实例的集合,负责将请求负载均衡地分配给这些实例。
    • 提供服务发现和健康检查功能,确保请求被分发到可用的服务实例。
  • 功能

    • 负载均衡:根据配置的负载均衡策略(如轮询、随机、基于权重等),将请求分发到集群中的服务实例。
    • 服务发现:动态发现和更新集群中的服务实例信息,保持最新的服务状态。
    • 健康检查:定期对集群中的服务实例进行健康检查,确保请求只发往健康的实例。
    • 集群类型:支持多种集群类型,如静态集群、DNS 集群和动态集群(如通过 xDS 协议发现的集群)。

Endpoint(端点)

  • 职责

    • 端点是集群中的具体服务实例,负责实际处理来自客户端的请求。
    • 每个端点通常对应一个运行中的服务实例或容器。
  • 功能

    • 请求处理:接收来自集群负载均衡的请求并进行处理,返回相应的结果。
    • 健康检查:端点定期接受健康检查,以报告其健康状态,确保只接收健康请求。
    • 动态变化:随着服务实例的增加或减少,端点列表会动态更新,以反映集群的当前状态。

最后更新于 2024/11/27