2. Istio架构深度解析:控制平面与数据平面的职责与交互
Istio 服务网格的核心架构遵循经典的控制平面/数据平面分离模式。理解这两个平面的职责划分以及它们之间的接口调用机制,是进行网格拓扑优化和性能调优的基础。本章将深入剖析控制平面各组件(Pilot、Mixer、Citadel、Galley)与数据平面(Envoy 代理)的具体功能及交互流程。
2.1 架构总览:控制平面与数据平面
数据平面由一组与每个服务实例共同部署的 Envoy 代理组成,负责处理所有进出服务的流量。控制平面则负责管理和配置这些代理,下发路由规则、安全策略和遥测配置。
关键理解:控制平面不直接参与业务流量转发,它只负责向数据平面下发配置指令。Envoy 代理根据这些指令独立执行流量管理、安全认证和遥测数据采集,这种分离设计保证了数据平面的高性能和低延迟。
2.2 控制平面核心组件职责
控制平面由四个主要组件构成,每个组件承担特定的职责,共同协作完成网格的统一管理。
| 组件 | 核心职责 | 关键能力 |
|---|---|---|
| Pilot | 服务发现与流量管理 | 从平台(Kubernetes/Consul)获取服务注册信息;将用户定义的路由规则(VirtualService、DestinationRule)转换为 Envoy 可理解的 xDS 协议配置;下发至所有 Sidecar 代理。 |
| Mixer | 遥测采集与策略执行 | 接收 Envoy 上报的调用属性;执行访问控制策略(RBAC、配额);将日志和指标数据发送到后端系统(Prometheus、Grafana、Stackdriver)。 |
| Citadel | 安全证书管理 | 为每个服务实例签发 SPIFFE 兼容的 X.509 证书;管理密钥和证书轮换;提供服务间 mTLS 通信的身份基础。 |
| Galley | 配置验证与分发 | 作为控制平面的配置入口,验证用户提交的 Istio CRD(Custom Resource Definitions)的合法性;将验证后的配置分发给 Pilot 和 Mixer。 |
2.3 数据平面:Envoy 代理的职责
Envoy 代理是数据平面的唯一组件,以 Sidecar 模式与每个服务实例部署在一起。它负责处理所有进出该实例的流量,并执行控制平面下发的指令。
- 流量拦截与转发:通过 iptables 规则透明地拦截所有入站和出站流量,并根据路由规则进行转发。
- 负载均衡:支持多种负载均衡算法(轮询、最少连接、一致性哈希等),将流量分发到后端实例。
- 熔断与重试:实现熔断器模式,对故障实例进行隔离;自动重试失败的请求。
- mTLS 通信:与 Citadel 交互获取证书,自动为服务间通信启用双向 TLS 加密。
- 遥测数据上报:将请求的延迟、流量大小、状态码等属性上报给 Mixer 或直接发送到后端。
2.4 控制平面与数据平面的交互流程
控制平面与数据平面之间的交互主要通过 xDS(Discovery Service)协议和 gRPC 流实现。Envoy 代理主动向控制平面发起长连接,订阅所需的配置更新。
2.5 关键接口:xDS 协议详解
xDS 是 Envoy 与控制平面之间的核心通信协议,它定义了一组发现服务接口,用于动态获取配置。Pilot 是 xDS 协议的主要实现者。
| 接口名称 | 全称 | 功能描述 |
|---|---|---|
| LDS | Listener Discovery Service | 下发监听器配置,定义 Envoy 在哪些端口监听流量以及如何处理入站连接。 |
| RDS | Route Discovery Service | 下发路由配置,定义请求如何根据 Host、Path 等条件匹配到具体的集群。 |
| CDS | Cluster Discovery Service | 下发集群配置,定义后端服务实例的集合以及负载均衡策略。 |
| EDS | Endpoint Discovery Service | 下发端点配置,动态更新集群中的具体实例 IP 和端口。 |
| SDS | Secret Discovery Service | 下发证书和密钥配置,用于 mTLS 通信的身份认证。 |
优化关注点:在大型网格中,xDS 推送的效率和稳定性直接影响网格的响应速度。Envoy 与 Pilot 之间的 gRPC 流数量、配置更新的频率、以及 Pilot 的缓存策略,都是后续优化章节的重点。
2.6 组件交互总结
下表总结了各组件之间的主要交互关系,帮助理解控制平面内部以及控制平面与数据平面之间的协作方式。
| 源组件 | 目标组件 | 交互内容 | 协议/方式 |
|---|---|---|---|
| 用户 | Galley | 提交 Istio CRD 配置 | Kubernetes API |
| Galley | Pilot / Mixer | 分发验证后的配置 | gRPC 流 |
| Pilot | Envoy | 下发 xDS 配置(LDS/RDS/CDS/EDS/SDS) | gRPC 流 |
| Envoy | Mixer | 上报请求属性(Check/Report) | gRPC |
| Envoy | Citadel | 请求证书 / 密钥轮换 | gRPC |
| Citadel | Envoy | 下发 X.509 证书 | gRPC (SDS) |
版本演进提示:在 Istio 1.5+ 版本中,Mixer 的功能逐渐被 Envoy 内置的 Wasm 插件和 Telemetry v2 取代,控制平面组件趋向于合并(如 Istiod 将 Pilot、Citadel、Galley 整合为一个单体进程)。但理解原始架构的职责划分,对于排查问题和理解新架构的设计思路仍然至关重要。