如何解决在 Google Cloud Run (gRPC/Python) 上连接两个服务
今天我花了大部分时间尝试连接部署在 Google Cloud Run 上的两个微服务,使用 gRPC 和 Python。事实证明,如果我打开我尝试调用的服务的触发器入口以“允许所有流量”和“需要身份验证”,我可以从其他服务连接到它。
然而,当我将入口设置为“仅允许内部流量”(仍然设置“需要身份验证”)时,我的服务无法再连接到它,并在日志中抛出“权限被拒绝”错误:
status = StatusCode.PERMISSION_DENIED details = "收到状态为 403 的 http2 标头"
我看不到正在调用的服务上的任何日志以表明它正在阻止或接收任何内容,并且由于唯一更改的是入口设置,因此我假设我正在使用 IAM 用户进行身份验证服务是公开的不是问题。
在入口文档 (https://cloud.google.com/run/docs/securing/ingress) 中,我看到一条说明它只允许 VPC 流量,因此我着手创建 VPC 网络和无服务器 VPC 连接器并将它们附加到这两个服务(并更新 IAM 服务帐户以允许访问连接器) - 并且仍然遇到相同的问题。
我现在放弃了。我不喜欢公开内部服务的想法,但打开内部入口似乎不起作用。
有没有人设法在 Google Cloud Run 上连接两个服务,只有一个内部流量,如果是这样,我需要做什么才能让它工作?
谢谢!
解决方法
在您的前端 Cloud Run 服务中,您需要放置一个 VPC 连接器并将所有流量路由到它(出口 = 全部)。在后端服务上,您不需要无服务器 VPC 连接器。
更深入地讲,即使您将入口设置为内部,也始终可以从 Internet 访问 Cloud Run。事实上,有一个内部规则可以检查请求元数据(Google 内部网络内部)以验证流量是否来自您的项目 VPC。并且因为它是可公开访问的,所以您需要将所有出口流量路由到 VPC,否则公共访问不会通过您的 VPC 并且您会收到 403。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。