3. 多集群拓扑模型:Hub-Spoke、联邦、网格三种拓扑对比、适用场景与快照策略差异
在多集群 Kubernetes 架构中,拓扑模型决定了控制面关系、数据流转路径以及租户边界的划分方式。当前主流的多集群拓扑分为 Hub-Spoke(中心辐射型)、联邦(Federation) 和 网格(Mesh) 三种。不同的拓扑直接影响 kubeconfig 快照的采集范围、刷新频率和回退粒度。
3.1 三种拓扑模型核心对比
| 维度 | Hub-Spoke | 联邦(Federation) | 网格(Mesh) |
|---|---|---|---|
| 控制面关系 | 中心 Hub 统一管控,Spoke 仅运行工作负载 | 联邦控制面(KubeFed)跨集群同步资源 | 对等关系,每个集群拥有独立控制面 |
| 数据面流向 | Spoke → Hub 上报状态,Hub → Spoke 下发配置 | 联邦 API 向所有成员集群推送 | 集群间直接通信,通常通过服务网格(Istio/Linkerd) |
| 租户边界 | 以 Spoke 集群为租户隔离单元 | 跨集群命名空间或标签选择器 | 以网格内的服务身份和 mTLS 证书为边界 |
| kubeconfig 数量 | 1 个 Hub 管理 kubeconfig + N 个 Spoke 访问 kubeconfig | 1 个联邦控制面 kubeconfig + 每个成员集群独立 kubeconfig | 每个集群独立 kubeconfig,网格控制面额外提供统一入口 |
| 快照采集策略 | Hub 侧聚合快照,Spoke 侧按需快照 | 联邦资源模板快照 + 成员集群差异快照 | 每个集群独立快照,网格控制面记录全局拓扑快照 |
| 典型工具 | Rancher、OpenShift ACM、Karmada | KubeFed、OCM Placement | Istio、Consul Connect、Cilium ClusterMesh |
关键结论: Hub-Spoke 适合集中管控+边缘隔离场景;联邦适合跨集群资源统一编排;网格适合服务间零信任通信。快照策略必须与拓扑的控制面耦合度对齐。
3.2 Hub-Spoke 拓扑与快照策略
Hub-Spoke 是最常见的多集群拓扑,典型代表是 Rancher 和 Karmada。Hub 集群持有所有 Spoke 集群的 kubeconfig,并负责统一认证、策略下发和状态聚合。
快照策略建议: Hub 侧每 5 分钟执行一次全量快照,记录所有 Spoke 的 kubeconfig 和集群状态;Spoke 侧仅在发生租户边界变更(如 namespace 创建/删除、RBAC 更新)时触发增量快照。回退时优先使用 Hub 侧聚合快照恢复全局拓扑。
3.3 联邦拓扑与快照策略
联邦拓扑通过 KubeFed 或 OCM 实现跨集群资源同步。联邦控制面维护一份资源模板(Template),并将其分发到选定的成员集群。快照需要同时捕获模板层和每个成员集群的实际状态。
快照回退风险: 联邦拓扑中,模板快照回退可能导致成员集群资源被强制覆盖。建议在回退前执行
kubefedctl diff 或 ocm clusteradm get work 预览差异,避免意外删除成员集群上的本地定制资源。
3.4 网格拓扑与快照策略
网格拓扑(Service Mesh)强调服务间通信的零信任和可观测性。每个集群拥有独立控制面,网格控制面(如 Istio 的 istiod)通过 服务发现 和 mTLS 证书 建立跨集群信任。快照需要记录每个集群的 kubeconfig、网格配置(ConfigMap/CRD)以及证书颁发状态。
快照策略建议: 网格拓扑中,每个集群的 kubeconfig 快照应独立存储,同时网格控制面每 10 分钟生成一次全局拓扑快照(包含所有集群的服务端点、mTLS 证书序列号和路由规则)。回退时先恢复全局拓扑快照,再按集群粒度回退 kubeconfig。
3.5 快照策略差异总结
| 拓扑类型 | 快照粒度 | 快照频率 | 回退范围 | 关键风险 |
|---|---|---|---|---|
| Hub-Spoke | Hub 聚合 + Spoke 按需 | Hub 5min / Spoke 事件触发 | 全局回退或单 Spoke 回退 | Hub 单点故障导致所有 Spoke 不可控 |
| 联邦 | 模板快照 + 成员差异快照 | 模板 10min / 成员 15min | 模板回退或成员选择性回退 | 模板回退覆盖成员本地定制 |
| 网格 | 独立集群快照 + 全局拓扑快照 | 独立 5min / 全局 10min | 全局拓扑回退或单集群回退 | 证书过期导致跨集群通信中断 |
实践要点:
- Hub-Spoke 拓扑中,务必在 Hub 侧保留最近 3 次全量快照,防止快照损坏导致回退失败。
- 联邦拓扑中,模板快照应包含
kubefedctl federate生成的 YAML 清单,成员差异快照使用kubectl get --cluster按集群导出。 - 网格拓扑中,证书快照建议使用
istioctl pc secret导出,并与 kubeconfig 快照分开存储。