2. Istio 架构深度解析:Pilot、Mixer、Citadel、Galley 组件功能与交互流程
在 Service Mesh 回滚护栏的实践中,Istio 控制面的架构理解是配置优化的前提。Istio 1.5+ 版本将核心组件整合为单一的 istiod 二进制,但其内部逻辑仍清晰划分为四个关键功能域:Pilot(服务发现与流量管理)、Mixer(策略与遥测,已逐步废弃但架构逻辑仍被引用)、Citadel(安全与证书管理)和 Galley(配置验证与分发)。本章深度解析每个组件的职责及其交互流程,为后续回滚策略的配置校验与状态同步奠定基础。
2.1 组件功能总览
下表从核心职责、数据平面交互方式、回滚场景中的关键作用三个维度,对比四个组件的功能定位:
| 组件 | 核心职责 | 与数据平面交互方式 | 回滚场景关键作用 |
|---|---|---|---|
| Pilot | 服务发现、流量路由规则下发(VirtualService / DestinationRule) | 通过 xDS 协议(LDS / RDS / CDS / EDS)推送 Envoy 配置 | 回滚时需确保 xDS 缓存版本与期望状态一致,避免流量中断 |
| Mixer | 策略检查(Check)与遥测报告(Report) | Envoy 通过 gRPC 调用 Mixer 进行前置策略校验 | 回滚期间需临时绕过 Mixer 策略,防止旧配置被错误拒绝 |
| Citadel | 证书签发、身份认证、密钥管理 | 通过 SDS(Secret Discovery Service)向 Envoy 推送证书 | 回滚时需保持证书连续性,避免因证书轮换导致 mTLS 握手失败 |
| Galley | 配置输入验证、格式转换、状态分发 | 监听 Kubernetes CRD 变更,验证后转发给 Pilot / Mixer / Citadel | 回滚前需通过 Galley 验证旧配置语法,防止无效配置进入控制面 |
2.2 组件交互流程与数据流
下图展示了 Istio 控制面内部组件之间的配置流转与数据平面交互关系。该流程是回滚护栏中“配置校验 → 状态同步 → 流量切换”的核心链路。
2.3 Pilot:流量管理的核心引擎
Pilot 是 Istio 控制面中与数据平面交互最频繁的组件。它负责将高层级的流量规则(VirtualService、DestinationRule)转换为 Envoy 可理解的 xDS 协议配置。
- 服务发现(Service Discovery): 从 Kubernetes 或 Consul 等注册中心获取服务端点列表,通过 EDS(Endpoint Discovery Service)推送给 Envoy。
- 流量规则转换: 将 VirtualService 中的路由规则、权重分配、故障注入等抽象语义,转换为 Envoy 的 RouteConfiguration(RDS)和 Listener(LDS)。
- 集群管理: 通过 CDS(Cluster Discovery Service)管理 Envoy 的上游集群定义,包括连接池、负载均衡策略、熔断阈值。
- 状态缓存与版本控制: Pilot 维护每个 Envoy 的已推送配置版本号,回滚时通过版本比对确保增量更新正确性。
istioctl proxy-status 确认所有 Envoy 的 xDS 版本一致。
2.4 Mixer:策略与遥测的中间层(架构参考)
虽然 Mixer 在 Istio 1.8+ 中已被标记为废弃,但其“前置策略检查”模型在回滚护栏设计中仍有参考价值。在旧版 Istio 中,Mixer 承担以下职责:
| 功能 | 描述 | 回滚影响 |
|---|---|---|
| Check | Envoy 在转发请求前调用 Mixer 进行策略校验(如白名单、速率限制) | 回滚期间若 Mixer 策略变更,可能导致旧服务被错误拒绝 |
| Report | Envoy 在请求结束后向 Mixer 上报遥测数据(延迟、状态码、流量指标) | 回滚时遥测数据可能中断,影响监控告警的连续性 |
| Adapter 模型 | 通过适配器对接外部系统(Prometheus、Stackdriver、Redis) | 回滚需确保适配器配置兼容,避免数据上报失败 |
2.5 Citadel:安全通信的基石
Citadel 负责管理 Istio 网格内的身份认证与通信加密。它通过 SDS(Secret Discovery Service)向 Envoy 推送证书和密钥,实现 mTLS 双向认证。
- 证书签发: 为每个 Service Account 签发 SPIFFE 格式的身份证书,默认有效期 24 小时。
- 自动轮换: 在证书过期前自动触发轮换,Envoy 通过 SDS 动态获取新证书,无需重启。
- 根证书管理: 维护网格根证书(Root CA),用于验证所有工作负载的身份。
istioctl proxy-config secret 检查所有 Envoy 的证书状态,确保回滚期间证书有效期充足(至少剩余 1 小时)。
2.6 Galley:配置管道的守门人
Galley 是 Istio 控制面的配置输入网关。它监听 Kubernetes CRD 的变更,执行格式验证和语义检查,然后将合法配置分发给 Pilot、Mixer 和 Citadel。
| 职责 | 具体行为 | 回滚场景价值 |
|---|---|---|
| 配置验证 | 检查 CRD 的 YAML 语法、字段类型、依赖关系(如 VirtualService 引用的 DestinationRule 是否存在) | 回滚前通过 Galley 验证旧配置,避免无效配置进入控制面 |
| 格式转换 | 将 Istio CRD 转换为内部 Protobuf 格式,供 Pilot 和 Citadel 消费 | 确保回滚配置的格式与当前 Istio 版本兼容 |
| 状态分发 | 将验证后的配置推送到 Pilot 和 Citadel 的本地缓存 | 回滚时需清空 Galley 缓存,强制重新加载旧配置 |
| 多集群支持 | 在多集群部署中,Galley 负责跨集群配置同步 | 回滚需确保所有集群的 Galley 状态一致 |
istioctl analyze 进行全量配置分析。
2.7 组件交互流程总结
下图从“配置生命周期”角度,展示回滚场景下组件间的完整交互链路:
2.8 组件交互中的关键协议与端口
理解组件间的通信协议和端口,有助于在回滚过程中排查网络连通性问题:
| 组件对 | 协议 | 默认端口 | 回滚排查要点 |
|---|---|---|---|
| Galley → Pilot | gRPC (TLS) | 15010 (非TLS) / 15012 (TLS) | 回滚时检查 Galley 到 Pilot 的 gRPC 连接是否中断 |
| Pilot → Envoy | xDS (gRPC) | 15010 (非TLS) / 15012 (TLS) | 确认 Envoy 能连接到 Pilot 的 xDS 端口 |
| Citadel → Envoy | SDS (gRPC) | 15010 (非TLS) / 15012 (TLS) | 回滚后检查证书轮换是否触发 |
| Mixer → Envoy | gRPC (TLS) | 9091 (Check) / 9092 (Report) | 回滚期间可临时关闭 Mixer Check 端口 |
istioctl proxy-status 查看 Envoy 与 Pilot 的 xDS 连接状态;使用 istioctl proxy-config secret 查看证书状态。若连接异常,优先检查网络策略和 TLS 证书是否匹配。