【发布时间】:2021-04-14 08:30:15
【问题描述】:
我有一个在 Google App Engine (flex) 上运行的 python (flask) 应用程序;应用程序受 GAE 防火墙保护,其中:
- 默认规则是“拒绝”所有入口
- 有一个允许流量来自的 IP 地址白名单。
我在 Cloud Run(完全托管)上部署了一些微服务:
- 接收来自 GAE 应用的请求(例如繁重任务)
- 将他们处理的任何结果作为 http 请求发送回 GAE 应用程序中的处理程序/端点
因此,GAE 应用程序是与客户端交互的主要点和繁重任务的调度程序,而这些任务的处理由微服务执行。我已经设置了 Cloud Run 托管服务的static outbound IP address,它可以正常工作,并且流量按照文档中的要求通过 NAT 网关路由。相应的 NAT IP 地址在防火墙白名单中。
问题是防火墙仍然不允许 Cloud Run >>> GAE 应用程序请求以 403 状态反弹(当然,如果我将默认防火墙规则更改为“允许”,流量就会通过)。如果我在 GCE VM 上的 docker 容器中托管相同的微服务,并使用像 this 这样的静态 IP 地址,那么一切都会完美无缺。这让我假设,尽管 Cloud Run 出站流量确实是通过静态 IP 地址路由的,但当流量流向 GCP 外部的收件人时,当我尝试 ping 内部(项目方面)资产时,它仍然会通过一些动态选择的 IP(即静态 IP 解决方案根本不起作用)。不幸的是,日志没有显示 403-ed 尝试,所以我无法看到这些请求似乎来自哪些 IP 地址(从 GAE 的角度来看)。
我将非常感谢您提出如何解决此问题的想法,因为它大大降低了为 Cloud Run 提供静态出站 IP 地址的绝妙想法的价值。
【问题讨论】:
-
您的出口流量参数值是多少?运行命令
gcloud run services describe <service name>并分享Egress:值 -
所有流量都通过 Cloud NAT 路由 - `Egress: All, VPC connector: the_name_of_my_connector'
标签: google-app-engine google-cloud-platform firewall google-cloud-run static-ip-address