3. Envoy 代理架构简介:数据面与控制面、xDS 协议、动态配置

Envoy 的架构核心在于将代理实例(数据面)与配置管理(控制面)解耦。这种分离设计使得 Envoy 能够在不重启进程的情况下,通过标准协议动态调整路由、监听器、集群等行为,是实现供应链信任边界动态验证的基础。

3.1 数据面与控制面分离架构

Envoy 实例本身是一个高性能的 数据面(Data Plane),负责处理实际的网络流量(转发、负载均衡、健康检查、TLS 终止等)。而 控制面(Control Plane)是一个独立的逻辑组件,负责生成并下发配置给 Envoy 实例。控制面可以是 Istio 的 Pilot、AWS App Mesh 的 Envoy Management Service,或自建的 go-control-plane 服务。

架构要点: 数据面只做流量转发,不存储全局状态;控制面管理所有配置逻辑。这种分离使得数据面可以保持轻量和稳定,而控制面可以灵活演进。
Envoy 数据面与控制面分离架构 控制面 (Control Plane) xDS 服务端 配置聚合 & 分发 (Istio Pilot / go-control-plane) 数据面 (Data Plane) Envoy Proxy 实例 流量转发 / 负载均衡 健康检查 / TLS 终止 xDS 协议 (gRPC 流) 下游客户端 (App / 浏览器) 上游集群 (后端服务) 流量路径

3.2 xDS 协议族:动态配置的通信语言

xDS 是 Envoy 与控制面之间的一组 发现服务(Discovery Service)协议,基于 gRPC 流或 REST-JSON 实现。每个 xDS 资源类型对应 Envoy 配置的一个核心维度。Envoy 通过订阅这些资源,实现配置的实时更新。

xDS 类型 全称 管理资源 供应链信任意义
LDS Listener Discovery Service 监听器(端口、协议、过滤器链) 控制哪些端口暴露,防止未授权监听
RDS Route Discovery Service 路由规则(域名、路径、权重) 动态调整流量走向,实现灰度/金丝雀
CDS Cluster Discovery Service 上游集群定义(端点、TLS、负载均衡策略) 确保上游端点可信,防止恶意后端注入
EDS Endpoint Discovery Service 集群内的具体端点 IP:Port 动态感知服务实例变化,避免路由到已下线节点
SDS Secret Discovery Service TLS 证书、私钥、信任链 证书轮换与分发,保障 mTLS 身份可信
信任边界提示: 在供应链安全场景中,SDS 和 CDS 是最关键的 xDS 资源。SDS 控制证书分发,CDS 控制上游集群定义。如果控制面被攻破,攻击者可以通过下发恶意 CDS 将流量引向伪造后端,或通过下发伪造 SDS 证书实施中间人攻击。

3.3 动态配置工作流

Envoy 的动态配置流程遵循“订阅-响应-确认”模式。控制面作为 xDS 服务端,Envoy 作为客户端发起 gRPC 流订阅。当配置变更时,控制面推送增量或全量更新。

  1. 启动阶段: Envoy 启动时读取静态引导配置(bootstrap.yaml),其中包含控制面地址、节点标识、证书路径等。
  2. 订阅 LDS: Envoy 向控制面发起 LDS 请求,获取监听器配置。监听器定义了 Envoy 绑定的端口和过滤器链。
  3. 触发 RDS: 每个监听器中的 HTTP 连接管理器过滤器会触发 RDS 订阅,获取路由规则。
  4. 触发 CDS/EDS: 路由规则中引用的集群名称触发 CDS 订阅,获取集群定义;集群定义中的端点发现类型(STATIC/STRICT_DNS/EDS)进一步触发 EDS 订阅。
  5. 可选 SDS: 如果集群或监听器配置了 TLS,Envoy 会订阅 SDS 获取证书和私钥。
  6. 热更新: 控制面推送增量更新时,Envoy 在不重启 worker 线程的情况下应用新配置,实现零停机配置变更。
Envoy 动态配置订阅流程 控制面 xDS 聚合服务 Envoy 主进程 引导配置 bootstrap.yaml ① LDS 订阅 ② RDS 订阅 ③ CDS / EDS 订阅 ④ SDS 订阅 (可选) 请求 响应

3.4 静态配置 vs 动态配置

Envoy 支持两种配置模式。在供应链信任边界测试中,我们通常从静态配置开始验证基础功能,然后切换到动态配置以测试控制面下发策略的完整性。

对比维度 静态配置 动态配置 (xDS)
配置来源 bootstrap.yaml + 内联定义 控制面通过 xDS 下发
变更方式 修改文件 + 重启或热重启 控制面推送,零停机热更新
信任验证点 文件完整性校验 xDS 消息签名 / mTLS 通道
适用场景 测试环境、固定拓扑 生产环境、动态服务网格
供应链风险 镜像内嵌配置被篡改 控制面被攻破下发恶意配置
安全警告: 在动态配置模式下,Envoy 完全信任控制面下发的所有 xDS 资源。如果控制面与 Envoy 之间的 gRPC 通道未启用 mTLS 认证,攻击者可以伪造 xDS 响应,直接控制 Envoy 的流量转发行为。这是供应链信任边界测试的核心验证项之一。

3.5 与供应链信任边界的关联

理解 Envoy 的数据面/控制面分离和 xDS 协议,是构建信任边界测试验证流程的前提:

  • 镜像内配置验证: 测试 Envoy 镜像中的 bootstrap.yaml 是否硬编码了不安全的控制面地址或证书。
  • xDS 消息完整性: 验证控制面下发的 CDS/SDS 消息是否经过签名,防止中间人篡改。
  • 动态配置回滚: 测试当控制面下发恶意配置时,Envoy 是否具备配置回滚或拒绝机制。
  • 最小权限订阅: 验证 Envoy 是否只订阅了必要的 xDS 资源(例如不需要 SDS 时不应订阅)。