2. Istio基础架构:控制平面与数据平面、Envoy代理原理、Pilot/Mixer/Citadel组件功能、Istio部署模式

2.1 控制平面与数据平面:服务网格的两层架构

Istio 采用经典的控制平面/数据平面分离架构,这是实现流量管理、安全策略与可观测性的基础。数据平面负责处理业务流量,控制平面负责下发配置与策略。

维度 数据平面 (Data Plane) 控制平面 (Control Plane)
组成 Envoy 代理(Sidecar 或 Gateway) Pilot、Mixer(已弃用,功能并入 Envoy)、Citadel(现为 istiod)
职责 拦截并处理所有进出 Pod 的流量,执行路由、负载均衡、认证、鉴权、遥测 统一管理配置下发、服务发现、证书签发、策略分发
通信方式 通过 xDS 协议从控制平面拉取动态配置 通过 Kubernetes API Watch 机制监听资源变化,生成 Envoy 配置
故障影响 数据平面中断直接影响业务流量 控制平面短暂中断不影响已有连接,但新服务注册、策略变更会延迟
架构要点:控制平面不参与业务数据路径,只负责下发配置。即使控制平面短暂不可用,已建立的连接和已下发的路由规则仍能正常工作,这是服务网格高可用设计的关键。
Istio 控制平面与数据平面架构 控制平面 (Control Plane) istiod Pilot + Citadel + Galley 配置下发 · 证书签发 · 策略管理 Kubernetes API Service / Pod / Endpoint Watch 监听资源变化 数据平面 (Data Plane) Service A 业务容器 Envoy Sidecar iptables 规则拦截流量 → Envoy mTLS 加密 · 路由 · 遥测 Service B 业务容器 Envoy Sidecar mTLS 解密 · 鉴权 · 转发 遥测数据上报 mTLS 加密流量 xDS 配置 xDS 配置

2.2 Envoy代理原理:高性能数据平面核心

Envoy 是 Istio 数据平面的核心组件,以 Sidecar 模式注入到每个 Pod 中。它基于 C++ 开发,具备极高的吞吐能力和低延迟特性。

2.2.1 Envoy 核心工作机制

  • L4/L7 代理:支持 TCP、HTTP/1.1、HTTP/2、gRPC 协议,可做透明代理或显式代理。
  • 动态配置(xDS):通过 LDS(监听器发现)、RDS(路由发现)、CDS(集群发现)、EDS(端点发现)等 API 从控制平面拉取配置。
  • 过滤器链(Filter Chain):每个监听器可串联多个过滤器,实现流量劫持、RBAC、限流、故障注入等功能。
  • mTLS 终结:自动处理双向 TLS 握手、证书轮换,业务容器无需感知加密过程。
性能指标参考:Envoy 单核可处理 10 万+ HTTP 请求/秒(QPS),延迟增加通常在 1-3ms 以内,远低于业务代码自行实现安全通信的代价。

2.2.2 Envoy 流量劫持流程

  1. iptables 规则注入:Init 容器在 Pod 启动时设置 iptables 规则,将入站和出站流量重定向到 Envoy 的端口(默认 15001)。
  2. 入站拦截:发往 Pod IP 的请求被重定向到 Envoy 入站监听器,Envoy 根据过滤器链执行鉴权、路由后转发给业务容器。
  3. 出站拦截:业务容器发出的请求被重定向到 Envoy 出站监听器,Envoy 执行服务发现、负载均衡、mTLS 加密后发送到目标。
  4. 遥测数据上报:Envoy 在请求处理过程中生成访问日志、指标和链路追踪数据,通过 Mixer 或直接上报到后端。
Envoy Sidecar 流量劫持流程 外部请求 Pod 边界 iptables 入站规则 Envoy 入站监听器 业务容器 Envoy 出站监听器 iptables 出站规则 目标服务

2.3 Pilot / Mixer / Citadel 组件功能(istiod 统一时代)

在 Istio 1.5 之前,控制平面由 Pilot、Mixer、Citadel、Galley 四个独立组件构成。1.5 版本之后,这些组件合并为单一的 istiod 进程,但核心功能逻辑保持不变。

