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 服务发现与路由流程
- Pilot 监听 Kubernetes API Server 的 Service、Pod、Endpoint 事件。
- 用户创建 VirtualService / DestinationRule CRD,Pilot 的 Config Controller 捕获变更。
- Pilot 将服务拓扑与路由规则合并,生成 Envoy 的 xDS 资源(LDS、RDS、CDS、EDS)。
- 通过 gRPC ADS 流推送到所有连接的 Envoy Sidecar。
- Envoy 根据新配置立即生效,实现流量路由、超时、重试、熔断等策略。
性能基准测试关注点: Pilot 的 xDS 推送延迟(P99 < 500ms)、每秒可处理的端点变更数(≥ 10k/s)、大规模集群下(5000+ Service)的内存占用与 CPU 消耗。
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 证书签发与轮换流程
- Envoy Sidecar 启动时通过 SDS 协议向 Citadel 请求证书。
- Citadel 验证请求者身份(基于 K8s Service Account )。
- Citadel 生成 X.509 证书,绑定 SPIFFE ID,设置 TTL(默认 24h)。
- 证书通过 SDS gRPC 流返回 Envoy,Envoy 加载到 TLS 上下文。
- 证书过期前(TTL 的 80%),Envoy 自动发起轮换请求,Citadel 签发新证书。
性能基准测试关注点: Citadel 的证书签发吞吐量(≥ 1000 certs/s)、SDS 请求延迟(P99 < 200ms)、大规模集群下(5000+ Pod)的 CA 签名性能与内存开销。建议使用外部 CA 时关注签名接口的 QPS 限制。
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 的性能瓶颈。