2. Envoy Sidecar 基础架构:Sidecar 模式原理、Envoy 数据面与控制面分离架构

2.1 Sidecar 模式原理与核心价值

Sidecar 模式是服务网格(Service Mesh)的核心部署范式。它将业务容器与代理容器部署在同一个 Pod(或同一台主机)中,共享网络命名空间和存储卷。业务进程无需感知网络拓扑、负载均衡、熔断、可观测性等基础设施逻辑,这些能力全部由 Sidecar 代理透明接管。

核心原则: 零侵入式流量劫持。Sidecar 通过 iptables 规则或透明代理(TPROXY)将进出 Pod 的所有流量重定向到 Envoy 监听端口,业务容器只监听本地回环地址(127.0.0.1),完全无感知。

2.2 Sidecar 模式关键特征对比

维度 传统 SDK 集成 Sidecar 代理模式
语言绑定 每种语言需独立集成 SDK,升级成本高 语言无关,所有服务统一使用 Envoy
升级影响 业务代码需重新编译、测试、发布 仅重启 Sidecar 容器,业务容器零改动
资源隔离 SDK 与业务进程共享堆内存、线程池 独立容器,CPU/内存/连接数可单独限制
故障域 SDK 崩溃可能导致业务进程异常 Sidecar 崩溃不影响业务进程(仅流量中断)
配置热更新 通常需重启进程或依赖动态库重载 Envoy 原生支持 xDS 热更新,无需重启
容量规划启示: Sidecar 升级时,业务容器保持运行,但流量会短暂中断(约 50-200ms 连接迁移)。基线校准必须考虑 Sidecar 重启期间业务容器的连接队列积压和重试风暴。

2.3 Envoy 数据面与控制面分离架构

Envoy 采用典型的数据面与控制面分离架构,这是实现动态配置管理和大规模运维的基础。数据面负责处理实际流量,控制面负责下发配置和健康状态。

Envoy 数据面与控制面分离架构 控制面(Control Plane) xDS 配置服务器 服务发现(EDS) 集群管理(CDS) 路由规则(RDS) 监听器(LDS) Istio / K8s API 数据面(Data Plane) Envoy Sidecar L4/L7 代理 负载均衡 健康检查 TLS 终止 业务容器 xDS 协议(gRPC 流式推送) 控制面 → 数据面:配置推送 数据面 → 控制面:状态上报 升级时需保持 xDS 连接不断

2.4 xDS 协议与动态配置生命周期

Envoy 通过 xDS(Discovery Service)协议族从控制面获取配置。每个 xDS 资源对应一个配置维度,支持增量推送和全量推送两种模式。

xDS 类型 全称 配置内容 升级影响
LDS Listener Discovery Service 监听器端口、过滤器链、透明劫持规则 升级后监听器重建,连接迁移
RDS Route Discovery Service 虚拟主机、路由匹配规则、重定向/重试策略 路由表热更新,无连接中断
CDS Cluster Discovery Service 上游集群端点、负载均衡策略、连接池配置 集群重建可能触发连接池重置
EDS Endpoint Discovery Service 具体端点 IP:Port、健康状态、权重 端点变更影响负载均衡分布
SDS Secret Discovery Service TLS 证书、私钥、验证上下文 证书轮换需保证新旧证书共存
升级风险点: Sidecar 升级过程中,Envoy 进程重启会导致所有 xDS 订阅连接断开。控制面需要支持 快速重连 和 增量恢复,否则大量 Sidecar 同时升级可能引发控制面雪崩(Thundering Herd)。基线校准必须测量控制面在并发重连下的 CPU 和内存峰值。

2.5 数据面流量路径详解

在 Sidecar 模式下,流量路径分为入站(Inbound)和出站(Outbound)两个方向。理解这条路径对升级时容量规划至关重要。

Sidecar 流量路径(入站 + 出站) 外部客户端 Kubernetes Pod iptables PREROUTING Envoy Inbound Listener 业务容器(127.0.0.1:8080) Envoy Outbound Listener iptables OUTPUT 上游服务 升级时流量中断点 Envoy 重启 → iptables 规则丢失 → 连接断开 → 业务重试

2.6 升级场景下的架构影响分析

  • 连接中断窗口: Envoy 进程重启期间(通常 1-3 秒),iptables 规则被清除,新连接无法被劫持,已有连接被 RST。基线校准需测量业务容器在此窗口内的连接失败率。
  • 控制面压力: 升级后 Envoy 重新建立 xDS 订阅,控制面需处理大量并发 ADS 请求。建议基线校准包含控制面在 100/500/1000 并发重连下的响应延迟 P99。
  • 内存抖动: Envoy 启动时会加载全量配置(Listener、Cluster、Route),内存峰值可达稳态的 1.5-2 倍。校准基线需记录升级过程中的 RSS 和 Heap 快照。
  • 连接池重建: 升级后所有上游连接池(HTTP/2、TCP)需要重新建立,可能导致上游服务瞬时负载升高。基线校准应包含上游服务的连接建立速率和 CPU 峰值。
最佳实践: 在 Sidecar 升级前,通过控制面将 Envoy 的 drain_timeout 设置为 5-10 秒,允许已有请求完成处理,再触发优雅关闭。同时,控制面应开启 incremental xDS 以减少全量推送带来的带宽和计算开销。

2.7 架构视角的容量规划关键指标

指标 测量对象 升级影响 校准建议
连接迁移时间 Sidecar Pod 升级期间连接中断时长 目标 < 2s,否则需调整优雅关闭参数
xDS 重连并发 控制面 控制面 CPU/内存峰值 基线校准 10% 节点同时升级的场景
Envoy 启动内存 Sidecar 容器 Pod 内存超限风险 预留 50% 内存 buffer
上游连接建立速率 上游服务 连接风暴导致上游过载 限制每秒新建连接数
iptables 规则恢复 Sidecar 初始化 规则未恢复前流量绕过 Envoy 确保 initContainers 优先执行