2. 容器运行时控制面基础:容器运行时与控制面的关系及 Istio 多集群部署模型

2.1 容器运行时与控制面的协作关系

在 Kubernetes 集群中,容器运行时(Container Runtime)与控制面(Control Plane)是两个核心层次。容器运行时负责实际运行容器,而控制面负责管理整个集群的状态和调度。理解二者的关系是掌握 Istio 多集群部署的前提。

层次 组件 核心职责 与 Istio 的关联
容器运行时 containerd / CRI-O 拉取镜像、创建/管理容器生命周期、执行容器进程隔离 Envoy Sidecar 作为容器运行在运行时之上,接收流量转发指令
控制面 API Server、etcd、Scheduler、Controller Manager 资源管理、状态存储、调度决策、控制器循环 Istio 控制面通过 API Server 监听 Service/Endpoint/Pod 变化,下发配置
关键理解:容器运行时是数据面的执行底座,控制面是策略与状态的决策中心。Istio 的控制面组件(如 Pilot)通过 API Server 获取集群拓扑,再通过 xDS 协议将流量规则下发到运行在容器运行时之上的 Envoy 代理。

2.2 容器运行时(containerd / CRI-O)与控制面的交互流程

容器运行时通过 CRI(Container Runtime Interface)与 kubelet 通信,kubelet 再与控制面交互。整个链路如下:

  1. 用户或控制器向 API Server 提交 Pod 创建请求。
  2. API Server 将 Pod 资源写入 etcd,并通知 Scheduler 进行调度。
  3. Scheduler 选定目标节点,API Server 将绑定结果写入 etcd。
  4. 目标节点的 kubelet 通过 List-Watch 机制获取 Pod 更新,调用 CRI 接口向容器运行时(containerd/CRI-O)下发创建容器指令。
  5. 容器运行时 拉取镜像、创建容器沙箱、启动业务容器。
  6. Istio 控制面 通过 API Server 监听 Pod 就绪事件,为包含 Sidecar 注入标签的 Pod 注入 Envoy 容器,并下发初始流量规则。
实践要点:在多集群环境中,每个集群的容器运行时只管理本集群的容器生命周期,但 Istio 控制面需要跨集群监听多个 API Server 的事件,才能构建全局服务网格拓扑。
容器运行时与控制面交互流程 API Server etcd Scheduler kubelet containerd / CRI-O Envoy Sidecar Istio Pilot Istio Citadel 说明: 1. 控制面组件(蓝)通过 API Server 管理集群状态,etcd 存储持久化数据。 2. kubelet(绿)通过 CRI 接口与容器运行时(红)交互,创建/管理容器。 3. Istio 控制面(橙/青)监听 API Server 事件,通过 xDS 协议向 Envoy(紫)下发流量规则。

2.3 Istio 控制面组件在多集群中的部署模型

Istio 控制面由多个组件组成,在多集群环境中,这些组件的部署方式直接影响流量管理的范围和效率。核心组件包括:

  • Pilot(现为 istiod 的一部分):负责服务发现、流量规则转换和 xDS 协议下发。在多集群中,Pilot 需要聚合所有集群的服务注册信息。
  • Mixer(已弃用,功能并入 Envoy 和 istiod):早期版本负责策略检查和遥测报告。在 1.5+ 版本中,其功能被 Envoy 内置的 Wasm 扩展和 istiod 替代。
  • Citadel(现为 istiod 的一部分):负责证书签发和身份管理。在多集群中,Citadel 需要建立跨集群的信任关系,确保 mTLS 通信。

2.4 多集群部署模型对比

部署模型 控制面数量 服务发现范围 证书管理方式 适用场景
单控制面(共享) 1 个 istiod 管理所有集群 全局统一 单一 CA,所有集群信任同一根证书 小规模、网络低延迟、管理域统一
多控制面(独立) 每个集群部署独立的 istiod 仅本集群,通过 ServiceEntry 或 DNS 跨集群 各自 CA,需配置中间证书或根证书交换 大规模、网络隔离、组织边界清晰
主从控制面(Primary-Remote) 主集群运行完整 istiod,从集群运行轻量代理 主集群聚合所有集群服务 主集群 CA 为从集群签发证书 中心化治理、从集群资源受限
版本注意:Istio 1.5+ 已将 Pilot、Mixer、Citadel 合并为单一的 istiod 组件。但在多集群部署中,istiod 的部署模型(共享/独立/主从)仍然沿用上述三种模式。理解历史组件有助于阅读旧版文档和迁移场景。
Istio 多集群控制面部署模型 模型一:单控制面(共享) istiod(主集群) 集群 A 集群 B 模型二:多控制面(独立) istiod A istiod B 集群 A 集群 B 模型三:主从控制面 istiod(主集群) 主集群 从集群 部署模型关键差异: 1. 单控制面:所有集群共享一个 istiod,服务发现延迟低,但存在单点故障风险。 2. 多控制面:每个集群独立运行 istiod,故障隔离性好,但跨集群服务发现需额外配置。 3. 主从控制面:主集群 istiod 管理全局配置,从集群运行轻量代理,适合中心化治理。 证书管理对比: - 单控制面:单一 CA,所有集群使用同一根证书,信任关系简单。 - 多控制面:每个集群独立 CA,需通过中间证书或根证书交换建立信任。 - 主从控制面:主集群 CA 为从集群签发证书,从集群无需独立 CA。 - 所有模型均支持 mTLS,但证书轮换和信任域配置需根据模型调整。

2.5 多集群环境中的组件适配要点

在多集群部署中,Istio 控制面组件需要针对容器运行时和控制面的分布特性进行适配:

  • Pilot 适配:需要为每个集群配置独立的 Kubeconfig,通过 meshNetworks 配置定义集群网络拓扑,确保 xDS 配置能正确下发到所有集群的 Envoy。
  • Citadel 适配:需要配置统一的 trustDomain,并在多控制面模型中通过 intermediateCA 或 rootCA 交换建立跨集群信任链。
  • 容器运行时适配:确保所有集群的容器运行时版本一致(containerd ≥ 1.6 或 CRI-O ≥ 1.24),避免因 CRI 接口差异导致 Sidecar 注入失败。
最佳实践:在生产环境中,推荐使用主从控制面模型作为起点。主集群部署完整 istiod,从集群通过 istioctl install --set profile=remote 安装轻量代理。这种方式在控制面故障隔离和运维复杂度之间取得了较好的平衡。