1. Envoy 概述:发展历史、核心特性与服务网格角色
1.1 发展历史:从 Lyft 内部代理到 CNCF 毕业项目
Envoy 最初由 Lyft 的 Matt Klein 于 2015 年设计并开源,旨在解决微服务架构中日益复杂的网络通信问题。2016 年,Envoy 被捐赠给云原生计算基金会(CNCF),并于 2021 年正式毕业,成为与 Kubernetes、Prometheus 并列的云原生生态核心项目。
| 时间节点 | 里程碑事件 | 关键影响 |
|---|---|---|
| 2015 年 | Lyft 内部研发并开源 Envoy | 解决大规模微服务间通信的痛点 |
| 2016 年 | 捐赠给 CNCF 基金会 | 进入云原生生态,获得社区支持 |
| 2018 年 | Istio 1.0 发布,Envoy 成为默认数据面 | 确立服务网格数据面标准地位 |
| 2021 年 | CNCF 毕业项目 | 生产就绪,被 Uber、Netflix、Twitter 等广泛采用 |
| 2024+ | Gateway API、多租户隔离等高级特性成熟 | 从代理演进为统一的流量治理平台 |
1.2 核心特性:L4/L7 代理、热重启与 xDS 协议
Envoy 的核心特性使其区别于 Nginx、HAProxy 等传统代理,成为云原生时代的首选数据面组件。
1.2.1 L4/L7 多层代理能力
Envoy 同时支持传输层(L4)和应用层(L7)的流量处理,能够在一个进程中完成 TCP/UDP 代理、HTTP/2、gRPC、TLS 终止、路由匹配、负载均衡等操作。
| 代理层级 | 支持协议 | 典型场景 |
|---|---|---|
| L4(传输层) | TCP、UDP、TLS | 数据库代理、Redis 代理、原始 TCP 透传 |
| L7(应用层) | HTTP/1.1、HTTP/2、gRPC、WebSocket | API 网关、微服务路由、限流熔断 |
1.2.2 热重启(Hot Restart)
Envoy 支持无中断的热重启机制,允许在更新配置或二进制版本时,保持现有连接不中断。其实现原理是:旧进程将监听套接字通过 Unix Domain Socket 传递给新进程,新进程接管流量后,旧进程优雅关闭。
# Envoy 热重启命令行示例
# 启动新进程时指定旧进程的 PID
envoy --config-path /etc/envoy/envoy.yaml --base-id 0 --restart-epoch 1
# 旧进程自动检测新进程就绪后,逐步关闭自身连接
1.2.3 xDS 协议:控制面与数据面的通信桥梁
xDS 是 Envoy 定义的一组发现服务协议的总称,包括 CDS(集群发现)、EDS(端点发现)、LDS(监听器发现)、RDS(路由发现)等。控制面(如 Istio Pilot)通过 xDS 动态下发配置,Envoy 无需重启即可实时更新路由、端点、监听器等信息。
| xDS 类型 | 全称 | 功能描述 |
|---|---|---|
| CDS | Cluster Discovery Service | 定义上游集群(后端服务组)的配置 |
| EDS | Endpoint Discovery Service | 动态获取集群中的端点(Pod IP:Port)列表 |
| LDS | Listener Discovery Service | 配置 Envoy 监听的端口和过滤器链 |
| RDS | Route Discovery Service | 定义 HTTP 路由规则(域名、路径匹配) |
| SDS | Secret Discovery Service | 动态分发 TLS 证书和密钥 |
1.3 在服务网格中的角色:数据面核心
在 Istio 等服务网格架构中,Envoy 作为数据面(Data Plane)的 Sidecar 代理,与每个服务实例部署在一起,接管所有进出流量。控制面(如 Istiod)通过 xDS 协议向 Envoy 下发配置,实现流量治理、安全通信和可观测性。
1.3.1 服务网格中的关键职责
- 流量治理: 实现蓝绿部署、金丝雀发布、灰度路由、超时重试、熔断限流等策略。
- 安全通信: 自动 mTLS 加密、证书轮换、RBAC 访问控制。
- 可观测性: 生成详细的访问日志、分布式追踪(Jaeger/Zipkin)、Prometheus 指标。
- 多租户隔离: 通过命名空间、服务账号、授权策略实现租户间的网络隔离。
1.3.2 Envoy 与传统代理的对比
| 对比维度 | Envoy | Nginx / HAProxy |
|---|---|---|
| 配置方式 | 动态 xDS 协议,无需重启 | 静态文件重载,需 reload |
| 协议支持 | HTTP/2、gRPC、WebSocket 原生支持 | HTTP/2 支持有限,gRPC 需额外配置 |
| 可观测性 | 内置 Stats、Tracing、Access Log | 需第三方模块或插件 |
| 服务网格集成 | Istio、Consul Connect、AWS App Mesh 默认数据面 | 需自定义适配器 |
| 多租户隔离 | 通过 RBAC、NetworkPolicy、动态路由实现 | 依赖外部 ACL 或 Lua 脚本 |
1.4 本章小结
Envoy 从 Lyft 内部项目成长为 CNCF 毕业项目,其成功源于三大核心特性:L4/L7 多层代理提供灵活的流量处理能力;热重启保证配置更新零宕机;xDS 协议实现控制面与数据面的动态解耦。在服务网格中,Envoy 作为数据面 Sidecar,承担流量治理、安全通信、可观测性和多租户隔离等关键职责,是云原生架构中不可或缺的基础设施组件。