2. Istio 核心组件:Pilot、Mixer、Citadel、Galley、Envoy 代理的角色与通信流程

Istio 服务网格由数据平面与控制平面组成。数据平面由 Envoy 代理构成,负责处理所有进出服务的流量;控制平面则管理代理的配置、安全策略与遥测数据。本章深入剖析五大核心组件——Pilot、Mixer、Citadel、Galley 与 Envoy——的职责及其协作通信流程,为后续多租户签名链路的性能优化奠定基础。

2.1 组件角色总览

下表总结了每个核心组件在 Istio 架构中的主要职责与关键特性:

组件 所属平面 核心职责 关键特性
Envoy 数据平面 代理所有进出 Pod 的流量,执行路由、负载均衡、故障注入、TLS 终止 基于 xDS API 动态配置;热重启;L4/L7 过滤链
Pilot 控制平面 服务发现与流量管理规则下发;将高级路由规则转换为 Envoy 可理解的 xDS 配置 对接 Kubernetes Service/Endpoint;支持 VirtualService/DestinationRule
Mixer 控制平面 策略检查(RBAC、配额)与遥测数据收集(日志、指标、追踪) 通过 Mixer Adapter 扩展后端;支持 Check/Report 两阶段模型
Citadel 控制平面 证书签发与管理;服务间 mTLS 身份认证 自动轮换证书;支持 SPIFFE 身份标准;CA 集成
Galley 控制平面 配置验证、处理与分发;作为控制平面的配置输入网关 配置格式校验;屏蔽底层平台差异;减少 Pilot 直接依赖

2.2 组件间通信流程

Istio 控制平面各组件之间以及组件与数据平面 Envoy 之间的通信遵循明确的协议与端口约定。下图展示了核心组件之间的交互关系与数据流向:

Istio 核心组件通信架构 控制平面 Galley 配置验证与分发 Pilot 服务发现 & 流量管理 Citadel 证书签发 & mTLS Mixer 策略 & 遥测 数据平面 Envoy Sidecar 服务 A Envoy Sidecar 服务 B Envoy Sidecar 服务 C 配置推送 xDS (LDS/RDS/CDS/EDS) 证书分发 Check / Report

2.3 组件通信协议与端口

各组件之间通过 gRPC 或 HTTP/2 进行通信,关键端口与协议如下:

通信链路 协议 默认端口 说明
Galley → Pilot gRPC 9901 Galley 将验证后的配置推送给 Pilot
Pilot → Envoy gRPC (xDS) 15010 (明文) / 15012 (TLS) 下发 LDS、RDS、CDS、EDS 配置
Citadel → Envoy gRPC 8060 证书签发与轮换(通过 SDS)
Envoy → Mixer gRPC 9091 策略检查(Check)与遥测报告(Report)
Pilot → Kubernetes API HTTPS 6443 监听 Service、Endpoint、Pod 变化

2.4 核心通信流程详解

2.4.1 配置分发流程(Pilot 与 Envoy)

Pilot 是控制平面中与数据平面交互最频繁的组件。它通过 xDS(Discovery Service)协议向 Envoy 推送动态配置。xDS 包含以下关键子协议:

  • LDS(Listener Discovery Service):定义 Envoy 监听的端口与过滤器链。
  • RDS(Route Discovery Service):定义虚拟主机与路由规则,决定请求转发目标。
  • CDS(Cluster Discovery Service):定义上游服务集群及其负载均衡策略。
  • EDS(Endpoint Discovery Service):定义集群中可用的后端实例列表。

性能要点:在多租户签名链路中,Pilot 需要为每个租户维护独立的 VirtualService 与 DestinationRule。当租户数量超过 100 时,建议启用 PILOT_ENABLE_XDS_CACHE 以减少重复计算,同时使用 PILOT_DEBOUNCE_AFTER 控制配置聚合延迟,避免频繁推送导致 Envoy 抖动。

2.4.2 安全证书分发流程(Citadel 与 Envoy)

Citadel 通过 SDS(Secret Discovery Service)为 Envoy 提供证书与私钥。流程如下:

  1. Envoy 启动时向 Citadel 发起 SDS 请求,携带服务账号令牌。
  2. Citadel 验证令牌,签发 SPIFFE 格式的 X.509 证书。
  3. Citadel 将证书与私钥通过 gRPC 流返回给 Envoy。
  4. Envoy 将证书加载到 TLS 上下文,用于 mTLS 握手。
  5. 证书即将过期时,Envoy 自动发起轮换请求,Citadel 签发新证书。

最佳实践:在多租户场景下,建议为每个租户配置独立的 Citadel 根证书,或使用 MeshConfig.ca 指定租户级 CA。证书轮换周期建议设置为 24 小时,以平衡安全性与性能开销。

2.4.3 策略与遥测流程(Envoy 与 Mixer)

Mixer 采用两阶段模型与 Envoy 交互:

阶段 接口 触发时机 说明
Check Check() 请求到达 Envoy 时 同步调用,检查 RBAC、配额、白名单等策略;返回 allow/deny
Report Report() 请求处理完成后 异步调用,上报请求日志、延迟、响应码等遥测数据

性能警告:Mixer Check 是同步调用,会增加请求路径的额外延迟。在高吞吐签名链路中,建议启用 Mixer 缓存(mixer.checkCache)或直接使用 Envoy 原生 Wasm 插件替代 Mixer 遥测,以降低 P99 延迟。

2.5 组件间依赖关系

下图展示了 Istio 控制平面组件之间的启动依赖与配置流向:

组件依赖与配置流向 Kubernetes API Galley Pilot Citadel Mixer 监听资源 推送配置 无直接依赖 无直接依赖

2.6 多租户签名链路中的组件通信要点

在多租户签名链路场景下,组件通信需要额外关注以下方面:

  • Pilot 配置隔离:通过 exportTo 和 namespace 隔离不同租户的 VirtualService,避免路由规则冲突。
  • Citadel 证书管理:每个租户使用独立的 Kubernetes Namespace,Citadel 基于 Namespace 签发证书,确保租户间 mTLS 隔离。
  • Mixer 策略缓存:为每个租户配置独立的 Mixer Adapter 实例,避免租户间策略检查相互影响。
  • Envoy 资源限制:每个 Sidecar 的 xDS 订阅数量随租户数量线性增长,建议设置 ENVOY_XDS_RESOURCE_LIMIT 防止内存溢出。

优化建议:在签名链路中,建议将 Mixer Check 替换为 Envoy 原生 RBAC 过滤器(envoy.filters.http.rbac),减少一次 gRPC 调用,可将签名请求的 P99 延迟降低 15%~25%。同时,启用 Pilot 的 PILOT_ENABLE_XDS_V3 以使用更高效的 xDS v3 协议。