本节将介绍 Envoy 架构机器核心组件。
部署架构
下图展示的是 Envoy 的典型部署架构,Envoy 代理在客户端和上游服务之间充当中间层,提供高效的流量管理、安全控制和监控功能,确保系统的稳定性和性能。
简要说明:
- 客户端发送请求:
- 客户端(例如浏览器、移动应用或其他服务)发起一个请求,发送到 Envoy 代理。
- Envoy 代理接收请求:
- Envoy 代理接收来自客户端的请求,并准备根据配置进行处理。
- 请求路由:
- Envoy 根据预定义的路由规则决定将请求转发到哪个上游集群(服务 1、服务 2 或服务 3)。
- 路由决策可以基于请求路径、头部信息等属性。
- 请求转发到上游集群:
- 根据路由决策,Envoy 将请求转发到相应的上游集群中的服务实例(例如,服务 1、服务 2 或服务 3)。
- Envoy 负责负载均衡,将请求均匀地分发到集群中的各个服务实例。
- 健康检查和服务发现:
- Envoy 定期对上游服务实例进行健康检查,确保请求只发往健康的服务实例。
- 通过服务发现机制,Envoy 动态获取上游集群中的服务实例信息,保持最新的服务状态。
- 监控和数据收集:
- Envoy 收集并发送指标、日志和追踪数据到监控系统,用于监控和分析服务的性能和健康状态。
- 这些数据帮助运维人员了解系统运行情况,并快速响应和解决问题。
- 认证和授权:
- Envoy 集成外部认证授权系统,对请求进行身份验证和访问控制。
- 认证授权系统可以是 OAuth、JWT 或其他安全机制,确保请求的合法性和安全性。
- 动态配置管理:
- 管理平面负责动态配置和管理 Envoy 代理。
- 管理平面将配置变更推送到 Envoy 代理,以适应业务需求的变化,确保系统的高可用性和灵活性。
核心组件
Envoy 的架构由多个核心组件组成,每个组件都有特定的职责,以确保代理的高效运行:
- Listener(监听器):监听来自客户端的网络请求,支持多种协议(如 TCP、HTTP)。
- Filter Chains(过滤器链):包含一系列过滤器,用于处理和转换请求和响应。
- Cluster(集群):定义后端服务的集合,提供负载均衡和健康检查功能。
- Endpoint(端点):具体的服务实例,作为集群中的成员。
下图展示了 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(端点)
-
职责:
- 端点是集群中的具体服务实例,负责实际处理来自客户端的请求。
- 每个端点通常对应一个运行中的服务实例或容器。
-
功能:
- 请求处理:接收来自集群负载均衡的请求并进行处理,返回相应的结果。
- 健康检查:端点定期接受健康检查,以报告其健康状态,确保只接收健康请求。
- 动态变化:随着服务实例的增加或减少,端点列表会动态更新,以反映集群的当前状态。