You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Cloud的不同Kubernetes集群间访问内部Service

GCP环境下Kubernetes集群间内部访问Service的方案

针对你在GCP上的两个K8s集群需要跨集群内部访问Service的需求,以下是几种无需暴露公网的实现方案:

1. VPC网络对等连接(VPC Peering)+ 自定义DNS解析

这是最直接的GCP原生方案,核心是打通两个集群所在的VPC网络,再配置DNS实现跨集群Service域名解析:

  • 确认两个GKE集群均为VPC原生集群(当前GKE默认采用该模式,若为旧版集群需先完成迁移)
  • 创建VPC对等连接:
    使用gcloud命令在两个VPC之间建立 peering:
    # 创建ClusterA VPC指向ClusterB VPC的对等连接
    gcloud compute networks peerings create clusterA-to-clusterB \
      --network=clusterA-vpc \
      --peer-network=clusterB-vpc \
      --auto-create-routes
    # 创建ClusterB VPC指向ClusterA VPC的反向对等连接
    gcloud compute networks peerings create clusterB-to-clusterA \
      --network=clusterB-vpc \
      --peer-network=clusterA-vpc \
      --auto-create-routes
    
  • 配置跨集群DNS解析:
    修改每个集群的CoreDNS ConfigMap,添加对方集群的Service域解析规则。以ClusterB访问ClusterA的Service为例:
    # 编辑ClusterB的coredns配置
    kubectl edit configmap coredns -n kube-system
    # 在Corefile中新增以下解析规则
    clusterA.svc.cluster.local:53 {
        forward . <ClusterA的kube-dns ClusterIP>
        cache 30
    }
    
    其中<ClusterA的kube-dns ClusterIP>可在ClusterA中通过kubectl get svc kube-dns -n kube-system获取。

2. 使用GCP共享VPC(Shared VPC)

如果两个集群属于同一GCP组织,可将它们部署到共享VPC中,实现集群网络天然连通:

  • 在GCP控制台创建共享VPC,将两个集群所在项目设置为共享VPC的服务项目
  • 将集群迁移或重新创建到共享VPC的子网内
  • 此时集群间Pod可直接访问对方的ClusterIP,再通过方案1的CoreDNS配置实现Service域名的跨集群解析

3. 基于Istio服务网格的多集群部署

若需要精细化流量管理(如熔断、灰度发布),可使用GKE上的Istio服务网格:

  • 在两个GKE集群中分别部署Istio,开启多集群模式(需先通过VPC对等连接打通集群网络)
  • 配置Istio全局服务发现,让两个集群的Service自动同步到彼此的服务注册表
  • 完成配置后,可直接在ClusterB中通过serviceA.namespaceA.svc.cluster.local访问ClusterA的Service,Istio会自动处理跨集群流量路由

注意:所有方案的前提是两个集群的Pod CIDR和Service CIDR不能重叠,否则会引发路由冲突。

内容的提问来源于stack exchange,提问作者Arif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:42:41