1. 服务网格与Envoy概述
1.1 服务网格核心概念
服务网格(Service Mesh)是云原生时代微服务通信的基础设施层,它将服务间通信的复杂性从应用代码中剥离,下沉到独立的代理层。其核心思想是:让服务只关注业务逻辑,通信由网格代管。
| 维度 | 传统微服务 | 服务网格 |
|---|---|---|
| 通信控制 | 嵌入在应用代码中(重试、超时、熔断) | 由Sidecar代理统一处理 |
| 可观测性 | 依赖业务埋点,指标分散 | 代理层自动采集流量指标与链路 |
| 安全策略 | mTLS需业务库支持 | 代理层透明双向TLS |
| 升级影响 | 业务代码需重新编译部署 | 仅升级Sidecar,业务无感 |
关键认知:服务网格不是取代微服务框架,而是将流量治理、安全、可观测性从SDK升级为基础设施层能力,实现业务与基础设施的解耦。
1.2 Istio架构概览
Istio是目前最成熟的服务网格实现,其架构分为控制平面与数据平面两部分:
- 控制平面(istiod):统一管理配置分发、证书签发、策略下发。核心组件包括Pilot(配置转换与下发)、Citadel(证书管理)、Galley(配置验证)。
- 数据平面(Envoy Proxy):以Sidecar模式注入到每个Pod中,拦截所有进出流量,执行路由、负载均衡、熔断、遥测等治理逻辑。
1.3 Envoy作为数据平面的角色
Envoy是Istio数据平面的唯一代理实现,由Lyft开源,后捐给CNCF。它在服务网格中承担以下核心角色:
- L4/L7代理:支持TCP、HTTP/1.1、HTTP/2、gRPC协议,具备完整的七层路由能力。
- 流量拦截与转发:通过iptables规则透明拦截Pod内进出流量,所有请求先经过Envoy再到达业务容器。
- 动态配置(xDS):通过Aggregated Discovery Service(ADS)从控制平面拉取监听器、路由、集群、端点等配置,实现热更新。
- 可观测性数据面:自动生成HTTP指标(请求数、延迟、错误率)、分布式追踪span、访问日志,无需业务埋点。
- 安全执行点:在代理层执行mTLS握手、RBAC鉴权、JWT验证,确保网格内通信加密与策略合规。
Envoy在网格中的独特价值:相比Nginx/HAProxy等传统代理,Envoy原生支持xDS动态配置、热重启、多线程模型、以及丰富的可扩展Filter链,是唯一被Istio选为数据平面标配的代理。
1.4 Envoy核心组件与Filter链
Envoy内部采用Filter链架构处理流量,每个请求经过一系列可插拔的Filter,实现协议解析、路由、限流、日志等能力:
1.5 为什么Envoy适合服务网格
| 特性 | Envoy实现方式 | 网格收益 |
|---|---|---|
| 热重启 | 父进程保持连接,子进程接管新连接 | Sidecar升级不中断业务流量 |
| 多线程模型 | Worker线程 + 非阻塞事件循环 | 高吞吐低延迟,适合网格大规模代理 |
| xDS协议 | gRPC流式推送配置增量 | 控制平面秒级生效,无需重启代理 |
| 可扩展Filter | C++原生Filter + Lua/WASM沙箱 | 支持自定义治理逻辑(如租户配额校验) |
| 全链路可观测 | OpenTelemetry + 标准指标格式 | 网格内任意请求可追踪、可度量 |
注意:Envoy虽然功能强大,但配置模型复杂。在服务网格中,运维人员通常不直接编写Envoy配置,而是通过Istio的VirtualService/DestinationRule等CRD间接管理。理解Envoy底层原理,有助于排查网格治理回滚与配额校准中的疑难问题。