组件 合并前职责 合并后(istiod)对应功能 关键协议/接口
Pilot 服务发现、流量管理配置下发 istiod 中的 Pilot 模块:监听 K8s Service/Endpoint,生成 Envoy 路由和集群配置 xDS (LDS/RDS/CDS/EDS)
Mixer 遥测收集、访问控制、配额管理 功能已内嵌到 Envoy 的 Wasm 扩展和 Telemetry API 中,不再需要独立组件 Check/Report (已废弃)
Citadel 证书签发、密钥管理、mTLS 身份认证 istiod 中的 CA 模块:自动签发 SPIFFE 证书,支持证书轮换和 CSR API SPIFFE / Kubernetes CSR
Galley 配置验证、分发、格式转换 istiod 中的配置验证 Webhook 和 Mesh Config 管理 K8s Admission Webhook
迁移注意:如果从 Istio 1.4 及更早版本升级,需要将 Mixer 策略迁移到 Envoy 原生扩展或 Wasm 插件。Mixer 的 Check API 在 1.8 版本中完全移除,不再支持。

2.3.1 Pilot 核心能力

  • 服务注册表抽象:将 Kubernetes Service、Consul、Eureka 等不同注册中心统一为抽象服务模型。
  • 配置转换:将 VirtualService、DestinationRule 等 CRD 转换为 Envoy 可识别的 xDS 配置。
  • 端点发现:实时跟踪 Pod 的 Ready 状态,剔除不健康的端点,支持金丝雀发布和灰度路由。

2.3.2 Citadel 安全能力

  • SPIFFE 身份:为每个工作负载签发符合 SPIFFE 标准的 X.509 证书,格式为 spiffe://cluster.local/ns/<namespace>/sa/<service-account>。
  • 自动证书轮换:证书默认有效期 24 小时,Envoy 通过 SDS(Secret Discovery Service)自动拉取新证书,无需重启。
  • mTLS 策略:支持 PERMISSIVE(兼容模式)和 STRICT(强制 mTLS)两种模式,逐步迁移。

2.4 Istio部署模式:生产环境选型指南

Istio 支持多种部署模式,不同模式适用于不同的集群规模和运维要求。

部署模式 适用场景 控制平面数量 跨集群通信 运维复杂度
单集群单控制平面 开发/测试环境、中小规模生产 1 不支持 低
多集群主-远程 多可用区容灾、跨地域部署 1 主 + N 远程 通过东西向网关 中
多集群多主 高可用、独立运维单元 每个集群 1 个 通过东西向网关 高
外部控制平面 数据平面与控制平面分离管理 1(外部集群) 需网络互通 高

2.4.1 单集群部署(最常用)

在单个 Kubernetes 集群中部署一个 istiod 实例,管理该集群内所有 Envoy Sidecar。适用于大多数中小规模生产环境。

# 使用 istioctl 安装默认配置
istioctl install --set profile=default -y

# 验证控制平面 Pod
kubectl get pods -n istio-system
# 输出示例:
# istiod-5f8d6c9b7c-abcde   1/1   Running   0   2m

2.4.2 多集群主-远程模式

一个主集群运行控制平面,远程集群只运行数据平面。远程集群的 Envoy 通过东西向网关连接到主集群的 istiod 获取配置。

生产建议:主-远程模式适合跨地域部署,主集群部署在中心机房,远程集群部署在边缘节点。需要确保主集群与远程集群之间的网络延迟低于 50ms,否则配置下发可能超时。

2.4.3 多集群多主模式

每个集群都部署独立的 istiod,通过东西向网关暴露服务。服务发现通过 ServiceEntry 和 WorkloadEntry 实现跨集群路由。

# 在每个集群中安装 istiod,并配置东西向网关
istioctl install --set profile=default \
  --set values.global.meshID=mesh1 \
  --set values.global.multiCluster.clusterName=cluster-a

# 暴露服务到其他集群
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: cross-cluster-service
spec:
  hosts:
  - service-b.ns-b.svc.cluster.local
  location: MESH_INTERNAL
  ports:
  - number: 8080
    name: http
    protocol: HTTP
  resolution: DNS
  endpoints:
  - address: 10.0.1.5  # 远程集群 Pod IP
    labels:
      cluster: cluster-b
EOF

2.4.4 部署模式选择决策树

  1. 单集群且规模 < 500 节点 → 单集群默认部署,profile=default。
  2. 多可用区容灾,网络延迟 < 10ms → 多集群多主模式,每个可用区独立控制平面。
  3. 跨地域部署,网络延迟 10-50ms → 主-远程模式,中心化控制平面。
  4. 安全合规要求控制平面与数据平面隔离 → 外部控制平面模式,控制平面部署在独立集群。
多租户签名链路场景适配:在多租户环境中,推荐使用多集群多主模式,每个租户集群拥有独立的控制平面,实现租户间控制平面隔离。数据平面通过东西向网关进行跨集群签名链路通信,确保签名密钥和证书不跨租户边界。