2. 多集群架构基础:Hub-Spoke架构、联邦集群、集群注册与发现机制

在多集群管理体系中,架构设计决定了控制面的耦合程度、数据面的流量路径以及运维的扩展边界。本章聚焦三种核心架构模式:Hub-Spoke(中心辐射)、联邦集群(Federation)以及支撑集群动态接入的注册与发现机制。理解这些架构是后续版本漂移检测与API废弃清单验收的前提。

2.1 Hub-Spoke 架构

Hub-Spoke 是目前生产环境中最广泛采用的多集群控制模型。一个中心集群(Hub)作为控制平面,负责策略下发、资源分发和状态聚合;多个工作集群(Spoke)仅运行用户负载,不直接暴露控制面 API 给外部。

核心特征:
  • 控制面集中: Hub 集群承载所有多集群调度、策略引擎和审计日志。
  • 数据面隔离: Spoke 集群之间网络不互通,仅通过 Hub 进行间接通信。
  • 单向管控: Hub 向 Spoke 推送配置,Spoke 向 Hub 上报状态,反向流量受限。
Hub-Spoke 多集群架构 Hub 控制集群 策略下发 · 状态聚合 · 审计 Spoke 集群 A Spoke 集群 B Spoke 集群 C 说明:实线为配置下发(Push),虚线为状态上报(Pull/Webhook)。 Spoke 集群之间无直接网络连接,所有跨集群操作必须经过 Hub。
生产建议: Hub 集群应部署在具备跨区域高可用能力的云区域或 IDC 核心节点。建议为 Hub 单独配备 etcd 集群,避免与 Spoke 工作负载争抢 I/O 资源。Hub 故障不应影响 Spoke 上已有应用的运行,但新策略下发会中断。

2.2 联邦集群(Federation)

联邦集群通过一个逻辑控制面将多个物理集群抽象为单一资源池。Kubernetes 社区主推的 KubeFed(Kubernetes Federation v2)是典型实现。联邦层负责将资源模板(Template)与放置策略(Placement Policy)同步到成员集群。

维度 Hub-Spoke 联邦集群(Federation)
控制面位置 单一 Hub 集群 逻辑联邦控制面(可跨集群部署)
资源同步 Hub 主动推送 联邦控制器双向同步
策略粒度 集群级策略 支持命名空间级、标签选择器级
故障隔离 Spoke 故障不影响 Hub 联邦控制面故障影响所有成员
典型场景 边缘计算、多区域部署 多云统一调度、跨集群服务发现
版本漂移风险: 联邦集群在同步资源时,如果成员集群的 Kubernetes API 版本不一致,联邦控制器可能下发目标集群不支持的 API 资源(如 apps/v1beta1 在 v1.22+ 中已废弃)。这是交付前 API 废弃清单验收必须覆盖的检查点。
联邦集群逻辑架构 联邦控制面(KubeFed) Federation API · 调度策略 · 同步控制器 成员集群 1 v1.24 成员集群 2 v1.26 成员集群 3 v1.28 注意:联邦控制面会向所有成员集群同步相同的资源模板。 若成员集群版本差异过大,可能导致同步失败或资源无法解析。

2.3 集群注册与发现机制

无论采用 Hub-Spoke 还是联邦架构,集群的动态注册与服务发现都是多集群管理的基础设施能力。注册机制决定了新集群如何加入管控范围;发现机制决定了控制面如何获取集群的实时端点与健康状态。

2.3.1 注册流程

  1. Agent 部署: 在目标集群中安装注册 Agent(如 cluster-register 或 klusterlet),Agent 生成集群唯一标识(Cluster ID)。
  2. 证书交换: Agent 向 Hub/联邦控制面发起 mTLS 握手,交换客户端证书,建立双向信任。
  3. 元数据上报: 集群名称、Kubernetes 版本、节点数量、可用区标签、API 资源列表等元数据写入控制面的集群注册表(Cluster Registry)。
  4. 心跳保活: Agent 定期发送心跳(默认 30s),控制面标记失联集群为 Unknown 状态。
关键元数据字段示例:
apiVersion: clusterregistry.k8s.io/v1alpha1
kind: Cluster
metadata:
  name: spoke-cluster-b
spec:
  kubernetesVersion: "v1.26.3"
  capacity:
    nodes: "12"
    totalCPU: "48"
    totalMemory: "256Gi"
  authInfo:
    controller: "hub-controller"
    certificateExpiry: "2026-06-30T00:00:00Z"

2.3.2 发现机制对比

机制 实现方式 延迟 适用架构
Push 模式 Agent 主动上报端点变更 < 1s Hub-Spoke
Pull 模式 控制面定期轮询 Agent 健康接口 10s ~ 60s 联邦集群
DNS 发现 基于 CoreDNS 的 SRV 记录查询 取决于 TTL 跨集群服务网格
API 聚合层 扩展 API Server 代理到成员集群 实时 Hub-Spoke(高级)
验收关注点: 在交付前,必须验证集群注册表中的 kubernetesVersion 字段是否与实际集群版本一致。版本漂移往往源于注册时写入的版本信息未随集群升级而更新,导致后续 API 废弃检测基于错误版本进行。

2.4 架构选择与版本漂移的关系

三种架构对版本漂移的容忍度和检测路径不同:

  • Hub-Spoke: Hub 集中维护所有 Spoke 的版本清单,适合做全局 API 废弃扫描。但 Spoke 版本差异过大时,Hub 下发的资源可能被 Spoke 拒绝。
  • 联邦集群: 联邦控制面同步资源时不感知成员集群的 API 版本差异,容易产生“静默失败”——资源同步成功但成员集群无法解析。
  • 注册与发现: 如果注册信息中的版本号与实际运行版本脱节,所有基于注册表的自动化验收工具都会产生误报或漏报。
交付前必查项: 无论采用哪种架构,都应在交付验收阶段执行一次“注册版本 vs 实际版本”的交叉校验。使用 kubectl version --short 在成员集群本地执行,并与控制面注册表中的版本字段比对。差异超过一个次要版本(如 v1.25 vs v1.27)时,应标记为版本漂移风险。