如何允许公共Google Run实例与*私有* Google Run实例通信?

时间:2019-06-21 22:17:21

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

我必须在Google run上运行docker镜像A和B。 A需要较小的内存占用空间和较慢的扩展速度(这是前端),而B需要较高的内存占用空间并在负载下需要较大的扩展性(这是后端)。

我将A设为公开(allUser可以触摸:80),将B设为私有(我没有选中此复选框)。 由于Google云端实例没有静态IP,而是动态URL,如何使A(通过http)对B“说话”,同时又使B无法从野外访问?


现在,我发现的唯一解决方法是为allUser打开HTTP端口,并为B使用子域名(例如b.my.app),然后从A调用“ http://b.my.app”。 / p>

这是一个非常糟糕的解决方案,因为B可以从Google网络的外部进行触摸。

1 个答案:

答案 0 :(得分:1)

由于服务B是私有的(需要身份验证),因此服务A将需要在对服务B的请求中包括HTTP授权标头。

标题看起来像这样:

Authorization: Bearer <replace_with_token

令牌是OAuth 2.0身份令牌(不是访问令牌)。用户凭据或服务帐户的IAM成员电子邮件地址将以角色roles/run.invoker添加到服务B。

您仍然需要调用服务B的终结点URL(xxx.y.run.app)。除非您也实现自定义域,否则这不会改变。

Cloud Run的一个不错的功能是,当需要身份验证时,Cloud Run Proxy会为您处理。代理位于Cloud Run的前面,并阻止所有未授权的请求。您的实例永远不会启动,因此在黑客试图穿越时没有计费时间。

在我网站上的一篇文章中,我演示了如何在Go(link)中生成身份令牌。在本文中,使用CURL(link),这是一个由三部分组成的系列。互联网上有许多文章对此进行了解释。在另一篇文章中,我解释了云运行身份如何工作(link)和基于云运行身份的访问控制如何工作(link)。

查看--service-account选项,该选项可让您设置用于身份验证的服务帐户(link)。

Cloud Run Authentication文档(link)。