GKE集群Pod流量走节点VM IP而非Cloud NAT如何解决
问题根因
当GKE节点被分配了外部公网IP时,Google Cloud VPC默认出站路由优先级更高,会优先使用节点自身的公网IP转发流量,覆盖Cloud NAT的路由规则,因此访问公网服务时返回的是节点IP而非Cloud NAT的地址。
配置步骤
方案1:移除GKE节点公网IP(推荐)
移除节点公网IP后,所有出站流量默认走Cloud NAT,是官方推荐的安全配置方案:
- 新建集群配置:创建集群时在「节点池」→「联网」设置中,将外部IP访问选项设置为
已禁用 - 现有集群配置:执行以下命令更新节点池为私有节点模式,执行后节点会滚动重建,新节点不会分配公网IP:
gcloud container node-pools update [节点池名称] --cluster [集群名称] --zone [可用区] --enable-private-nodes
方案2:保留节点公网IP,强制走Cloud NAT
如果业务需要保留节点的公网IP,可修改Cloud NAT配置实现强制路由:
- 进入Cloud NAT控制台,打开对应NAT规则的编辑页面
- 找到「NAT 针对以下对象启用」配置项,选择
所有实例(包括具有外部 IP 地址的实例) - 保存配置后等待1-2分钟规则生效即可
验证配置
配置生效后,启动测试Pod验证出站IP,返回结果应和Cloud NAT的公网IP一致:
kubectl run -it --rm --image=curlimages/curl nat-test -- curl ifconfig.me
你之前配置的
All subnets' primary and secondary IP ranges规则已覆盖GKE Pod的secondary IP段,无需额外修改。
内容的提问来源于stack exchange,提问作者NimaKapoor
相关产品推荐
相关产品推荐

