2. Istio 架构基础:控制平面与数据平面组件详解
在深入镜像供应链安全巡检与故障排查之前,必须牢固掌握 Istio 的核心架构。Istio 服务网格在逻辑上分为数据平面和控制平面。理解这两个平面的组件职责、通信方式及故障模式,是定位网格内流量中断、证书失效、配置下发失败等问题的前提。
2.1 控制平面组件详解
控制平面是 Istio 的管理核心,负责服务发现、流量管理、安全策略和可观测性配置。在较新版本的 Istio 中,核心组件已整合为 istiod,但理解其前身(Pilot、Mixer、Citadel)的职责,对于排查历史版本或理解底层逻辑至关重要。
| 组件 | 核心职责 | 关键功能 | 故障影响 |
|---|---|---|---|
| Pilot | 服务发现与流量管理 | 将高级路由规则转换为 Envoy 配置(xDS API),同步服务注册表 | 流量转发异常、路由规则不生效、灰度发布失败 |
| Mixer | 策略控制与遥测采集 | 前置检查(Check)、配额管理、日志/指标上报(Report) | 访问拒绝、延迟增加、监控数据缺失 |
| Citadel | 安全证书管理 | 密钥与证书生成、分发、轮换(基于 SPIFFE) | mTLS 握手失败、服务间通信中断、证书过期 |
2.1.1 Pilot:流量规则的翻译官
Pilot 是控制平面中最核心的组件之一。它负责从 Kubernetes 或其他服务注册中心(如 Consul)获取服务实例信息,同时接收用户定义的 VirtualService、DestinationRule 等流量管理规则。Pilot 将这些高级抽象转换为 Envoy 能够理解的 xDS 协议(如 LDS、RDS、CDS、EDS),并通过 gRPC 流推送到所有数据平面的 Envoy 代理。
- 服务发现: 监听 Kubernetes API Server 中的 Service、Endpoint、Pod 变化。
- 规则转换: 将 Istio CRD 转换为 Envoy 的 Listener、Route、Cluster、Endpoint 配置。
- 配置分发: 通过 ADS(Aggregated Discovery Service)实现增量或全量配置推送。
2.1.2 Mixer:策略与遥测的网关
Mixer 在早期版本中承担了策略检查和遥测数据收集的职责。虽然从 Istio 1.5 开始,其功能逐渐内嵌到 Envoy 代理中(通过 Wasm 插件或 Telemetry v2),但在排查旧版网格或理解策略执行模型时仍需了解。
- 前置检查: 在请求被转发前,向 Mixer 发送 Check 请求,验证调用方是否有权限访问目标服务。
- 遥测报告: 请求结束后,向 Mixer 发送 Report 请求,记录日志、指标(如请求延迟、TCP 字节数)。
- 适配器模型: Mixer 通过适配器与后端系统(如 Prometheus、Stackdriver、自定义日志系统)集成。
2.1.3 Citadel:网格安全的基石
Citadel 负责管理 Istio 网格内的身份和证书。它为每个工作负载(Pod)生成基于 SPIFFE 标准的 X.509 证书,并自动进行证书轮换,是实现双向 TLS(mTLS)认证的基础。
- 密钥生成: 为每个 Service Account 生成私钥和证书签名请求(CSR)。
- 证书分发: 通过 SDS(Secret Discovery Service)将证书和密钥安全地下发给 Envoy。
- 自动轮换: 在证书过期前自动进行轮换,无需重启 Pod。
2.2 数据平面组件:Envoy 代理
Envoy 是 Istio 数据平面的唯一组件,以 Sidecar 模式与业务容器部署在同一个 Pod 中。它拦截所有进出 Pod 的流量,并执行控制平面下发的各种策略。
| Envoy 核心概念 | 说明 | 在 Istio 中的作用 |
|---|---|---|
| Listener | 监听端口,接收入站或出站连接 | 拦截 Pod 内所有流量(如 15001 端口) |
| Filter Chain | 处理流量的插件链 | 实现 HTTP 连接管理、TCP 代理、RBAC 等 |
| Cluster | 定义上游服务实例集合 | 对应 Kubernetes Service 的后端 Pod 列表 |
| Endpoint | 具体的上游服务实例(IP:Port) | 由 Pilot 通过 EDS 动态下发 |
| Route | 定义请求匹配与转发规则 | 实现 VirtualService 中的路由规则 |
2.2.1 Envoy 的流量劫持机制
Envoy 通过 iptables 规则透明地劫持 Pod 内的流量。所有出站流量被重定向到 Envoy 的 15001 端口,所有入站流量被重定向到 15006 端口。Envoy 根据控制平面下发的配置,决定将请求转发到哪个上游服务,或执行何种策略。
# 典型的 iptables 规则(简化)
# 将所有出站 TCP 流量重定向到 Envoy 的 15001 端口
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 15001
# 将所有入站 TCP 流量重定向到 Envoy 的 15006 端口
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 15006
2.3 控制平面与数据平面的交互流程
下图展示了 Istio 控制平面组件(Pilot、Citadel)与数据平面(Envoy)之间的核心交互关系。理解这个流程是诊断配置下发延迟、证书错误和路由故障的基础。
2.4 组件故障对镜像供应链安全巡检的影响
在镜像供应链安全容量水位巡检中,Istio 组件的故障会直接影响巡检结果的准确性和网格的稳定性。以下是常见故障场景及其影响:
- Pilot 故障: 新部署的镜像无法被服务发现,导致流量无法路由到新版本 Pod,影响蓝绿发布和金丝雀发布的验证。
- Citadel 故障: 证书无法签发或轮换,导致 mTLS 握手失败,服务间通信中断。在巡检中表现为连接错误或 TLS 错误。
- Envoy 配置过时: 由于 Pilot 推送延迟或 Envoy 内存溢出,导致 Envoy 持有过期的路由规则,将流量错误地转发到已下线的旧镜像 Pod。
- Mixer 性能瓶颈: 在高并发场景下,Mixer 成为性能瓶颈,导致请求延迟飙升,影响容量水位巡检中的延迟指标。
istioctl proxy-status)和 Envoy 的配置同步状态(istioctl proxy-config),确保网格处于健康状态,避免因网格故障导致误报。