Public Cloud Run Service 与仅限内部的入口 Cloud Run Service 通信

问题描述

我必须进行以下设置:

  • 使用 CIDR 范围“10.8.0.0/28”(已编辑)的 VPC 网络 VV 的 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。 egressingress 设置为 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 的日志,但没有看到任何原因。

解决方法

需要进行以下更改才能运行:

  1. 按照此 guide 为服务 B 创建静态出站 IP
  2. 删除之前创建的 VPC 连接器(创建时使用 CIDR 范围而不是指南中的子网)
  3. 更新 Cloud Run Service B 以使用在第 1 步中创建的 VPC 连接器

由于删除静态出站 ip 会破坏设置,我假设 azure 服务需要一个静态 ip 进行通信。