1. Envoy 概述:服务网格中的核心代理
1.1 Envoy 在服务网格中的角色
Envoy 是一个高性能、开源的边缘与服务代理,由 Lyft 于 2016 年开源,现已成为 云原生计算基金会(CNCF) 的毕业项目。在服务网格架构中,Envoy 以 Sidecar 代理 模式部署,伴随每个服务实例运行,接管所有进出流量。
Envoy 在服务网格中承担以下核心角色:
- 数据平面代理:作为服务间通信的中间层,拦截并处理所有 L4/L7 流量。
- 流量控制执行器:实现负载均衡、熔断、重试、超时、流量分割等高级路由策略。
- 可观测性数据源:自动生成详细的访问日志、分布式追踪和指标(Metrics),无需修改应用代码。
- 安全通信网关:提供 mTLS 加密、证书轮换、RBAC 鉴权等零信任安全能力。
- 协议转换器:支持 HTTP/1.1、HTTP/2、gRPC、TCP、WebSocket 等多种协议,并可在协议间桥接。
关键概念: 在服务网格中,Envoy 是数据平面的唯一代理组件,控制平面(如 Istio)通过 xDS API 动态下发配置,Envoy 负责执行。这种“控制-数据分离”架构是服务网格的核心设计模式。
1.2 Envoy 架构设计原则
Envoy 的架构设计遵循以下五大原则,这些原则直接决定了其高性能与可扩展性:
| 原则 | 说明 | 实现方式 |
|---|---|---|
| 透明代理 | 对应用完全透明,无需修改代码即可注入代理 | 通过 iptables 规则或虚拟网卡(TUN)劫持流量 |
| 线程模型 | 单进程多工作线程架构,避免多进程上下文切换开销 | 主线程负责配置管理,工作线程通过 epoll/kqueue 驱动事件循环 |
| 热重启 | 支持零停机配置更新和二进制升级 | 父子进程共享监听 socket,新进程接管后旧进程优雅退出 |
| L4/L7 分层过滤 | 网络层和应用层过滤器可组合、可插拔 | Listener Filter → Network Filter → HTTP Filter 链式处理 |
| 动态配置 | 通过 xDS API 实现运行时配置热更新 | CDS/EDS/LDS/RDS/SDS 等协议,支持最终一致性分发 |
Envoy 的内部架构采用 事件驱动 + 非阻塞 I/O 模型,每个工作线程拥有独立的连接池和内存池,避免了锁竞争。其核心组件包括:
- Listener(监听器):绑定端口并接收入站连接,支持过滤器链。
- Cluster(集群):定义上游服务端点集合及负载均衡策略。
- Router(路由器):根据路由规则将请求转发至目标集群。
- Filter(过滤器):可插拔的处理单元,实现协议解析、限流、日志等能力。
1.3 Envoy 与 Istio 的关系
在服务网格生态中,Envoy 与 Istio 是 数据平面与控制平面 的协作关系。Istio 使用 Envoy 作为其默认的数据平面代理,两者通过标准化的 xDS API 进行通信。
| 维度 | Envoy(数据平面) | Istio(控制平面) |
|---|---|---|
| 职责 | 执行流量转发、策略实施、指标采集 | 配置管理、证书签发、策略编排、服务发现 |
| 部署方式 | Sidecar 注入到每个 Pod 中 | 独立部署为 istiod 服务 |
| 配置来源 | 通过 xDS API 从控制平面拉取配置 | 将用户 CRD(VirtualService、DestinationRule 等)转换为 xDS 配置 |
| 生命周期 | 随应用 Pod 启动/停止 | 独立管理,支持高可用部署 |
| 扩展性 | 支持 Wasm Filter、Lua Filter 扩展 | 支持 Webhook、插件机制扩展控制面能力 |
Istio 对 Envoy 的增强主要体现在:
- 自动注入:通过 Mutating Webhook 自动将 Envoy Sidecar 注入到 Pod 中。
- 高级路由抽象:将 Envoy 的路由配置抽象为 VirtualService / DestinationRule 等用户友好的 CRD。
- 安全自动化:自动管理 mTLS 证书的签发、分发和轮换(基于 SPIRE / Citadel)。
- 可观测性集成:自动配置 Envoy 的指标、日志和追踪导出到 Prometheus / Jaeger / Kiali。
最佳实践: 在生产环境中,建议直接使用 Istio 的 Pilot 组件作为 Envoy 的控制平面,而非手动管理 Envoy 的静态配置文件。Istio 提供了更完善的配置校验、灰度发布和故障隔离能力。
1.4 本章小结
- Envoy 是服务网格中 唯一的数据平面代理,负责所有流量的转发、控制和观测。
- 其架构设计遵循 透明代理、事件驱动、热重启、分层过滤、动态配置 五大原则,保障高性能与可扩展性。
- Envoy 与 Istio 形成 数据平面 + 控制平面 的标准协作模式,Istio 通过 xDS API 管理 Envoy 的运行时行为。
- 理解 Envoy 的角色和架构是后续进行 资源模型分析 和 性能调优 的基础。