【发布时间】:2021-07-22 03:40:27
【问题描述】:
我必须进行以下设置:
- 一个 VPC 网络
V和一个用于V的 VPC 连接器,使用 CIDR 范围“10.8.0.0/28”(已编辑) - 以下服务 A 和 B 通过 Connector 连接到 VPC
- Cloud Run
Service A:此服务设置为ingress=internal以保护 API。其egress设置为或private-ranges-only - Cloud Run
Service B:此服务为另一个Service C within the Azure Cloud提供 API。 B 还需要访问Service A的API。egress和ingress设置为all以通过 VPC 连接器路由所有传出流量,并允许在内部Service A上成功请求。
当前问题如下:来自Service C -> Service B 的请求以 504 网关超时返回。如果Service B 的出口更改为private-ranges-only,则服务 C 的请求成功,但作为回报 B 的所有请求 -> A 返回 403 Forbidden,因为流量不再通过 VPC 连接器路由,因为 Cloud Run 不允许私有-范围将流量发送到服务 A(afaik)。 Cloud Run 服务对其他 Cloud Run 服务的所有请求当前都发送到“*.run.app”网址。
我无法想出一个可行且方便的解决方案来解决此设置。有没有解释为什么Service B 中的egress=all 会导致来自服务C 的请求出现网关超时。我尝试跟踪来自VPC 的日志,但没有看到任何原因。
【问题讨论】:
-
当服务 C 调用你的服务 B 时,你在做什么?您是否执行外部呼叫?
-
@guillaumeblaquiere 服务 B 在服务 C 的初始 POST 上响应欢迎消息。在进一步的交互中,它可能会调用服务 A 并向服务 C 发送消息。
-
这不正常,让我测试一下(也许明天)我会回来的。对源自 Cloud Run 服务的流量实施出口控制,而不是响应先前的请求。
-
我假设从服务 C 到服务 B 中的端点的 POST 可以到达,因为服务 B 的入口 = 全部,但在出口时,它通过 VPC 连接器路由,并且在 VPC 中以某种方式“丢失”网络,无法返回服务 C。因此网关超时错误。但我在网络主题方面不是很有经验。
-
不可能在我身边重现这种情况。它可能会在您的解释中遗漏一些细节,或者它是一个暂时的错误,现在已修复。您能否再试一次,或提供更多详细信息(或在没有太多更改的情况下尝试另一个项目/尝试您的 VPC 配置、路由等)
标签: google-cloud-run network-traffic http-status-code-504