3、Istio控制平面架构:Pilot、Mixer(历史)、Citadel、Galley组件职责与交互流程
Istio 控制平面是服务网格的“大脑”,负责将数据平面(Envoy)的配置下发、安全策略、遥测采集与策略执行统一管理。在 1.5 版本之前,Istio 控制平面由四个核心组件构成:Pilot、Mixer(已废弃)、Citadel 和 Galley。理解这些组件的职责与交互流程,是掌握 Istio 架构演进与选型对比的基础。
3.1 组件职责总览
| 组件 | 核心职责 | 状态 |
|---|---|---|
| Pilot | 服务发现、流量管理规则下发、Envoy xDS 配置推送 | 核心组件,持续演进 |
| Mixer | 遥测数据收集、访问控制策略执行、配额管理 | 1.5 版本后废弃,功能并入 Envoy 与代理层 |
| Citadel | 证书签发与管理、身份认证、mTLS 密钥分发 | 核心组件,持续演进 |
| Galley | 配置验证、输入格式转换、配置分发与状态管理 | 1.5 版本后功能并入 Pilot 与核心 API 层 |
架构演进提示: Istio 1.5 之后将 Pilot、Citadel、Galley 合并为单一的 istiod 组件,简化部署与运维。但理解拆分架构有助于深入掌握配置下发与安全认证的底层原理。
3.2 Pilot:服务发现与配置下发核心
Pilot 是 Istio 控制平面中与数据平面交互最频繁的组件。它负责将用户定义的流量管理规则(VirtualService、DestinationRule)与服务注册信息转换为 Envoy 可理解的 xDS 协议配置。
- 服务发现:对接 Kubernetes、Consul、Eureka 等平台,获取服务实例列表。
- 规则转换:将 Istio CRD(Custom Resource Definition)转换为 Envoy 的 Listener、Cluster、Route、Endpoint 配置。
- xDS 推送:通过 gRPC 流式推送(ADS)将配置实时下发到所有 Sidecar Envoy。
- 健康检查:监控 Envoy 连接状态,处理断连重推。
3.3 Mixer(历史组件):遥测与策略执行
注意: Mixer 在 Istio 1.5 版本中已被正式废弃,其功能被重构并下沉到 Envoy 代理层。以下内容仅作为历史架构参考,用于理解 Istio 设计理念的演变。
Mixer 最初被设计为 Istio 的“策略与遥测中枢”,所有 Envoy 代理在转发请求前/后都会向 Mixer 发送 Check 和 Report 请求。
- Check:前置调用,用于访问控制、速率限制、配额校验。
- Report:后置调用,用于日志、指标、追踪数据的聚合与上报。
- 适配器模型:通过适配器对接 Prometheus、Stackdriver、Datadog 等后端系统。
Mixer 的废弃主要源于性能瓶颈:每次请求都增加一次外部 RPC 调用,显著增加延迟。Istio 社区随后将策略执行与遥测采集逻辑直接集成到 Envoy 的 Wasm 扩展或内置 Filter 中。
3.4 Citadel:安全证书管理
Citadel 负责 Istio 中的身份安全与证书生命周期管理,是实现服务间 mTLS 认证的核心组件。
- CA 服务:作为集群内部的证书颁发机构(CA),为每个工作负载签发 SPIFFE 格式的身份证书。
- 证书轮换:自动管理证书过期与轮换,默认每 24 小时轮换一次。
- 密钥分发:通过 Secret 卷挂载或 SDS(Secret Discovery Service)将私钥与证书下发到 Envoy。
- 身份绑定:将 Kubernetes ServiceAccount 与 SPIFFE ID 绑定,确保身份可信。
3.5 Galley:配置验证与分发
Galley 在早期 Istio 架构中承担配置处理管道的入口角色,负责验证、转换和分发用户提交的 Istio 配置。
- 配置验证:对用户提交的 VirtualService、DestinationRule 等 CRD 进行语义校验。
- 格式转换:将 Kubernetes 原生资源格式转换为 Istio 内部统一的配置模型。
- 状态管理:维护配置的版本与状态,确保 Pilot 获取的配置始终是最新且有效的。
- 事件监听:监听 Kubernetes API Server 的配置变更事件,触发 Pilot 重新推送。
3.6 组件交互流程
以下 SVG 图展示了 Istio 1.5 之前版本中四个控制平面组件与数据平面 Envoy 之间的核心交互流程:
3.7 交互流程步骤详解
- 配置提交:用户通过 kubectl 或 Istio API 提交 VirtualService、DestinationRule 等 CRD 配置。
- Galley 验证与转换:Galley 监听 API Server 的配置变更,对 CRD 进行语义校验,并将其转换为 Istio 内部统一的配置模型。
- Pilot 获取配置:Pilot 从 Galley 拉取或接收推送的内部配置模型,同时从平台(如 Kubernetes)获取服务注册信息。
- Citadel 证书管理:Citadel 监听新的工作负载启动,为其签发 SPIFFE 证书,并通过 SDS 或 Secret 卷挂载下发到 Envoy。
- xDS 配置下发:Pilot 将流量规则与服务发现信息转换为 Envoy 的 xDS 配置(LDS、RDS、CDS、EDS),通过 gRPC 流式推送到每个 Sidecar Envoy。
- Mixer 策略与遥测(历史):Envoy 在请求处理过程中,向 Mixer 发送 Check 请求进行策略校验,并在请求结束后发送 Report 上报遥测数据。Mixer 通过适配器将数据转发到后端系统。
3.8 组件交互的关键设计要点
- 配置推送的最终一致性:Pilot 采用 ADS(Aggregated Discovery Service)模式,保证 Envoy 接收到的 Listener、Route、Cluster、Endpoint 配置版本一致,避免流量中断。
- 证书轮换的无缝性:Citadel 通过 SDS 协议实现证书热更新,Envoy 无需重启即可加载新证书,保证 mTLS 连接不中断。
- Mixer 的性能瓶颈:每次请求都增加一次外部 RPC 调用,导致延迟增加约 5-10ms,这是 Mixer 被废弃的主要原因。
- Galley 的单点故障:在早期架构中,Galley 是配置处理的唯一入口,一旦故障会导致新配置无法生效。合并到 istiod 后简化了故障域。
架构选型启示: 理解 Istio 1.5 之前的四组件架构,有助于在对比其他服务网格(如 Linkerd、Consul Connect)时,评估控制平面的复杂度、性能开销与运维成本。Istio 后续的 istiod 合并正是为了降低这种复杂度。