问题描述
我必须进行以下设置:
- 使用 CIDR 范围“10.8.0.0/28”(已编辑)的 VPC 网络
V
和V
的 VPC 连接器 - 以下服务 A 和 B 通过连接器连接到 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”网址。
我想不出可能且方便地修复此设置的想法。有没有解释为什么 egress=all
中的 Service B
导致来自服务 C 的请求的网关超时。我尝试跟踪来自 VPC 的日志,但没有看到任何原因。
解决方法
需要进行以下更改才能运行:
- 按照此 guide 为服务 B 创建静态出站 IP
- 删除之前创建的 VPC 连接器(创建时使用 CIDR 范围而不是指南中的子网)
- 更新 Cloud Run Service B 以使用在第 1 步中创建的 VPC 连接器
由于删除静态出站 ip 会破坏设置,我假设 azure 服务需要一个静态 ip 进行通信。