2. Kubernetes 多集群架构基础
在云原生生产环境中,单一集群往往无法满足地理分布、故障隔离、资源弹性及合规要求。多集群架构通过将工作负载分散到多个 Kubernetes 集群,实现更高的可用性与资源利用率。本章聚焦三种核心多集群技术:联邦集群(KubeFed)、Cluster API 以及多集群网络模型(Submariner / Cilium Cluster Mesh),为后续跨集群调度与 Helm Chart 集成审计奠定架构基础。
2.1 联邦集群(KubeFed)原理
KubeFed(Kubernetes Federation)是 CNCF 孵化的开源项目,旨在通过一个控制平面统一管理多个 Kubernetes 集群。其核心思想是“将多个集群视为一个逻辑集群”,实现跨集群的资源分发、服务发现与策略同步。
2.1.1 核心组件与工作流
- Federation Control Plane:运行在宿主集群中,负责接收用户提交的联邦资源(如 FederatedDeployment)。
- Cluster Registry:维护成员集群的元数据(API Server 地址、凭证、区域标签)。
- Sync Controller:将联邦资源模板与差异化覆盖(Overrides)推送到目标成员集群。
- DNS Controller:跨集群同步 Service 的 DNS 记录,实现全局服务发现。
2.2 Cluster API 概述
Cluster API(CAPI)是 Kubernetes SIG Cluster Lifecycle 主导的项目,旨在通过声明式 API 管理 Kubernetes 集群的完整生命周期(创建、扩缩容、升级、销毁)。与 KubeFed 关注“集群之上”的资源分发不同,Cluster API 关注“集群本身”的自动化管理。
2.2.1 核心资源对象
| 资源对象 | 职责 | 示例 |
|---|---|---|
| Cluster | 定义集群的拓扑、网络、基础设施提供商 | Cluster.spec.infrastructureRef → AWSCluster |
| Machine | 描述一个计算节点(虚拟机或裸金属) | Machine.spec.bootstrap.dataSecretName |
| MachineDeployment | 管理一组 Machine 的滚动更新与扩缩容 | 类似 Deployment 管理 Pod |
| MachineSet | 确保指定数量的 Machine 处于运行状态 | 由 MachineDeployment 控制 |
| Infrastructure Provider | 对接云厂商(AWS、Azure、GCP)或裸金属 | AWSCluster, AzureCluster |
2.2.2 工作流示例
# 1. 创建基础设施集群定义
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSCluster
metadata:
name: prod-cluster
spec:
region: us-east-1
sshKeyName: capi-key
---
# 2. 创建 Cluster 对象,引用基础设施
apiVersion: cluster.x-k8s.io/v1beta2
kind: Cluster
metadata:
name: prod-cluster
spec:
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSCluster
name: prod-cluster
---
# 3. 创建 MachineDeployment 定义工作节点
apiVersion: cluster.x-k8s.io/v1beta2
kind: MachineDeployment
metadata:
name: prod-worker-md
spec:
clusterName: prod-cluster
replicas: 3
template:
spec:
version: v1.28.0
bootstrap:
dataSecretName: prod-cluster-bootstrap
2.3 多集群网络模型
多集群网络解决的核心问题是:Pod 与 Service 如何跨集群通信。本节介绍两种主流方案:Submariner 与 Cilium Cluster Mesh。
2.3.1 Submariner
Submariner 由 Red Hat 开源,采用 Gateway Engine + IPsec/WireGuard 隧道 实现跨集群 Pod/Service 网络连通。其架构包含以下组件:
- Gateway Engine:在每个集群中部署,负责建立加密隧道并转发跨集群流量。
- Service Discovery:基于 Lighthouse 组件,通过 CoreDNS 实现跨集群 Service 解析。
- Globalnet:解决集群间 Pod CIDR 重叠问题,通过全局 IP 映射实现互通。
2.3.2 Cilium Cluster Mesh
Cilium Cluster Mesh 基于 eBPF 技术,通过 直接路由或 VXLAN 隧道 实现跨集群通信,并利用 etcd 或 KV 存储 同步全局身份标识与网络策略。其核心优势在于:
- 原生性能:eBPF 数据路径避免 iptables 遍历,延迟接近本地集群通信。
- 统一网络策略:跨集群的 NetworkPolicy 与 Clusterwide NetworkPolicy 可一致执行。
- 服务网格集成:与 Istio 等 Service Mesh 配合,实现 mTLS 跨集群加密。
2.4 多集群架构选型参考
| 维度 | KubeFed | Cluster API | Submariner | Cilium Cluster Mesh |
|---|---|---|---|---|
| 核心目标 | 跨集群资源分发与策略同步 | 集群生命周期自动化 | 跨集群网络连通 | 高性能跨集群网络与安全 |
| 控制平面 | 宿主集群(推模式) | 管理集群(声明式) | 无中心控制平面 | 无中心控制平面(KV Store) |
| 网络依赖 | API Server 可达即可 | API Server 可达即可 | 需要隧道网关互通 | 需要节点间网络互通 |
| 安全审计重点 | 联邦资源覆盖策略、RBAC 传播 | 工作集群 kubeconfig 凭证管理 | 隧道加密密钥、Globalnet 映射 | KV Store 访问控制、eBPF 程序完整性 |