Encore 平台实战:为 GCP Cloud Run 环境配置静态出站 IP(Cloud NAT + VPC Egress 完整指南)
2026/9/15 13:03:59 网站建设 项目流程

Encore 平台实战:为 GCP Cloud Run 环境配置静态出站 IP(Cloud NAT + VPC Egress 完整指南)

【免费下载链接】encoreThe infrastructure platform for the intelligence era项目地址: https://gitcode.com/GitHub_Trending/encor/encore

本篇指南面向使用 Encore Cloud 将应用部署到 Google Cloud Run 的开发者,讲解如何为应用配置稳定的出站 IP 地址(静态 Egress IP)。默认情况下 Cloud Run 的出站流量来自 Google 动态 IP 池,第三方无法对你的应用做 IP 白名单;通过将出站流量路由到环境 VPC,并经绑定了预留静态 IP 的 Cloud NAT 网关转发,即可获得固定出口地址。读完本文你将掌握:在 GCP Console 中为 Encore 环境预留静态 IP 并创建 Cloud NAT 网关、在 Encore Cloud 控制台将 Cloud Run 的 VPC egress 切换为 All traffic、验证出口 IP 是否生效,以及了解这一配置对成本、可用性与多区域架构的影响。

问题背景:为什么 Cloud Run 需要静态出站 IP

默认情况下,GCP Cloud Run 服务发往互联网的出站流量使用一批Google 官方拥有的 IP 地址(IP 池),这些地址会随时间变化。这带来一个直接后果:

第三方无法对"你的应用"做 IP 维度的白名单放行,因为源 IP 是不确定的。

典型受影响的场景包括:

  • 对接合作伙伴或第三方 API,需要对方按 IP 白名单放行你的调用;
  • 连接要求基于 IP 做访问控制的外部数据库与外部服务;
  • 满足合规要求——审计与合规体系往往要求"已知的、可审计的出站地址"。

要获得稳定的出站 IP,思路是:让服务的出站流量先进入你环境的 VPC,再经由绑定了预留静态 IP 的 Cloud NAT 网关转发到互联网。出站流量的源 IP 就固定为 NAT 网关上的静态地址。

从 Encore 平台侧看,这套方案与 Encore Cloud 的 GCP 基础设施模型天然契合:Encore Cloud 为每个环境预置独立的 GCP 项目与 VPC 网络(详见 GCP 基础设施文档),所有资源部署在私有网络内,外部流量只能通过指定的入口点进入;Cloud NAT 恰好填补了"私有网络出站"这一环。

整个配置只需要两步:

  1. 在 GCP Console中,为 Encore 环境的 VPC 创建一个绑定预留静态 IP 的 Cloud NAT 网关;
  2. 在 Encore Cloud 控制台中,将该环境的 Cloud Run 服务配置为将All traffic(全部流量)路由到 VPC。

前置条件

  • 一个部署到GCP Cloud Run(而非 GKE)的 Encore 环境。Encore Cloud 支持在创建环境时选择 GCP + Cloud Run 作为计算平台(参见 环境创建与配置)。
  • 拥有该 Encore 环境对应 GCP 项目的控制台访问权限。Encore Cloud 为每个环境提供独立专用的 GCP 项目,你需要在这个项目里操作。
  • 对 Encore Cloud 控制台具备相应权限(管理员角色可修改基础设施配置)。

Step 1:创建 Cloud NAT 网关

Encore Cloud 为每个环境预置了专用 GCP 项目VPC 网络。Cloud NAT 网关必须创建在该项目内、且与你的环境部署所在的同一区域

1.1 预留静态外部 IP 地址

  1. 打开 GCP Console,选择 Encore 环境对应的 GCP 项目;
  2. 进入VPC network > IP addresses,点击Reserve external static IP address(预留外部静态 IP 地址)
  3. 为 IP 命名,例如encore-egress-ip
  4. Type(类型)设为Regional(区域级),并选择你环境部署所在的区域;
  5. 点击Reserve(预留)

注意:此处必须选择Regional类型,因为 Cloud NAT 是区域级资源,需要与 NAT 网关处于同一区域。

1.2 创建 Cloud NAT 网关

  1. 进入Network services > Cloud NAT,点击Get started / Create Cloud NAT gateway(创建 Cloud NAT 网关)
  2. 为网关命名,例如encore-egress-nat
  3. NAT type(NAT 类型)设为Public(公网)
  4. 选择Network(网络)为 Encore Cloud 为该环境预置的 VPC,Region(区域)与上面预留 IP 的区域保持一致;
  5. Cloud Router部分,创建一个新的路由器(或选择同一网络、同一区域内已存在的路由器);
  6. Cloud NAT mapping(Cloud NAT 映射)下,保持默认的源选择方式,使所有子网 IP 范围都能使用该网关;
  7. NAT IP addresses(NAT IP 地址)设为Manual(手动),并选择你在上一步预留的静态 IP;
  8. 点击Create(创建)

关键顺序提醒:一定要创建好 Cloud NAT 网关,执行下一步修改 VPC egress 设置。一旦出站流量被路由到 VPC,对互联网的访问就完全依赖 NAT 网关——如果没有它,你的服务将无法访问互联网

Step 2:让 Cloud Run 的所有出站流量走 VPC

