2. Istio 架构回顾:控制面与数据面组件在升级中的角色

在深入准入控制策略之前,必须清晰理解 Istio 控制面与数据面各组件的职责,以及它们在网格升级过程中各自扮演的角色。升级故障往往源于组件间版本不匹配、证书轮换中断或配置推送失败。

2.1 整体架构概览

Istio 采用经典的控制面/数据面分离架构。数据面由 Sidecar 代理(Envoy)组成,负责拦截并处理网格内所有进出流量;控制面则统一管理代理的配置分发、安全策略与遥测采集。

Istio 控制面与数据面架构 Istio 控制面与数据面架构 控制面 (Control Plane) Pilot Mixer (遗留) Citadel Gateway 数据面 (Data Plane) Pod A App Container Envoy Proxy Pod B App Container Envoy Proxy Pod C App Container Envoy Proxy 说明:Mixer 在 1.5+ 版本中已被移除,其功能合并到 Envoy 代理中。升级时需注意组件版本兼容性。

2.2 数据面核心:Envoy 代理

Envoy 是 Istio 数据面的唯一代理组件,以 Sidecar 模式注入到每个 Pod 中。它负责所有进出容器的流量拦截、负载均衡、熔断、重试以及遥测数据采集。

Envoy 能力 升级影响 故障排查要点
动态配置热加载 新版本可能变更 xDS API 版本 检查 Envoy 日志中的 xDS 拒绝消息
TLS 证书轮换 Citadel 升级期间证书签发可能中断 验证 mTLS 握手是否成功
访问日志格式 升级后日志字段可能新增或废弃 对比新旧日志格式差异
统计指标 指标名称或标签可能变化 确认监控面板数据是否正常
升级提示:Envoy 版本必须与 Pilot 版本保持大版本一致。例如 Istio 1.16 使用 Envoy 1.26,升级到 1.17 时 Envoy 会随 Sidecar 注入自动更新。手动升级 Sidecar 时,务必先升级控制面。

2.3 控制面组件详解

2.3.1 Pilot — 配置分发核心

Pilot 负责将用户定义的流量规则(VirtualService、DestinationRule)转换为 Envoy 可理解的 xDS 配置,并通过 gRPC 流推送到所有 Sidecar 代理。它是升级过程中最关键的组件。

  • 升级角色:新版本 Pilot 必须向后兼容旧版 Envoy 的 xDS 协议版本。
  • 常见故障:升级后 Envoy 无法连接 Pilot,或收到格式错误的配置更新。
  • 排查命令:istioctl proxy-status 查看代理同步状态。

2.3.2 Mixer — 已废弃但需注意迁移

Mixer 在 Istio 1.5 之前负责策略检查和遥测报告。1.5+ 版本中 Mixer 已被移除,其功能合并到 Envoy 代理中。如果从旧版本(1.4 及以下)升级,必须先将 Mixer 策略迁移到 Envoy 原生扩展。

迁移警告:如果当前网格仍在使用 Mixer 适配器(如自定义日志、配额检查),升级到 1.5+ 前必须完成适配器迁移。否则升级后策略将失效,流量可能被拒绝。

2.3.3 Citadel — 证书与身份管理

Citadel 负责管理网格内的 TLS 证书签发与轮换。它通过 Kubernetes CSR API 为每个工作负载生成 SPIFFE 身份证书,并定期轮换。

Citadel 功能 升级风险 验证方法
证书签发 升级期间新 Pod 可能无法获取证书 检查 Pod 内 /etc/certs/ 目录证书有效期
证书轮换 轮换周期可能因升级中断 查看 Citadel 日志中的签发错误
根证书更新 根证书变更会导致所有 mTLS 连接中断 确认新旧根证书是否同时受信

2.4 升级中各组件的依赖关系

升级顺序至关重要。错误的升级顺序会导致控制面与数据面版本不匹配,引发配置推送失败或流量中断。

Istio 升级组件依赖关系 Istio 升级组件依赖关系 Pilot (控制面) Envoy (数据面) Citadel (安全) Gateway (入口/出口) 升级顺序:Pilot → Citadel → Gateway → Envoy (Sidecar)

2.5 升级故障快速定位表

故障现象 可能原因 涉及组件 快速排查命令
Envoy 无法启动 Pilot 版本不兼容 Pilot, Envoy istioctl proxy-status
mTLS 握手失败 Citadel 证书签发中断 Citadel, Envoy istioctl authn tls-check
流量策略不生效 Pilot 配置推送延迟 Pilot istioctl experimental describe pod
Gateway 拒绝连接 Gateway 版本与 Pilot 不匹配 Gateway, Pilot kubectl logs -n istio-system deployment/istio-ingressgateway
核心原则:升级过程中,控制面组件(Pilot、Citadel)必须优先升级,数据面组件(Envoy、Gateway)随后升级。任何组件版本不一致都可能导致网格功能降级或中断。