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 再与控制面交互。整个链路如下:
- 用户或控制器向 API Server 提交 Pod 创建请求。
- API Server 将 Pod 资源写入 etcd,并通知 Scheduler 进行调度。
- Scheduler 选定目标节点,API Server 将绑定结果写入 etcd。
- 目标节点的 kubelet 通过 List-Watch 机制获取 Pod 更新,调用 CRI 接口向容器运行时(containerd/CRI-O)下发创建容器指令。
- 容器运行时 拉取镜像、创建容器沙箱、启动业务容器。
- Istio 控制面 通过 API Server 监听 Pod 就绪事件,为包含 Sidecar 注入标签的 Pod 注入 Envoy 容器,并下发初始流量规则。
实践要点:在多集群环境中,每个集群的容器运行时只管理本集群的容器生命周期,但 Istio 控制面需要跨集群监听多个 API Server 的事件,才能构建全局服务网格拓扑。
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 的部署模型(共享/独立/主从)仍然沿用上述三种模式。理解历史组件有助于阅读旧版文档和迁移场景。
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 安装轻量代理。这种方式在控制面故障隔离和运维复杂度之间取得了较好的平衡。