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

如何将GKE节点绑定至Gateway,实现统一出口IP访问客户端防火墙?

嘿,我刚好处理过类似的需求,给你整理两个靠谱的方案,能让GKE所有节点的出站流量都走同一个静态IP,这样你只需要在客户端防火墙放通这一个IP就搞定了:

方案1:用Cloud NAT绑定静态IP(最省心的通用方案)

这是最常用的路子,靠Cloud NAT来统一节点的出口IP——本质是让VPC里所有GKE节点的出站流量都走指定的静态IP转发,完全不需要改集群的核心配置。

步骤走一遍:

  • 先搞个静态外部IP(要是你已经有了就跳过这步):
    gcloud compute addresses create nat-static-ip --region=你的集群所在区域 --ip-version=IPV4
    
  • 创建Cloud NAT网关,把这个静态IP绑上去,同时指定GKE节点所在的子网:
    (前提是你VPC里已经有路由器了,没有的话先跑gcloud compute routers create 路由器名称 --region=你的区域 --network=你的VPC名称)
    gcloud compute routers nats create gke-nat \
      --router=你的路由器名称 \
      --region=你的集群所在区域 \
      --nat-all-subnet-ip-ranges \
      --nat-external-ip-pool=nat-static-ip
    
  • 验证效果:直接登录GKE节点,跑curl ifconfig.me,返回的应该就是你刚才创建的静态IP。
方案2:用GKE Gateway API + 出口网关(适合需要流量管控的场景)

如果你想通过GKE原生的Gateway来做更精细的流量管控(比如后续加路由规则、过滤特定域名),可以试试出口网关模式,把节点的出站流量都导向绑定了静态IP的Gateway。

步骤如下:

  • 先确保你的GKE集群启用了Gateway API(集群版本得1.21以上,还要开gateway-api插件):
    gcloud container clusters update 你的集群名称 --region=你的区域 --enable-gateway-api
    
  • 创建一个Gateway资源,绑定你的静态IP:
    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: Gateway
    metadata:
      name: egress-gateway
      annotations:
        networking.gke.io/static-ip: "nat-static-ip" # 填你之前创建的静态IP名称
    spec:
      gatewayClassName: gke-l7-global-external-managed
      listeners:
      - name: egress
        port: 443
        protocol: HTTPS
        allowedRoutes:
          namespaces:
            from: All
    
  • 再创建EgressPolicy,把所有节点的出站流量都导向这个Gateway:
    apiVersion: networking.gke.io/v1
    kind: EgressPolicy
    metadata:
      name: node-egress
    spec:
      action: ALLOW
      destination:
        cidrBlocks: ["0.0.0.0/0"] # 匹配所有外部流量
      redirect:
        gatewayRef:
          name: egress-gateway
          namespace: default # 对应Gateway所在的命名空间
      target:
        podSelector: {} # 这里如果要限制特定节点的Pod,加标签筛选就行,空的话覆盖所有Pod(包括节点系统Pod)
    
    注意:这个方案需要GKE的Gateway API支持出口网关功能,部分区域可能要先启用预览特性,你可以先查下你的集群区域是否支持。
几个要踩的坑提醒
  • 静态IP要对应集群的位置:单区域集群用区域IP,跨区域集群用全局IP,别搞混了。
  • 用Cloud NAT的话,要确保nat-all-subnet-ip-ranges参数包含了GKE节点所在的子网,默认是包含所有的,但如果之前有配置过子网排除,得检查下。
  • 测试的时候一定要在GKE节点内部发起请求(比如登录节点跑curl),别用集群内的Pod——Pod如果用了Service或者Sidecar,可能走的是其他出口路径,测不准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:31:11