出海企业多云Kubernetes联邦与跨集群服务发现实战:一套代码管多朵云(2026最新版)
Meta Description: 多云Kubernetes联邦部署完整指南:KubeFed v2、Cilium Cluster Mesh、Submariner跨云网络、ArgoCD多集群GitOps、Prometheus+Thanos统一可观测性,从架构到命令一篇搞定。
- 前言
- 为什么需要多云Kubernetes联邦?
- 多云K8s联邦五层架构全景图
- 网络互通:Submariner vs Cilium Cluster Mesh
- 跨集群服务发现:三种模式详解
- ArgoCD 多集群GitOps编排
- 跨云可观测性:Prometheus + Thanos统一指标
- 三云厂商K8s联邦能力对比表
Meta Description: 多云Kubernetes联邦部署完整指南:KubeFed v2、Cilium Cluster Mesh、Submariner跨云网络、ArgoCD多集群GitOps、Prometheus+Thanos统一可观测性,从架构到命令一篇搞定。
关键词: 多云Kubernetes、K8s联邦、跨集群服务发现、Cilium Cluster Mesh、Submariner、多云容器编排
前言
企业出海后,业务往往同时运行在阿里云ACK、AWS EKS、腾讯云TKE三朵云上。每个集群独立部署简单,但跨集群流量调度、统一服务发现、全局故障转移却成了真正的难题。本文从实战角度出发,覆盖多云K8s联邦的五层架构——网络互通、服务发现、工作负载编排、可观测性、灾备切换,提供完整的架构图、配置命令和厂商对比,帮助企业在30分钟内搭建起跨云Kubernetes联邦体系。
一、为什么需要多云Kubernetes联邦?
当企业同时使用三朵云时,最常见的问题是:A云的Pod想调用B云的Service,DNS解析不到;A云宕机后流量无法自动切到B云;运维团队要登录三个集群分别操作,效率极低。多云K8s联邦解决的正是这三个核心痛点。
典型场景:
| 场景 | 痛点 | 联邦方案 |
|---|---|---|
| 跨云服务调用 | A云Pod无法发现B云Service | Cilium Cluster Mesh / Submariner |
| 跨云故障转移 | A云全挂,流量无法自动切走 | GSLB + 多集群Deployment |
| 统一运维 | 登录三个集群分别操作 | ArgoCD多集群 + Lens/Rancher |
| 跨云负载均衡 | 无法跨云分配流量 | Istio VirtualService / DNS轮询 |
| 数据同步 | 跨云数据库延迟高 | DTS/DMS + 本地缓存降级 |
二、多云K8s联邦五层架构全景图
graph TB
subgraph 用户层
U[用户/客户端]
end
subgraph 调度层
GSLB[全局负载均衡 GSLB/Cloudflare]
end
subgraph 联邦控制层
ARGO[ArgoCD 多集群GitOps]
KUBEFED[KubeFed v2 / Admiralty]
end
subgraph 集群层
ACK[阿里云ACK<br/>ap-southeast-1]
EKS[AWS EKS<br/>ap-southeast-1]
TKE[腾讯云TKE<br/>ap-southeast-1]
end
subgraph 网络互通层
SUB[Submariner VPN隧道]
CILIUM[Cilium Cluster Mesh]
end
U --> GSLB
GSLB --> ACK
GSLB --> EKS
GSLB --> TKE
ARGO --> ACK
ARGO --> EKS
ARGO --> TKE
KUBEFED --> ACK
KUBEFED --> EKS
KUBEFED --> TKE
SUB --- ACK
SUB --- EKS
SUB --- TKE
CILIUM --- ACK
CILIUM --- EKS
CILIUM --- TKE
ASCII 全景图:
┌─────────────────────────────────────────────────────────────────────┐
│ 全局负载均衡层 │
│ Cloudflare DNS / AWS Route53 / 阿里云云解析DNS │
├─────────────┬───────────────────┬───────────────────────────────────┤
│ 联邦控制层 │ │ │
│ ArgoCD │ KubeFed v2 │ Admiralty (可选) │
│ 多集群同步 │ 资源分发 │ 虚拟集群联邦 │
├─────────────┼───────────────────┼───────────────────────────────────┤
│ │ 网络互通层 │ │
│ Submariner │ Cilium Cluster │ WireGuard (轻量级) │
│ SiteMesh │ Mesh │ │
├─────────────┼───────────────────┼───────────────────────────────────┤
│ │ 集群层 │ │
│ 阿里云ACK │ AWS EKS │ 腾讯云TKE │
│ sg.1 │ ap-southeast-1 │ ap-singapore │
│ v1.28+ │ v1.29+ │ v1.28+ │
└─────────────┴───────────────────┴───────────────────────────────────┘
三、网络互通:Submariner vs Cilium Cluster Mesh
跨云K8s联邦的第一步是让不同集群的Pod能互相通信。目前主流方案有两种:Submariner(基于VPN隧道)和 Cilium Cluster Mesh(基于eBPF)。
方案对比
| 特性 | Submariner | Cilium Cluster Mesh |
|---|---|---|
| 原理 | IPsec/WireGuard VPN隧道 | eBPF XDP + 全局服务路由 |
| 性能 | 中等(加密开销~15%) | 高(eBPF零拷贝,开销<5%) |
| 服务发现 | 需配合Lighthouse | 内置全局DNS + ServiceAffinity |
| 网络策略 | 不支持跨云NetworkPolicy | 支持跨云CiliumNetworkPolicy |
| 安装复杂度 | 中等(需Broker组件) | 低(Helm一键安装) |
| 兼容性 | 任意CNI(Calico/Flannel等) | 要求Cilium CNI(可原地升级) |
| 生产验证 | 成熟(AWS/Azure原生支持) | 成熟(Cilium已入CNCF毕业) |
| 适用场景 | 多厂商CNI混合环境 | 统一Cilium CNI的新建集群 |
Submariner 部署命令
// 安装 Subctl 命令行工具
curl -Ls https://get.submariner.io | VERSION=v0.18.0 bash
export PATH=$PATH:$(pwd)/bin
// 在 Hub 集群安装 Broker
subctl deploy-broker --natt=false --globalnet
// 将阿里云ACK加入联邦
subctl join broker-info.subm --clusterid ack-sg \
--serviceaccount --ikeport 4500
// 将AWS EKS加入联邦
subctl join broker-info.subm --clusterid eks-sg \
--serviceaccount --ikeport 4500
// 将腾讯云TKE加入联邦
subctl join broker-info.subm --clusterid tke-sg \
--serviceaccount --ikeport 4500
// 验证连通性
subctl show connections
subctl show endpoints
Cilium Cluster Mesh 部署命令
// 确保三朵云集群都安装了Cilium(版本>=1.14)
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --version 1.15.0 \
--namespace kube-system \
--set cluster.name=ack-sg \
--set cluster.id=1 \
--set clustermesh.enable=true
// 导出每个集群的CA证书和Endpoint
cilium clustermesh status --wait
// 连接集群(在Hub集群执行)
cilium clustermesh connect --destination-context ack-sg \
--destination-context eks-sg
cilium clustermesh connect --destination-context ack-sg \
--destination-context tke-sg
// 等待所有服务同步完成
cilium clustermesh status --wait
// 验证:从ACK集群Pod中访问EKS集群Service
kubectl exec -it test-pod -- curl eks-service.eks-sg.svc.mesh.cilium.io
四、跨集群服务发现:三种模式详解
跨集群服务发现是联邦的核心能力。根据业务需求,可以选择三种不同粒度的模式。
模式一:Cilium Cluster Mesh 全局服务(推荐)
Cilium Cluster Mesh 将多个集群的同名Service合并为一个全局服务,Pod可以像访问本地服务一样访问跨云Service。
// 部署示例:三朵云部署同一个API服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: api-server
template:
metadata:
labels:
app: api-server
spec:
containers:
- name: api
image: registry.cn-hangzhou.aliyuncs.com/myorg/api:v2.1
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: api-server
namespace: production
annotations:
// 关键:声明为全局服务
service.cilium.io/global: "true"
// 服务亲和性:优先访问同集群
service.cilium.io/affinity: "local"
spec:
selector:
app: api-server
ports:
- port: 80
targetPort: 8080
type: ClusterIP
模式二:Submariner Lighthouse DNS
Submariner的Lighthouse组件为跨集群Service提供DNS解析,将 <service>.<namespace>.svc.clusterset.local 解析到远端集群的Endpoint。
// 在每个集群安装Lighthouse
helm install submariner-lighthouse \
submariner-lighthouse/submariner-lighthouse \
--namespace submariner-operator \
--create-namespace
// 验证跨集群DNS解析
kubectl run dnstest --image=busybox:1.36 --rm -it --restart=Never -- \
nslookup api-server.production.svc.clusterset.local
// 应返回多个集群的Endpoint IP
模式三:Istio 多集群ServiceEntry
对于使用Istio服务网格的环境,可以通过ServiceEntry将远端集群的服务注册到本地网格中。
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: eks-api-server
namespace: production
spec:
hosts:
- api-server.eks-production.svc.cluster.local
location: MESH_INTERNAL
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
endpoints:
- address: eks-api.eks-sg.svc.cluster.local
ports:
http: 80
五、ArgoCD 多集群GitOps编排
ArgoCD是多云K8s联邦的控制平面核心。通过一个ArgoCD实例管理三朵云的Kubernetes集群,实现"一份代码、三朵云部署"。
安装ArgoCD并注册三朵云集群
// 在Hub集群安装ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
// 注册阿里云ACK
argocd cluster add ack-sg-admin --name ack-sg --server https://api.ack-sg.cn-hangzhou.ack.aliyuncs.com:6443
// 注册AWS EKS
argocd cluster add eks-sg-admin --name eks-sg --server https://XXXXX.eks.amazonaws.com
// 注册腾讯云TKE
argocd cluster add tke-sg-admin --name tke-sg --server https://api.tke-sg.tencentcloud.local:6443
// 验证集群连接状态
argocd cluster list
多集群ApplicationSet模板
使用ApplicationSet可以一份配置同时部署到三朵云,每个集群可以有差异化参数:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: api-server-multicloud
namespace: argocd
spec:
generators:
- clusters:
selector:
matchLabels:
environment: production
template:
metadata:
name: 'api-server-{{name}}'
spec:
project: default
source:
repoURL: https://github.com/myorg/k8s-manifests.git
targetRevision: main
path: 'overlays/{{metadata.labels.cloud}}'
destination:
server: '{{server}}'
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
六、跨云可观测性:Prometheus + Thanos统一指标
多云K8s联邦的可观测性需要将三个集群的指标汇聚到一个统一的Grafana仪表盘。Thanos是目前最成熟的方案。
graph LR
subgraph 阿里云ACK
PROM_A[Prometheus<br/>本地15天]
end
subgraph AWS EKS
PROM_B[Prometheus<br/>本地15天]
end
subgraph 腾讯云TKE
PROM_C[Prometheus<br/>本地15天]
end
subgraph 汇聚层
THANOS_S[Thanos Sidecar<br/>上传ObjectStore]
THANOS_Q[Thanos Query<br/>全局查询入口]
end
subgraph 存储层
OBJ[ObjectStore<br/>S3/OSS/COS]
end
PROM_A --> THANOS_S
PROM_B --> THANOS_S
PROM_C --> THANOS_S
THANOS_S --> OBJ
OBJ --> THANOS_Q
THANOS_Q --> GRAFANA[Grafana<br/>统一仪表盘]
Thanos 部署关键配置
// Prometheus Helm values(三朵云共用,改cluster标签)
prometheus:
retention: 15d
thanosService:
enabled: true
thanos:
objectStorageConfig:
secret:
name: thanos-objstore-secret
key: objstore.yml
sidecar:
// 每个集群上传到自己的Bucket
objstoreConfig:
type: S3
config:
bucket: thanos-metrics-${CLUSTER_NAME}
endpoint: s3.${REGION}.amazonaws.com
// Thanos Query 部署在Hub集群
// 同时查询三个集群的Thanos Sidecar
thanos query:
endpoints:
- ack-sg-prometheus-thanos:10901
- eks-sg-prometheus-thanos:10901
- tke-sg-prometheus-thanos:10901
// 按cluster标签区分
query.auto-downsampling: true
七、三云厂商K8s联邦能力对比表
| 能力 | 阿里云ACK | AWS EKS | 腾讯云TKE |
|---|---|---|---|
| 多集群管理 | ASCluster(控制台聚合) | EKS Console + Lens | TKE Console多集群视图 |
| 原生联邦方案 | 无(推荐KubeFed/ArgoCD) | 无(推荐ArgoCD) | 无(推荐ArgoCD) |
| 跨集群网络 | CEN云企业网+VPC对等 | VPC Peering+Transit GW | 对等连接+CDC |
| Cilium支持 | ACK Pro集群原生支持 | EKS Add-on支持 | 需手动安装 |
| Submarener兼容 | 支持(Calico CNI) | 原生支持 | 支持(Calico CNI) |
| GitOps生态 | 阿里云云效+ArgoCD | CodePipeline+ArgoCD | 腾讯云CODING+ArgoCD |
| 多集群监控 | ARMS Prometheus(托管) | AMP Managed Prometheus | TPS Prometheus(托管) |
| 跨集群弹性 | 多伸缩组+ESS | Node Auto Scaling | 多伸缩组+GPA |
| 容器镜像跨云同步 | ACR跨区域复制 | ECR跨区域复制 | TCR跨区域复制 |
| 最低集群版本 | 1.26+ | 1.25+ | 1.24+ |
八、跨云部署成本参考(新加坡区域)
| 配置 | 阿里云ACK Pro(新加坡) | AWS EKS(新加坡) | 腾讯云TKE(新加坡) |
|---|---|---|---|
| 集群管理费 | ¥0/小时(Pro版含免费额度) | $0.10/小时($73/月) | 免费(标准版) |
| 3节点Worker(4C8G) | ¥1,200/月 | $180/月(m5.xlarge×3) | ¥1,100/月 |
| SLB负载均衡 | ¥300/月 | $22/月(ALB) | ¥280/月 |
| 容器镜像仓库(50GB) | ¥100/月 | $10/月(ECR 50GB) | ¥90/月 |
| 监控(Prometheus托管) | ¥500/月 | $150/月(AMP) | ¥450/月 |
| 月度合计(单集群) | ¥2,100/月 | $435/月(约¥3,100) | ¥1,920/月 |
| 三朵云月度合计 | ¥7,120/月(约$980) | — | — |
实际以各云官网实时报价为准,以上为参考估算。
九、30分钟快速搭建多云K8s联邦路线图
graph LR
A[0-5min<br/>环境准备] --> B[5-10min<br/>安装Cilium]
B --> C[10-15min<br/>开启Cluster Mesh]
C --> D[15-20min<br/>安装ArgoCD]
D --> E[20-25min<br/>部署ApplicationSet]
E --> F[25-30min<br/>验证跨云调用]
Step 1(0-5min):环境准备
// 确认三朵云kubectl配置正确
kubectl config use-context ack-sg && kubectl get nodes
kubectl config use-context eks-sg && kubectl get nodes
kubectl config use-context tke-sg && kubectl get nodes
Step 2(5-15min):安装Cilium + 开启Cluster Mesh
// 三朵云分别安装Cilium(改cluster.name和cluster.id)
for ctx in ack-sg eks-sg tke-sg; do
kubectl config use-context $ctx
helm upgrade --install cilium cilium/cilium \
--version 1.15.0 --namespace kube-system \
--set cluster.name=$ctx --set cluster.id=$(echo $ctx | md5sum | cut -c1-2) \
--set clustermesh.enable=true
done
// 连接三朵云
cilium clustermesh connect --destination-context ack-sg --destination-context eks-sg
cilium clustermesh connect --destination-context ack-sg --destination-context tke-sg
cilium clustermesh status --wait
Step 3(15-25min):安装ArgoCD + 注册集群 + 部署应用
// Hub集群安装ArgoCD
kubectl config use-context ack-sg
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
// 注册EKS和TKE
argocd cluster add eks-sg-admin --name eks-sg
argocd cluster add tke-sg-admin --name tke-sg
// 创建ApplicationSet(参考第六节YAML)
kubectl apply -f applicationset.yaml
Step 4(25-30min):验证跨云服务调用
// 在ACK集群部署测试Pod
kubectl run curl-test --image=curlimages/curl --rm -it --restart=Never -- \
curl api-server.production.svc.cluster.local
// 应能看到来自EKS或TKE的响应(通过Cluster Mesh路由)
// 预期输出:{"status":"ok","cluster":"eks-sg","pod":"api-server-xxxxx"}
十、常见问题 FAQ
Q1: 多云K8s联邦对集群版本有要求吗?
Cilium Cluster Mesh 要求 Cilium >= 1.14,底层 K8s >= 1.21。ArgoCD 支持 K8s >= 1.21。建议三朵云统一到 1.28+,避免版本差异导致的 API 兼容问题。Submariner 要求 K8s >= 1.19,对版本宽容度更高。
Q2: 跨云延迟会影响服务调用吗?
新加坡区域内三朵云之间的网络延迟通常在 2-5ms(同Region),对大多数业务影响可忽略。跨Region(如新加坡→东京)延迟约 60-80ms,需要在应用层做好超时和重试。Cilium Cluster Mesh 支持 service.cilium.io/affinity: "local" 优先本地调用,减少跨云延迟。
Q3: Cilium Cluster Mesh 和 Submariner 能同时用吗?
技术上可以但不推荐。两者同时运行会导致路由冲突和双隧道开销。选择原则:新建集群统一用 Cilium(性能更好、功能更全),存量 Calico/Flannel 集群用 Submariner(兼容性好)。渐进迁移路径:先 Submariner 打通,再逐集群升级到 Cilium,最后关闭 Submariner。
Q4: 跨云服务调用的流量费用怎么算?
三朵云同Region内跨云通信通常走VPC对等连接或云企业网,费用约 ¥0.01-0.03/GB。如果走公网(Submariner IPsec隧道),费用按各云出站流量计费,约 ¥0.5-0.8/GB。建议优先使用云企业网(CEN)或VPC Peering,避免公网隧道的高额流量费。
Q5: 多云K8s联邦的故障转移是自动的吗?
不是完全自动的。需要配合两层机制:① DNS层:Cloudflare或Route53健康检查发现集群故障后自动切换DNS解析;② 应用层:ArgoCD的selfHeal确保故障恢复后自动同步状态。真正的"秒级自动切换"需要 GSLB + 有状态应用的跨云数据同步(参考 多云灾备编排文章)。
Q6: 腾讯云TKE的Cilium支持情况如何?
腾讯云TKE标准版支持通过自定义模式安装Cilium CNI。TKE Serverless版暂不支持Cilium。如果使用TKE托管版(非Serverless),可以通过Helm手动安装Cilium 1.15+,开启Cluster Mesh功能。建议在TKE创建集群时选择"自定义"网络模式,预留Cilium升级空间。
Q7: ArgoCD管理多集群时,权限怎么隔离?
ArgoCD支持通过Project实现权限隔离。可以为每个云厂商创建独立的Project,限制只能部署到对应的集群和Namespace。生产环境建议开启SSO集成(Keycloak/Azure AD),通过OIDC组映射ArgoCD的RBAC角色。详细方案参考 多云零信任网络架构文章。
Q8: 多云K8s联邦适合什么规模的企业?
建议同时管理3个以上Kubernetes集群的企业采用联邦方案。如果只有1-2个集群,ArgoCD多集群管理已经足够,不需要引入Cilium Cluster Mesh。联邦方案的运维复杂度与集群数量正相关——3个集群是联邦的甜蜜点,超过5个建议考虑Karmada或KubeFed v2进行更精细的资源分发。
十一、总结
多云Kubernetes联邦是出海企业容器化架构的必经之路。核心方案是 Cilium Cluster Mesh 打通跨云网络 + ArgoCD ApplicationSet 统一部署 + Thanos 统一可观测性。三个组件分别解决网络互通、工作负载编排、监控告警三大痛点,形成完整的多云容器编排闭环。
对于刚开始探索多云的企业,建议从"ArgoCD多集群管理"起步,验证跨云部署流程后再引入Cilium Cluster Mesh打通网络。渐进式演进比一步到位更安全、成本更低。
🚀 企业出海需要云架构咨询?通过 7.chengzicloud.cloud 联系我们,获取专属的多云K8s联邦方案,涵盖架构设计、部署实施、安全加固全流程服务。
相关阅读
- 多云服务网格治理实战:Istio多集群跨云部署 — Istio与Cilium Cluster Mesh的选型对比
- 多云灾备编排与自动化切换实战 — 跨云RTO/RPO保障与一键故障转移
- 出海企业CI/CD流水线搭建实战 — GitHub Actions + 容器化多云部署
- 多云可观测性架构实战 — Prometheus + Thanos统一监控方案
本文由 7.chengzicloud.cloud 提供,点击访问首页了解更多