在Google Cloud Run (gRPC/Python)上连接两个服务



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

然而,当我将入口设置为'只允许内部流量'('需要身份验证'仍然设置)时,我的服务无法再连接到它,并在日志中抛出权限拒绝错误:

status = StatusCode。PERMISSION_DENIED收到http2报头,状态:403">

我看不到被调用的服务上的任何日志,以指示它阻塞或接收任何东西,并且作为唯一改变的是入口设置,我假设我在服务是公共的时候工作的IAM用户的身份验证不是问题。

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

我现在放弃了。我不喜欢把我的内部服务公开,但是打开内部入口似乎行不通。

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

谢谢!

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

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

相关内容

  • 没有找到相关文章

最新更新