默认情况下,Cloud Run 只会把发往私有 IP 段的流量送进 VPC,而发往互联网的流量仍直接经 Google 的 IP 池发出。要迫使互联网流量也走 NAT 网关,需要修改 VPC egress 设置:

  1. 打开 Encore Cloud 控制台,进入你的环境;
  2. 打开Infrastructure(基础设施)标签页;
  3. 找到 Cloud Run 配置,将VPC egress(VPC 出站流量)设为All traffic(所有流量)
  4. 应用(Apply)该变更。

生效机制:控制台中发起的基础设施变更,会作为部署的一部分被应用。因此修改完成后需要触发一次新的部署(或推送一次提交)才能使设置生效。Encore Cloud 的部署遵循"基础设施预置 → 部署容器 → 清理未用资源"的三阶段流程,详见 Managing Infrastructure 中的部署阶段说明。

验证配置是否生效

部署完成后,从你的任意一个服务发起一次出站请求,访问一个会回显调用方 IP 地址的服务(例如https://api.ipify.org),确认返回的 IP 与你预留的静态 IP 一致。

一个简单的做法是在 Encore 服务中暴露一个端点,返回外部服务回显的 IP,或直接在日志中观察:

// 在某个服务中发起出站请求并记录响应 resp, err := http.Get("https://api.ipify.org") // 读取响应体即为当前出站 IP

也可以从服务所在环境的日志中查看api.ipify.org这类探测请求的返回内容,逐环境确认All traffic配置已生效。

使用注意事项

所有出站流量都会受影响

将 egress 设为All traffic后,每一条出站请求——包括对公共 API 的调用——都会经过 VPC 与 NAT 网关。这意味着:

  • 会产生NAT 数据处理费用(NAT data processing charges),这部分成本需要纳入预算;
  • NAT 网关会成为你所有互联网访问的单点依赖,一旦网关或相关网络组件异常,服务将失去全部外网连通能力。

每个区域与网络需要一个网关

Cloud NAT 是区域级资源。如果一个环境横跨多个区域部署,需要在每个区域分别创建绑定了该区域预留静态 IP 的网关。

高并发场景需要多个静态 IP

单个 NAT IP 对"发往同一目标地址"的并发连接数存在上限。如果你的应用有大量并发出站连接(例如高吞吐的数据回传、Webhook 推送等),建议为网关分配多个预留静态 IP,并在第三方处将所有这些 IP 全部加入白名单。

手动创建的资源会被保留

Encore Cloud不会覆盖它不管理的资源。你在 GCP Console 手动创建的 Cloud NAT 网关与预留静态 IP,在后续任何部署中都不会被改动或删除。这得益于 Encore Cloud 的 drift-aware(漂移感知)更新策略:部署前它会拉取资源当前属性,若检测到在控制台手动修改造成的漂移,会将其视为"当前状态"更新内部表示,而非强制回写(详见 Infrastructure Configuration 中关于控制台手动配置的说明)。

GKE 环境特殊说明:如果你的环境运行在GKE(Google Kubernetes Engine)而非 Cloud Run上,VPC egress 设置并不适用——Kubernetes Pod 本身已经通过 VPC 网络出站。此时应检查该网络是否已存在 Cloud NAT 网关,若存在,只需给现有网关附加预留静态 IP即可,切勿重复创建第二个网关。

从源码与文档看实现依据

以上操作与 Encore Cloud 的 GCP 基础设施模型完全一致,相关依据可在本仓库文档中交叉印证:

  • 环境级项目与 VPC 隔离:Encore Cloud 为每个环境预置独立 GCP 项目与私有网络,所有资源只能通过 VPC 内部通信,见 GCP 基础设施文档。Cloud NAT 正是在这个 VPC 内为私有网络提供受控的出站路径。
  • 部署阶段与变更生效方式:基础设施变更随部署分三阶段应用(预置 → 部署 → 清理),这与文档中"修改 VPC egress 后需触发新部署"的要求一致,见 Managing Infrastructure 的 Deployment Phases 一节。
  • 手动配置不被覆盖:Encore Cloud 采用 PATCH 式更新、避免全量同步、漂移感知更新三大策略,保证控制台手动创建的 NAT/静态 IP 在后续部署中安全保留,见 Infrastructure Configuration。
  • 与 AWS 侧的对称设计:Encore 在 AWS 侧同样内置了出站网络组件——VPC 公有子网内包含 Internet Gateway 与 NAT Gateway,为私有子网中的计算实例提供出站通路,见 AWS 基础设施文档。GCP 侧之所以需要手动配置 Cloud NAT,正是因为 Cloud Run 默认直连 Google IP 池,而非像 AWS 私有子网那样天然走 NAT。

总结

步骤操作位置关键动作
1aGCP Console(环境专用项目)VPC network > IP addresses,预留Regional静态外部 IP
1bGCP Console(环境专用项目)Network services > Cloud NAT,创建PublicNAT,绑定该静态 IP,选择 Encore 环境的 VPC 与区域
2Encore Cloud 控制台Infrastructure 标签页 → Cloud Run 配置 →VPC egress = All traffic→ Apply
3触发部署推送提交或手动部署,等待三阶段部署完成
4验证从服务发起出站请求,用api.ipify.org等回显服务确认源 IP 为预留静态 IP

配置完成后,你的 Encore 应用(GCP Cloud Run)便拥有可被第三方白名单、可审计的固定出站 IP;同时请谨记"All traffic 影响全部出站流量、NAT 为区域级资源、高并发需多 IP、手动资源永不被覆盖"这四条核心注意事项,以便在生产环境中合理规划成本与高可用性。

【免费下载链接】encoreThe infrastructure platform for the intelligence era项目地址: https://gitcode.com/GitHub_Trending/encor/encore

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询