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

如何为现有公网GKE集群的Pod获取小子网以通过VPN对接第三方API?

推荐方案

以下是适配你场景的实用方案,优先规避额外部署Compute Engine代理的需求:

方案1:基于Calico CNI的Pod自定义IP池

默认GKE原生CNI无法灵活分配Pod子网,换用Calico可实现特定Pod的专属小网段配置:

  • 为现有公网GKE集群启用Calico:
    gcloud container clusters update [CLUSTER_NAME] --region [REGION] --enable-network-policy --addons=NetworkPolicy
    
  • 创建自定义小网段IP池(示例:192.168.100.0/24),通过Calico自定义资源配置:
    apiVersion: projectcalico.org/v3
    kind: IPPool
    metadata:
      name: vpn-pod-pool
    spec:
      cidr: 192.168.100.0/24
      natOutgoing: false
      disabled: false
    
  • 给需要对接VPN的Pod添加注解,绑定到该IP池:
    metadata:
      annotations:
        cni.projectcalico.org/ipPool: "vpn-pod-pool"
    
  • 配置Cloud VPN,将这个自定义子网的流量路由到合作伙伴VPN网关(公网集群同样支持Cloud VPN,只需在VPC中配置路由,将指向合作伙伴API的流量导向VPN隧道)

方案2:自定义子网节点池+Pod调度+SNAT

你尝试的新节点池方案是可行的,核心是正确指定自定义子网:

  • 在GCP VPC中创建一个小网段子网(示例:10.0.5.0/24),确保该网段在合作伙伴VPN允许列表内
  • 创建新GKE节点池并指定使用该自定义子网:
    gcloud container node-pools create vpn-node-pool --cluster [CLUSTER_NAME] --region [REGION] --subnetwork [CUSTOM_SUBNET_NAME]
    
  • 给目标Pod添加节点亲和性,强制调度到该节点池:
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: cloud.google.com/gke-nodepool
              operator: In
              values:
              - vpn-node-pool
    
  • 配置Cloud VPN,将该节点池子网的流量路由到合作伙伴VPN,确保节点出口的Pod SNAT流量使用该子网IP对接VPN

方案3:云NAT自定义IP范围+路由指向VPN

若不想修改CNI或节点池,可通过云NAT转换Pod出口IP到允许网段:

  • 在GCP VPC中创建静态IP范围(示例:10.0.20.0/28),提交给合作伙伴加入白名单
  • 配置云NAT,将目标Pod所在节点子网的流量(或通过标签筛选特定Pod流量)转换为该静态IP范围的地址
  • 创建VPC路由,将指向合作伙伴API的流量导向Cloud VPN网关,确保转换后的IP通过VPN通道传输

关键提示

  • Cloud VPN并非仅支持私有GKE集群,公网集群只要关联的VPC配置了VPN隧道和路由,即可让集群内流量通过VPN传输
  • 所有方案需提前和合作伙伴确认允许的网段范围,确保配置的子网/IP在对方白名单内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:15:32