4. Istio 控制平面原理:Pilot、Galley 与 Citadel

Istio 控制平面由三大核心组件构成:Pilot(服务发现与路由)、Galley(配置管理与验证)和 Citadel(安全证书管理)。三者协同工作,为数据平面 Sidecar 代理提供动态、安全、可观测的网格控制能力。本章深入剖析每个组件的内部原理、关键流程与性能基准测试关注点。

4.1 Pilot:服务发现与路由规则引擎

Pilot 是 Istio 控制平面的“大脑”,负责将高层路由规则(VirtualService、DestinationRule)转换为 Envoy 可理解的 xDS 协议配置,并推送至所有 Sidecar 代理。

4.1.1 核心职责

  • 服务发现抽象:对接 Kubernetes、Consul、Eureka 等注册中心,统一抽象为 ServiceRegistry。
  • 规则转换:将 Istio CRD(VirtualService、DestinationRule)编译为 Envoy 的 Cluster、Listener、Route 配置。
  • xDS 推送:通过 gRPC 流式推送(ADS)将增量或全量配置下发到每个 Envoy。
  • 端点管理:实时跟踪 Service Endpoint 变化,更新负载均衡池。

4.1.2 服务发现与路由流程

  1. Pilot 监听 Kubernetes API Server 的 Service、Pod、Endpoint 事件。
  2. 用户创建 VirtualService / DestinationRule CRD,Pilot 的 Config Controller 捕获变更。
  3. Pilot 将服务拓扑与路由规则合并,生成 Envoy 的 xDS 资源(LDS、RDS、CDS、EDS)。
  4. 通过 gRPC ADS 流推送到所有连接的 Envoy Sidecar。
  5. Envoy 根据新配置立即生效,实现流量路由、超时、重试、熔断等策略。
性能基准测试关注点: Pilot 的 xDS 推送延迟(P99 < 500ms)、每秒可处理的端点变更数(≥ 10k/s)、大规模集群下(5000+ Service)的内存占用与 CPU 消耗。
Pilot 服务发现与路由推送流程 Pilot 服务发现与路由推送流程 K8s API Server Pilot (Discovery) xDS (ADS) 流 Envoy Sidecar VirtualService / DestinationRule 关键流程说明: ① Pilot 监听 K8s API 获取 Service/Endpoint 变更;② 用户 CRD 定义路由规则; ③ Pilot 将服务拓扑 + 规则编译为 xDS 资源;④ 通过 ADS 流式推送至所有 Envoy。

4.2 Galley:配置管理与验证

Galley 是 Istio 的配置处理中心,负责从 Kubernetes 集群中收集、验证、转换 Istio 配置资源,并将清洗后的配置分发给 Pilot 等其他控制面组件。

4.2.1 核心职责

  • 配置采集:监听 K8s API Server 中所有 Istio CRD(如 VirtualService、DestinationRule、ServiceEntry、PeerAuthentication 等)的变更事件。
  • 配置验证:对 CRD 进行语义校验(如路由规则冲突检测、端口合法性检查),拒绝无效配置并上报错误状态。
  • 配置转换:将原始 CRD 转换为内部统一的 MCP(Mesh Configuration Protocol)资源模型。
  • 配置分发:通过 MCP 协议将已验证的配置推送到 Pilot 等订阅组件。

4.2.2 配置处理流程

步骤 动作 说明
1 监听 Galley 通过 Informer 监听 K8s API Server 的 CRD 变更事件
2 验证 执行语义校验:路由权重总和是否为 100、目标端口是否存在、TLS 配置是否合法
3 转换 将 CRD 转换为 MCP 资源对象,统一数据模型
4 分发 通过 MCP gRPC 流将配置推送到 Pilot 的 Config Controller
最佳实践: 在大型集群中,建议为 Galley 配置独立的资源配额(CPU: 500m-2C, Memory: 512Mi-2Gi),并开启 Galley 的监控指标(galley.validation.metrics)以追踪配置验证延迟和拒绝率。

4.3 Citadel:安全证书管理

Citadel(现为 istiod 内置的 CA 组件)负责 Istio 网格内的身份认证与证书管理,为每个工作负载签发 SPIFFE 兼容的 X.509 证书,实现 mTLS 通信。

4.3.1 核心职责

  • 身份颁发:为每个 Service Account 签发 SPIFFE 格式的身份证书(spiffe://cluster.local/ns/<ns>/sa/<sa>)。
  • 证书轮换:管理证书生命周期,自动轮换即将过期的证书(默认 TTL 24h)。
  • CA 管理:支持自签名根 CA、集成外部 CA(如 cert-manager、Vault)。
  • 密钥分发:通过 Secret 卷挂载或 SDS(Secret Discovery Service)将证书和私钥安全下发到 Sidecar。

4.3.2 证书签发与轮换流程

  1. Envoy Sidecar 启动时通过 SDS 协议向 Citadel 请求证书。
  2. Citadel 验证请求者身份(基于 K8s Service Account )。
  3. Citadel 生成 X.509 证书,绑定 SPIFFE ID,设置 TTL(默认 24h)。
  4. 证书通过 SDS gRPC 流返回 Envoy,Envoy 加载到 TLS 上下文。
  5. 证书过期前(TTL 的 80%),Envoy 自动发起轮换请求,Citadel 签发新证书。
性能基准测试关注点: Citadel 的证书签发吞吐量(≥ 1000 certs/s)、SDS 请求延迟(P99 < 200ms)、大规模集群下(5000+ Pod)的 CA 签名性能与内存开销。建议使用外部 CA 时关注签名接口的 QPS 限制。
Citadel 证书签发与 mTLS 通信流程 Citadel 证书签发与 mTLS 通信流程 Citadel (CA) SDS 协议 Envoy Sidecar A Envoy Sidecar B mTLS 证书请求 证书生命周期管理: ① Envoy 通过 SDS 向 Citadel 请求证书,Citadel 验证 Service Account 身份; ② Citadel 签发 SPIFFE X.509 证书(TTL 24h),通过 SDS 返回 Envoy; ③ Envoy A 与 Envoy B 建立 mTLS 连接,双向验证证书;④ 证书过期前自动轮换。

4.4 三大组件协同关系

Pilot、Galley、Citadel 并非孤立运行,而是通过内部 gRPC 接口紧密协作:

  • Galley → Pilot:Galley 将验证后的配置通过 MCP 协议推送给 Pilot 的 Config Controller。
  • Pilot → Envoy:Pilot 将服务发现与路由规则通过 xDS 推送到 Envoy。
  • Citadel → Envoy:Citadel 通过 SDS 为 Envoy 提供证书,Envoy 使用证书建立 mTLS 连接。
  • Galley → Citadel:Galley 验证安全策略配置(如 PeerAuthentication、DestinationRule TLS 设置),确保与 Citadel 的证书策略一致。
组件 输入 输出 性能关键指标
Pilot K8s Service/Endpoint + CRD 路由规则 xDS 配置(LDS/RDS/CDS/EDS) 推送延迟、端点变更吞吐、内存占用
Galley K8s CRD 原始配置 MCP 已验证配置 配置验证延迟、拒绝率、MCP 推送 QPS
Citadel Service Account SPIFFE X.509 证书 证书签发吞吐、SDS 延迟、CA 签名性能
架构演进说明: 自 Istio 1.5 起,Pilot、Galley、Citadel 合并为单一的 istiod 进程,简化部署与运维。但内部职责划分与通信协议保持不变,理解独立组件原理有助于排查 istiod 的性能瓶颈。