2. Envoy xDS 协议基础:控制面与数据面的交互模型

xDS(Discovery Service)是 Envoy 与控制面(如 Istio Pilot、xDS 管理服务器)之间通信的核心协议集合。它采用“拉取 + 推送”的异步模型,实现数据面(Envoy Sidecar)的动态配置下发。理解 xDS 协议是进行网格升级窗口安全验证的前提。

2.1 五大核心 xDS 资源

Envoy 通过以下五种发现服务获取运行时配置,每种服务对应一个独立的 gRPC 流或 REST-JSON 端点:

缩写 全称 核心作用 典型更新频率
CDS Cluster Discovery Service 定义上游服务集群(名称、端点发现类型、负载均衡策略、TLS 上下文) 低(服务拓扑变更时)
EDS Endpoint Discovery Service 返回集群中具体的后端实例 IP:Port 列表及健康状态 高(Pod 扩缩容、滚动更新时)
LDS Listener Discovery Service 配置 Envoy 监听的端口、协议、过滤器链(HTTP、TCP、TLS 等) 中(网关规则、虚拟服务变更时)
RDS Route Discovery Service 定义 HTTP 路由规则(域名匹配、路径转发、重试、超时、流量拆分) 中(路由规则变更时)
SDS Secret Discovery Service 动态下发 TLS 证书、私钥、验证 CA,实现 mTLS 轮换 低(证书到期或轮换时)
升级窗口关注点: 在网格升级期间,CDS 和 LDS 的变更往往导致 Envoy 重建连接池或监听器,可能引发瞬时流量中断;EDS 的频繁更新则可能触发大量端点抖动。验证 xDS 下发的顺序和完整性是防护的核心。

2.2 控制面与数据面交互模型

Envoy 与控制面之间采用“订阅-响应”模式,每个 xDS 流都是独立的 gRPC 双向流(或 REST 轮询)。下图展示了典型的交互流程:

xDS 控制面与数据面交互模型 xDS 控制面与数据面交互模型 控制面 Istiod / xDS Server 数据面 Envoy Sidecar ① 订阅请求 (Subscribe) ② 初始快照 (Snapshot) ③ 增量更新 (Delta / SotW) ④ ACK / NACK 响应 交互关键特征: • 每个 xDS 类型(CDS/EDS/LDS/RDS/SDS)拥有独立的 gRPC 流 • 支持“状态世界(SotW)”全量推送和“Delta”增量推送两种模式 • Envoy 必须对每次更新返回 ACK(成功)或 NACK(失败+错误原因) • 升级窗口期间,NACK 可能导致配置回滚或 Envoy 进入降级状态

2.3 升级窗口中的 xDS 数据流风险

在网格升级窗口期间,控制面版本升级或重启会导致 xDS 流重建,此时可能暴露以下风险:

  • 配置版本不一致: 新控制面可能推送与旧 Envoy 不兼容的 xDS 资源(如新的过滤器 API 版本),导致 NACK 风暴。
  • 订阅超时与重连风暴: 控制面重启期间,大量 Envoy 同时发起订阅请求,可能压垮控制面,造成配置下发延迟。
  • EDS 端点抖动: 升级过程中 Pod 重建导致端点频繁变更,Envoy 可能收到不完整的端点列表,引发流量路由到不健康的实例。
  • SDS 证书轮换中断: 如果 SDS 流在证书轮换期间中断,Envoy 可能使用过期证书,导致 mTLS 握手失败。
安全验证要点: 在升级窗口上线前,必须验证控制面在重启后能否正确恢复所有 xDS 流,且 Envoy 的 ACK 率达到 100%。任何 NACK 都应视为潜在的安全事件,需要立即分析错误原因(如资源版本冲突、字段不识别、依赖缺失)。

2.4 xDS 版本协商与兼容性

Envoy 与控制面通过 xDS 请求中的 type_url 和 version_info 字段进行版本协商。下表列出了常见 xDS API 版本及其关键差异:

API 版本 传输方式 关键特性 升级兼容性风险
v2 (deprecated) SotW 全量推送,资源通过 resources 字段传递 Envoy 1.24+ 已移除 v2 支持,升级前必须迁移
v3 (当前标准) SotW + Delta 支持增量推送、资源别名、扩展的验证钩子 控制面与 Envoy 必须同时支持 v3,否则流建立失败
Delta v3 增量 仅推送变更资源,减少带宽和 CPU 开销 需要控制面实现 Delta 协议,Envoy 默认支持

2.5 升级窗口验证清单(xDS 层面)

基于上述基础,在网格升级窗口上线前,应至少完成以下 xDS 层面的验证:

  1. 流建立验证: 确认控制面重启后,所有 Envoy 在 30 秒内成功建立 CDS/EDS/LDS/RDS/SDS 五条 gRPC 流。
  2. 版本一致性验证: 检查控制面推送的 xDS 资源版本号与 Envoy 当前运行版本是否匹配,无 NACK 日志。
  3. 增量更新验证: 模拟一次端点变更(如手动扩缩容),确认 EDS 增量推送生效,Envoy 端点列表在 5 秒内更新。
  4. 证书轮换验证: 触发 SDS 证书轮换,确认 Envoy 在 60 秒内加载新证书,且 mTLS 连接无中断。
  5. 压力测试: 模拟 1000 个 Envoy 同时订阅,控制面 CPU 和内存使用率不超过 80%,无订阅超时。
核心结论: xDS 协议是网格升级的“神经系统”。只有确保控制面与数据面之间的 xDS 交互在升级窗口期间保持稳定、一致、低延迟,才能保障业务流量的安全切换。下一节将深入讲解如何通过 go-control-plane 模拟 xDS 下发,进行自动化防护验证。