3、多集群网络模型:Subnet、Globalnet、SuperCluster 原理与选择策略

在多集群镜像拉取加速场景中,网络模型的选择直接决定了跨集群流量的路径、地址冲突的可能性以及运维复杂度。Calico 在多集群互联中主要提供三种网络模型:Subnet(子网模型)、Globalnet(全局网络模型)和 SuperCluster(超级集群模型)。理解它们的原理与适用边界,是进行后续参数调优的前提。

3.1 三种模型的核心原理

3.1.1 Subnet 模型(子网模型)

Subnet 模型是最基础的多集群互联方式。每个集群保留独立的 Pod CIDR 和 Service CIDR,通过 Calico 的 IPPool 资源严格隔离地址空间。集群之间通过 BGP 或 IPIP/VXLAN 隧道交换路由,但 不进行地址转换。

  • 地址域:每个集群独立分配,Pod IP 可能重叠。
  • 流量路径:源 Pod → 源集群网关 → 隧道 → 目标集群网关 → 目标 Pod。
  • 适用场景:集群间 Pod CIDR 完全无重叠,且网络策略要求保留源 IP。

3.1.2 Globalnet 模型(全局网络模型)

Globalnet 由 Submariner 项目推广,Calico 通过 GlobalNetworkSet 和 Globalnet 控制器实现。它为每个集群分配一个全局唯一的 Globalnet CIDR(通常为 /24 或 /16 段),并在跨集群通信时执行 1:1 SNAT/DNAT,将 Pod 原始 IP 映射为 Globalnet IP。

  • 地址域:全局统一分配,消除地址重叠。
  • 流量路径:源 Pod → Globalnet SNAT → 隧道 → 目标集群 Globalnet DNAT → 目标 Pod。
  • 适用场景:集群间 Pod CIDR 存在重叠,需要全局唯一标识。

3.1.3 SuperCluster 模型(超级集群模型)

SuperCluster 是 Calico 企业版(Calico Cloud / Calico Enterprise)提供的抽象层。它将多个集群逻辑上合并为一个“超级集群”,使用统一的 SuperCluster CIDR(如 10.0.0.0/8),并在每个集群的节点上运行 supercluster-proxy 组件,实现跨集群的 L4 代理转发。

  • 地址域:全局统一,但通过代理层解耦,不要求底层 Pod CIDR 一致。
  • 流量路径:源 Pod → SuperCluster Service → 代理 → 目标集群 Pod。
  • 适用场景:大规模多集群联邦,需要统一服务发现与流量治理。
关键区别:Subnet 依赖路由,Globalnet 依赖 NAT,SuperCluster 依赖代理。路由模型性能最高但地址约束最严;NAT 模型灵活性中等但引入地址转换开销;代理模型灵活性最高但延迟最大。

3.2 三种模型对比表

维度 Subnet Globalnet SuperCluster
地址重叠容忍 否 是(通过 NAT) 是(通过代理)
跨集群延迟 低(纯路由) 中(NAT 处理) 高(代理转发)
运维复杂度 低(BGP 自动) 中(需配置 Globalnet CIDR) 高(需部署代理组件)
镜像拉取加速适配 需保证 CIDR 不重叠 适合重叠 CIDR 场景 适合大规模联邦拉取
源 IP 保留 是 否(被 NAT 替换) 否(被代理替换)
Calico 版本支持 开源版 v3.0+ 开源版 v3.8+(需 Submariner) 企业版 v3.10+

3.3 选择策略:镜像拉取加速场景下的决策树

针对多集群镜像拉取加速这一核心目标,选择网络模型时应遵循以下决策逻辑:

  1. 检查 Pod CIDR 是否重叠:如果所有集群的 Pod CIDR 完全独立(如 10.1.0.0/16、10.2.0.0/16),优先选择 Subnet 模型,避免 NAT 开销。
  2. 如果 CIDR 重叠:评估是否需要保留源 IP。若不需要(镜像拉取通常只关心目标 registry),选择 Globalnet 模型,通过 NAT 解决地址冲突。
  3. 如果集群数量超过 10 个:考虑 SuperCluster 模型,利用代理层统一服务发现,减少路由表规模。
  4. 性能敏感场景:避免 SuperCluster 的代理路径,优先 Subnet 或 Globalnet。
实践建议:在镜像拉取加速场景中,registry 通常部署在独立集群或专用节点上。如果 registry 集群的 Pod CIDR 与业务集群不重叠,使用 Subnet 模型直接路由是最优解;如果重叠,使用 Globalnet 模型并配置 registry 的 Globalnet IP 为拉取目标。

3.4 网络模型架构图

下图展示了三种模型在跨集群镜像拉取场景下的流量路径对比:

三种多集群网络模型流量路径对比 Subnet 模型 集群 A Pod 集群 B Pod 路由 BGP / IPIP 隧道 CIDR 不重叠,保留源 IP Globalnet 模型 集群 A Pod 集群 B Pod Globalnet SNAT/DNAT 1:1 地址映射 CIDR 重叠可解,源 IP 丢失 SuperCluster 模型 集群 A Pod 集群 B Pod supercluster-proxy L4 代理转发 延迟最高,灵活性最高 选择建议 镜像拉取加速:CIDR 不重叠 → Subnet;CIDR 重叠 → Globalnet;大规模联邦 → SuperCluster 性能与灵活性对比 Subnet:性能高 Globalnet:性能中 SuperCluster:性能低 ← 延迟低 ← 延迟中 ← 延迟高 Subnet:灵活性低 Globalnet:灵活性中 SuperCluster:灵活性高 地址约束严 → 地址约束中 → 地址约束松 →

3.5 配置示例:Globalnet 模型下的镜像拉取加速

假设集群 A 和集群 B 的 Pod CIDR 均为 10.244.0.0/16,registry 部署在集群 A 的 registry-svc 上。使用 Globalnet 模型时,需要为 registry 分配一个全局唯一的 Globalnet IP:

# 在集群 A 上创建 Globalnet 分配
apiVersion: submariner.io/v1
kind: Globalnet
metadata:
  name: registry-globalnet
spec:
  clusterID: cluster-a
  globalCIDR: 242.0.0.0/24
  podCIDR: 10.244.0.0/16
---
# 在集群 B 上配置拉取目标为 Globalnet IP
apiVersion: v1
kind: ConfigMap
metadata:
  name: mirror-registry-config
  namespace: kube-system
data:
  registry-mirror: "242.0.0.10:5000"
注意:Globalnet 的 NAT 转换会增加约 5-10% 的 CPU 开销(取决于连接数)。在镜像拉取这种大流量场景下,建议为 registry 节点预留足够的 CPU 资源,或使用 Subnet 模型避免 NAT。

3.6 选择策略总结

下表给出了针对不同集群规模和地址重叠情况的推荐模型:

集群数量 Pod CIDR 重叠 推荐模型 镜像拉取加速适配说明
2-5 否 Subnet 直接路由,延迟最低,适合 registry 跨集群拉取
2-5 是 Globalnet NAT 解决地址冲突,registry 需配置 Globalnet IP
6-10 是 Globalnet 统一地址空间,减少路由条目
>10 是 SuperCluster 代理层统一服务发现,适合大规模联邦镜像拉取