GKE 出站流量的静态 IP 地址:Cloud NAT 实用指南

发布: (2026年2月10日 GMT+8 11:01)
4 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for Static IP Addresses for GKE Outbound Traffic: A Practical Guide to Cloud NAT

问题

在 Google Kubernetes Engine (GKE) 上运行的应用需要连接到需要 IP 白名单的外部数据库。Kubernetes 中的 Pod 使用的是瞬时 IP,会不断变化。解决方案是什么?使用手动静态 IP 分配的 Cloud NAT

为什么需要这样做?

在现代微服务架构中,Kubernetes 应用经常需要访问:

  • 其他 GCP 项目中的托管数据库
  • 防火墙策略严格的第三方 API
  • 只允许已知 IP 访问的遗留服务

GKE 节点(尤其是私有集群)没有固定的公共 IP,导致无法维护稳定的白名单。

解决方案:手动分配的 Cloud NAT

Cloud NAT 充当网关,将集群内部私有地址转换为固定、可预测的公共 IP 地址。

步骤实现

预留静态 IP 地址

gcloud compute addresses create nat-static-ip \
  --region=us-central1

重要提示: IP 必须与 GKE 集群位于同一地区。

创建 Cloud Router

gcloud compute routers create nat-router \
  --network=my-vpc \
  --region=us-central1

使用手动分配配置 Cloud NAT

gcloud compute routers nats create nat-config \
  --router=nat-router \
  --region=us-central1 \
  --nat-external-ip-pool=nat-static-ip \
  --nat-all-subnet-ip-ranges

--nat-external-ip-pool 参数指定了第一步预留的静态 IP。

将 IP 添加到目标的白名单

配置好 Cloud NAT 后,集群的所有出站流量都会使用该静态 IP。将此 IP 加入数据库或外部服务的防火墙白名单即可。

关键优势

  • 持久性: 即使集群重启或节点重新创建,IP 也不会变化。
  • 安全性: 节点可以保持在私有子网中,无需公共 IP,降低攻击面。
  • 可扩展性: Cloud NAT 是托管服务,会自动扩展且不会影响性能。
  • 无需修改应用: 只在基础设施层面配置,部署保持不变。

重要注意事项

  • 容量管理: 在手动分配模式下,需要自行计算所需的 IP/端口数量。容量不足会导致 OUT_OF_RESOURCES 错误。
  • 监控: 为 NAT 端口使用率设置告警,以在影响生产之前发现问题。
  • 替代方案: 对于高度自定义的 NAT 逻辑或复杂的防火墙需求,手动 NAT 实例可能更合适,但会增加运维开销。

何时使用该方案

适用场景

  • ✅ 需要与要求 IP 白名单的服务通信
  • ✅ 运行私有 GKE 集群
  • ✅ 想要可扩展、托管的解决方案
  • ✅ 需要合规性并对出站流量进行集中审计

不适用场景

  • ❌ 需要极度自定义的 NAT 逻辑
  • ❌ 需要超出托管服务提供的细粒度控制

结论

手动 IP 分配的 Cloud NAT 是 GCP 针对此类常见需求的标准方案。它可靠、可扩展且配置相对简单,使您能够在私有网络中保持资源安全,同时实现对外部世界的受控连接。


Diagram

0 浏览
Back to Blog

相关文章

阅读更多 »

我的第一次成功的 CICD 部署

我刚开始我的 DevOps 学习之旅,已经掌握了 JavaScript、Git、GitHub Actions,稍微了解 Docker、构建工具和测试。我已经…