将来自 cloudrun 服务的请求镜像到其他 cloudrun 服务

时间:2021-07-14 09:02:04

标签: nginx google-cloud-platform google-cloud-run

我目前正在开展一个使用 Google Cloud 的项目。在云端,我们使用 CloudRun 来提供我们的服务。其中一项服务相当复杂,有许多不同的配置选项。为了验证这些配置如何影响结果质量并评估服务更改的质量,我想按以下步骤进行:

  • 除了现有服务之外,我还部署了另一个包含更改的服务实例
  • 我镜像所有传入请求并让两个服务处理它们,只返回初始服务的响应,但存储两个服务的响应

这使我能够对两种服务之间的差异进行详细评估,而不必向用户提供可能更糟糕的响应。

为了实现,我设置了一个反映请求的 NGINX。这也部署为 CloudRun 服务。这现在接受所有请求并负责身份验证。原始服务和镜像版本已配置为只能在内部访问,因此应通过 VPC 网络访问。

我已经为这些部件的配置尝试了所有可能的组合,但我总是收到 403 或 502 错误。

我尝试将 NGINX 服务设置为来自该服务的 HTTP 和 HTTPS 路由,并且我尝试了所有 VPC 连接器设置。当我将服务的入口设置为 ALL 时,如果我在 NGINX 中使用 HTTPS 和端口 443 配置服务,它会完美运行。一旦我将入口设置为 Internal,我就会收到 HTTPS -> 403 和 HTTP -> 502 错误。

有没有人有这方面的经验,可以给我如何解决这个问题的提示?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您的 Cloud Run 服务可在内部访问(入口控制设置为仅限内部),您需要从您的 VPC 执行您的请求。

因此,正如您所做的那样,您在 NGINX 服务上插入了无服务器 VPC 连接器。

设置正确。现在,当您将所有出口流量(而不仅仅是私有流量)路由到您的 VPC 连接器时,为什么它会起作用?

实际上,Cloud Run 是一种公共资源,具有公共 URL,即使您将入口设置为内部。此参数表示“流量必须到达 VPC”,而不是“我已使用私有 IP 连接到 VPC”。

因此,要转到您的 VPC 并访问公共资源(您的云运行服务),您需要将所有流量路由到您的 VPC,甚至是公共的。