【问题标题】:Public Cloud Run Service communication with internal-only ingress Cloud Run Service公共 Cloud Run Service 与仅限内部的入口 Cloud Run Service 通信
【发布时间】: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。 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”网址。

我无法想出一个可行且方便的解决方案来解决此设置。有没有解释为什么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


【解决方案1】:

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

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

由于删除静态出站 ip 会破坏设置,因此我假设 azure 服务需要静态 ip 才能与之通信。

【讨论】:

  • 请考虑接受您自己的答案,以便有类似问题的其他社区成员可以使用您的解决方案
猜你喜欢
  • 2021-04-28
  • 2021-05-14
  • 2021-05-26
  • 2019-10-14
  • 1970-01-01
  • 2022-12-26
  • 2021-05-17
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多