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