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 之间的通信遵循明确的协议与端口约定。下图展示了核心组件之间的交互关系与数据流向:
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 提供证书与私钥。流程如下:
- Envoy 启动时向 Citadel 发起 SDS 请求,携带服务账号令牌。
- Citadel 验证令牌,签发 SPIFFE 格式的 X.509 证书。
- Citadel 将证书与私钥通过 gRPC 流返回给 Envoy。
- Envoy 将证书加载到 TLS 上下文,用于 mTLS 握手。
- 证书即将过期时,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 控制平面组件之间的启动依赖与配置流向:
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 协议。