2. Istio架构回顾:控制平面与数据平面、Istiod核心组件、Sidecar注入原理、xDS协议简介

2.1 控制平面与数据平面:职责分离

Istio 采用经典的服务网格架构,将网络控制逻辑与数据转发彻底分离。这种设计使得运维人员可以集中管理流量策略、安全规则和可观测性,而无需修改业务代码。

平面 核心职责 关键组件 工作模式
控制平面 策略下发、配置管理、证书签发、服务发现 Istiod(Pilot、Citadel、Galley 的整合) 集中式逻辑决策,通过 xDS 协议下发配置
数据平面 流量拦截、协议解析、负载均衡、健康检查、mTLS 加解密 Envoy Proxy(Sidecar 模式) 分布式执行,每个 Pod 一个 Sidecar 代理
架构要点:控制平面不参与实际业务流量转发,只负责下发动态配置;数据平面完全由 Envoy 代理承载,所有进出 Pod 的流量都会被 Sidecar 拦截并按照控制平面下发的规则处理。
Istio 控制平面与数据平面架构 控制平面(Control Plane) Istiod Pilot (xDS) Citadel (证书) Galley (配置) Kubernetes API 数据平面(Data Plane) Pod A App Envoy Sidecar 拦截所有流量 Pod B App Envoy Sidecar 拦截所有流量 xDS 配置下发 xDS 配置下发 mTLS 加密流量

2.2 Istiod:三合一控制平面核心

在 Istio 1.5 之前,控制平面由 Pilot、Citadel、Galley 三个独立组件组成。Istio 1.5 之后,这三个组件被合并为一个单体进程 Istiod,大幅简化了部署和运维复杂度。

原组件 合并后职责 关键能力
Pilot 服务发现 + 流量管理 对接 Kubernetes API Server,生成 Envoy 路由、监听器、集群配置
Citadel 安全证书管理 自动签发、轮换 mTLS 证书,支持 SPIFFE 身份体系
Galley 配置验证与分发 校验 Istio CRD(VirtualService、DestinationRule 等),转换为内部模型
合并优势:Istiod 将三个组件的配置模型统一管理,减少了组件间 RPC 通信延迟,同时降低了多集群部署时的证书同步复杂度。单进程架构也使得故障排查更加集中。

2.3 Sidecar 注入原理:透明代理的起点

Sidecar 注入是 Istio 将 Envoy 代理自动附加到业务 Pod 的机制。注入方式分为两种:手动注入和自动注入(基于 MutatingWebhook)。

注入流程(自动注入)

  1. Webhook 拦截:用户通过 kubectl apply 创建 Pod 时,Kubernetes API Server 调用 Istio 注册的 MutatingWebhookConfiguration。
  2. 配置读取:Istiod 根据命名空间标签(istio-injection=enabled)判断是否需要注入。
  3. 模板渲染:Istiod 读取 istio-sidecar-injector ConfigMap 中的注入模板,结合 Pod 元数据渲染出 Envoy 容器配置。
  4. 注入返回:Webhook 返回修改后的 Pod 定义,包含两个容器:业务容器 + istio-proxy(Envoy)容器。
  5. Init 容器:同时注入 istio-init 容器,负责设置 iptables 规则,将入站和出站流量重定向到 Envoy。
注意:自动注入依赖 istio-ca-root-cert ConfigMap 和 istio-sidecar-injector ConfigMap 的正确配置。如果注入失败,请检查 Webhook 证书是否过期或命名空间标签是否遗漏。
Sidecar 自动注入流程 1. kubectl apply 创建 Pod 2. API Server 调用 Webhook 3. Istiod 渲染注入模板 4. 返回 修改后 Pod Webhook 返回修改后的 Pod 定义 注入后的 Pod 结构 istio-init(Init 容器:设置 iptables 规则) 业务容器 istio-proxy (Envoy) 共享网络命名空间(Pod 级别)

2.4 xDS 协议简介:控制平面与数据平面的通信语言

xDS 是 Envoy 动态配置发现协议的统称,Istio 控制平面通过 xDS 协议将配置下发给所有 Sidecar 代理。xDS 协议基于 gRPC 流式通信,支持增量更新,避免了全量配置推送带来的性能开销。

协议类型 全称 配置内容 更新频率
LDS Listener Discovery Service 监听器(端口、协议、过滤器链) 低(服务端口变化时)
RDS Route Discovery Service 路由规则(域名匹配、流量拆分、重定向) 中(VirtualService 变更时)
CDS Cluster Discovery Service 集群定义(上游服务端点、负载均衡策略) 中(DestinationRule 变更时)
EDS Endpoint Discovery Service 端点列表(Pod IP、端口、健康状态) 高(Pod 扩缩容时)
SDS Secret Discovery Service TLS 证书、私钥、mTLS 身份 低(证书轮换时)
关键理解:xDS 协议是 Istio 控制平面与数据平面之间的“翻译层”。用户通过 Istio CRD(如 VirtualService)声明意图,Istiod 将其转换为 Envoy 可理解的 xDS 配置,再通过 gRPC 流推送到每个 Sidecar。这种机制保证了配置的实时性和一致性。

xDS 配置下发流程

  1. 配置变更:用户创建/更新 Istio CRD(如 VirtualService、DestinationRule)。
  2. 模型转换:Istiod 的 Galley 模块校验 CRD 合法性,Pilot 模块将其转换为 Envoy 内部配置模型。
  3. 增量计算:Istiod 对比当前配置与已有配置,计算出增量变更(避免全量推送)。
  4. gRPC 推送:通过 xDS 协议的 gRPC 流,将增量配置推送到所有受影响的 Envoy Sidecar。
  5. Envoy 热加载:Envoy 接收配置后,在不重启进程的情况下热更新监听器、路由、集群和端点。
性能优势:增量 xDS 推送机制使得 Istio 能够在大规模集群中快速响应 Pod 扩缩容和策略变更。单个 Envoy 实例每秒可以处理数千次 EDS 端点更新,而不会影响现有连接。