2. Istio 架构回顾:控制面与数据面组件

在深入容量水位与 OPA 策略协同巡检之前,必须重新梳理 Istio 的经典架构。Istio 1.5+ 版本将多个控制面组件整合为单一的 istiod,但理解其原始组件职责(Pilot、Mixer、Citadel)对于诊断容量瓶颈和策略执行路径仍然至关重要。

2.1 整体架构分层

Istio 服务网格分为两个平面:

  • 数据面(Data Plane):由与每个业务容器同部署的 Envoy 代理组成,负责拦截、转发、观测所有进出流量。
  • 控制面(Control Plane):负责统一管理代理配置、颁发证书、下发策略。早期版本包含 Pilot、Mixer、Citadel 三个独立组件;1.5+ 合并为 istiod,但内部仍保留对应逻辑模块。
巡检视角: 控制面组件的 CPU/内存水位直接影响数据面配置下发延迟。Envoy 代理的资源水位则影响业务请求的 P99 延迟。容量巡检必须覆盖这两个平面。
Istio 架构:控制面与数据面 控制面(Control Plane) Pilot Mixer Citadel istiod (1.5+ 合并) 数据面(Data Plane) Envoy Proxy (Sidecar) Envoy Proxy (Sidecar) Envoy Proxy (Sidecar) 说明:控制面组件通过 xDS 协议向 Envoy 下发配置;Citadel 通过 SDS 分发 TLS 证书。

2.2 核心组件详解

组件 角色 关键职责 容量巡检关注点
Envoy 代理 数据面 Sidecar 流量拦截、L4/L7 转发、健康检查、指标采集 连接数、内存占用、CPU 使用率、xDS 推送延迟
Pilot 控制面配置中心 服务发现、流量管理规则转换、xDS 下发 Endpoint 数量、配置变更频率、推送队列积压
Mixer 控制面策略/遥测 访问控制策略评估、遥测数据聚合(1.5+ 已废弃) 策略缓存命中率、请求处理延迟(存量集群)
Citadel 控制面证书管理 SPIFFE 证书签发、轮换、CA 管理 证书签发 QPS、过期证书数量、SDS 连接数
版本差异提示: Mixer 在 Istio 1.5+ 中已被移除,其策略评估能力被移入 Envoy 代理(通过 Wasm 或 CEL 过滤器)。但存量 1.4 及以下版本集群仍需巡检 Mixer 容量。本课程后续巡检脚本将同时兼容两种架构。

2.3 Envoy 代理:数据面的核心

Envoy 是 Istio 数据面的唯一代理。每个 Pod 中作为 Sidecar 容器运行,通过 iptables 规则透明拦截所有入站和出站流量。

  • 监听器(Listener):绑定虚拟 IP 和端口,接收入站请求。
  • 路由(Router):根据 VirtualService/DestinationRule 规则匹配并转发流量。
  • 集群(Cluster):定义上游服务端点列表及负载均衡策略。
  • 指标与日志:生成 TCP/HTTP 指标,支持访问日志和分布式追踪。
# Envoy 关键指标示例(通过 /stats/prometheus 暴露)
envoy_server_memory_allocated_bytes
envoy_cluster_upstream_rq_total
envoy_listener_downstream_cx_active
envoy_cluster_membership_healthy

2.4 Pilot:配置下发的枢纽

Pilot 负责将 Istio 的 CRD(VirtualService、DestinationRule、Gateway 等)转换为 Envoy 可理解的 xDS 配置(LDS、RDS、CDS、EDS)。

  • 服务发现:对接 Kubernetes API Server,监听 Service/Endpoint 变化。
  • 配置转换:将流量规则翻译为 Envoy 路由和集群配置。
  • xDS 推送:通过 gRPC 流式推送至所有 Envoy 代理。
容量巡检关键指标: Pilot 的 pilot_xds_push_time 和 pilot_xds_pushes 直接反映配置下发延迟和推送频率。当集群规模超过 500 个服务时,Pilot 的 CPU 和内存消耗会显著上升。

2.5 Mixer:策略与遥测(历史组件)

Mixer 在早期 Istio 版本中承担策略检查和遥测报告两大职责。它通过适配器模型对接后端系统(如 Prometheus、opa、Redis)。

  • Check:每次请求前调用,验证是否满足访问控制策略。
  • Report:请求结束后上报指标和日志。

由于 Mixer 引入的额外延迟(通常 2-10ms),社区在 1.5+ 版本中将其功能内联到 Envoy 中,称为 in-proxy 策略执行。

2.6 Citadel:安全基石

Citadel 负责 Istio 的证书管理体系,基于 SPIFFE 标准为每个工作负载签发身份证书。

  • CA 管理:生成自签名根证书或对接外部 CA。
  • 证书签发:通过 SDS(Secret Discovery Service)为 Envoy 下发 TLS 证书。
  • 证书轮换:默认每 24 小时轮换一次,可通过环境变量调整。
# 检查 Citadel 证书签发状态
kubectl logs -n istio-system deployment/istio-citadel | grep "issued certificate"
# 查看证书过期时间
openssl s_client -connect <service>:443 -servername <service> 2>/dev/null | openssl x509 -noout -enddate
组件交互流程:配置下发与证书分发 Pilot Citadel Envoy Proxy Mixer(旧版) K8s API Server xDS 配置 SDS 证书 服务/端点变更 策略检查(旧版) 遥测报告 说明:实线表示主数据流(配置下发、证书分发),虚线表示辅助数据流(服务发现、策略检查)。 在 Istio 1.5+ 中,Mixer 路径被移除,策略检查直接在 Envoy 内完成。

2.7 组件协同与容量水位关系

理解组件间的依赖关系是设定容量水位阈值的前提:

  • Pilot 压力:当集群服务数 > 1000 或配置变更频繁时,Pilot 的 CPU 和内存成为瓶颈,导致 xDS 推送延迟升高,Envoy 配置滞后。
  • Citadel 压力:大规模集群滚动更新时,大量 Envoy 同时请求证书轮换,可能导致 Citadel 的 gRPC 连接数飙升。
  • Envoy 压力:每个 Envoy 实例维护的连接数、监听器数量、集群数量直接影响其内存占用。典型场景下,每个 Envoy 内存占用约 50-200MB。
巡检基线参考:
  • Pilot:CPU < 80%,内存 < 2GB,xDS 推送延迟 < 500ms
  • Citadel:证书签发 QPS < 100,gRPC 连接数 < 5000
  • Envoy:内存 < 256MB,活跃连接数 < 1000