2. Istio 架构基础:控制平面与数据平面组件详解

在深入镜像供应链安全巡检与故障排查之前,必须牢固掌握 Istio 的核心架构。Istio 服务网格在逻辑上分为数据平面和控制平面。理解这两个平面的组件职责、通信方式及故障模式,是定位网格内流量中断、证书失效、配置下发失败等问题的前提。

架构要点: 数据平面由 Sidecar 代理(Envoy)组成,负责拦截并处理所有进出服务的流量;控制平面负责统一管理和配置数据平面,是网格的“大脑”。

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、自定义日志系统)集成。
故障排查提示: 如果启用了 Mixer 策略检查,Envoy 会在每次请求前同步等待 Mixer 的 Check 响应。Mixer 组件故障或响应超时,将直接导致请求被拒绝或产生显著的延迟增加。

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)之间的核心交互关系。理解这个流程是诊断配置下发延迟、证书错误和路由故障的基础。

Istio 控制平面与数据平面交互架构图 Istio 控制平面与数据平面交互流程 控制平面 (Control Plane) Pilot xDS 配置下发 Citadel 证书签发与分发 Mixer 策略检查 / 遥测 数据平面 (Data Plane) Pod A (Service A) 业务容器 Envoy Sidecar Pod B (Service B) 业务容器 Envoy Sidecar xDS (LDS, RDS, CDS, EDS) SDS (证书与密钥) Check / Report 业务流量 (mTLS) 说明:Envoy 通过 xDS 获取路由和集群配置,通过 SDS 获取证书,并在请求时向 Mixer 进行策略检查。

2.4 组件故障对镜像供应链安全巡检的影响

在镜像供应链安全容量水位巡检中,Istio 组件的故障会直接影响巡检结果的准确性和网格的稳定性。以下是常见故障场景及其影响:

  • Pilot 故障: 新部署的镜像无法被服务发现,导致流量无法路由到新版本 Pod,影响蓝绿发布和金丝雀发布的验证。
  • Citadel 故障: 证书无法签发或轮换,导致 mTLS 握手失败,服务间通信中断。在巡检中表现为连接错误或 TLS 错误。
  • Envoy 配置过时: 由于 Pilot 推送延迟或 Envoy 内存溢出,导致 Envoy 持有过期的路由规则,将流量错误地转发到已下线的旧镜像 Pod。
  • Mixer 性能瓶颈: 在高并发场景下,Mixer 成为性能瓶颈,导致请求延迟飙升,影响容量水位巡检中的延迟指标。
巡检最佳实践: 在进行镜像供应链安全巡检前,应首先检查控制平面组件的健康状态(istioctl proxy-status)和 Envoy 的配置同步状态(istioctl proxy-config),确保网格处于健康状态,避免因网格故障导致误报。