【问题标题】:Connecting two services on Google Cloud Run (gRPC/Python)在 Google Cloud Run (gRPC/Python) 上连接两个服务
【发布时间】:2021-05-05 11:34:18
【问题描述】:

我刚刚浪费了今天的大部分时间来尝试使用 gRPC 和 Python 连接部署在 Google Cloud Run 上的两个微服务。事实证明,如果我为我尝试调用的服务打开触发器入口以“允许所有流量”和“需要身份验证”,我可以从其他服务连接到它。

但是,当我将入口设置为“仅允许内部流量”(仍然设置“需要身份验证”)时,我的服务无法再连接到它并在日志中引发 Permissions Denied 错误:

status = StatusCode.PERMISSION_DENIED details = "收到状态为 403 的 http2 标头"

我在被调用的服务上看不到任何日志以表明它正在阻止或接收任何内容,并且由于唯一更改的是入口设置,我假设我在使用 IAM 用户时进行了身份验证服务是公开的不是问题。

在入口文档 (https://cloud.google.com/run/docs/securing/ingress) 中,我看到一条说明它只允许 VPC 流量,因此我开始创建 VPC 网络和无服务器 VPC 连接器并将它们附加到这两个服务(并将 IAM 服务帐户更新为允许访问连接器) - 仍然遇到同样的问题。

我现在要放弃了。我不喜欢公开我的内部服务的想法,但打开内部入口似乎不起作用。

有没有人设法在 Google Cloud Run 上连接两个服务,只有一个内部流量,如果是这样,我需要做什么才能让它工作??

谢谢!

【问题讨论】:

  • 您在哪个服务上添加了无服务器 VPC 连接器?
  • 我向两者都添加了 VPC 连接器。所以我的架构是: * Webapp 服务 - 所有流量,无身份验证,使用 VPC 连接器“内部” * 后端服务 - 仅限内部,使用身份验证,相同的 VPC 连接器“内部”连接到同一 VPC。希望有帮助!

标签: google-cloud-run


【解决方案1】:

在您的前端 Cloud Run 服务中,您需要放置一个 VPC 连接器并将所有流量路由到它(出口 = 全部)。在后端服务上,您不需要无服务器 VPC 连接器。

更进一步,即使您将入口设置为内部,也始终可以从互联网访问 Cloud Run。事实上,有一个内部规则检查请求元数据(谷歌内部网络内部)以验证流量是否来自您的项目 VPC。由于它是可公开访问的,因此您需要将所有出口流量路由到 VPC,否则公共访问不会通过您的 VPC,您会得到 403。

【讨论】:

  • 成功了!我不得不说基于文档(我昨天广泛阅读了几个小时)我永远不会理解或得到这个解决方案,肯定会建议使用如何设置它的示例更新文档,也使用 Python gRPC 作为那也是一种痛苦。感谢您的回答,现在松了一口气....
  • 当你知道它是如何在幕后工作时很明显,文档作者不会想到可以有不同背景的人(因为以前的经历,以前的云......) .无论如何,很乐意提供帮助:)
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2021-05-20
  • 2020-05-27
  • 1970-01-01
  • 2020-12-13
相关资源
最近更新 更多