目前,我正在开发部署到 Google 云平台 GKE 集群的 nodejs 应用程序。此应用程序需要调用只能通过 VPN 访问的第三方 API,因此我必须建立到第三方 API 提供商网络的站点到站点 VPN。
我知道可以使用 GCP Cloud VPN 实现站点到站点 VPN,并且我以前也有使用 GCP Cloud VPN 的经验。但对我来说,问题是这个第三方 API 只允许我的 VPC 中的一个 IP 地址访问他们的网络,这是一个问题,因为 GKE 集群中的所有 pod 都有自己的临时 IP。
问题是,我如何才能使从 GKE 集群到第三方 API 的传出 API 调用仅来自一个 IP 地址,以便第三方提供商管理员可以将这个单个 IP 地址列入白名单以访问他们的 API?
我正在考虑使用一个 Linux VM 作为 nat 路由器,这样对第三方 API 的 API 调用将首先通过此 nat 路由器,然后从 nat 路由器到 Cloud VPN 网关。但是当我查看 VPC 路由表时,我看不出如何实现此方法,因为在 VPC 路由表中我无法指定特定网段作为源。我只能设置目标和下一跳,这将影响 VPC 中的所有实例。
以下是查看我的 VPC 当前拓扑的链接,仅供参考:
这是可以在 GCP 中完成的事情吗,或者也许我以错误的方式看待了这个问题?
谢谢
答案1
如果它是一个 HTTP(S) API,那么您可以考虑使用 HTTP 代理而不是 NAT 路由器;只需通过相关代码就可以以更有针对性的方式使用它(仅设置在必要的代码路径中使用的代理)。
如果没有,那么看看是否可以专门为相关 pod 添加路由规则。假设是一个 Linux 容器,使用命令ip
(可能必须添加它,具体取决于容器映像的精简程度)将流量路由到实际目的地via
NAT 路由器:
ip route add TARGET_IP/32 via NAT_ROUTER_IP
如何将其纳入容器启动将在很大程度上取决于实际的图像,并且超出了本问题的讨论范围。