如何允许 public Google 运行 实例与 *private* Google 运行 实例通信?

How to allow a public Google Run Instance to communicate to a *private* Google Run Instance?

我必须 docker 在 google 运行 上 运行 图片 A 和 B 运行。 A 需要小的内存占用和缓慢的扩展(它是前端),B 需要高内存足迹和负载下的高扩展(它是后端)。

我已将 A public(所有用户都可以触摸 :80 )和 B private(我没有选中复选框)。 由于 google 云实例没有静态 IP 而有动态 IP URL,我怎样才能使 A "speak" 到 B(通过 http)同时保持 B 无法从野外访问?


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

这是一个非常糟糕的解决方案,因为可以从 google 的网络外部访问 B。

由于服务 B 是私有的(需要身份验证),服务 A 需要在对服务 B 的请求中包含 HTTP 授权 header。

header 看起来像这样:

Authorization: Bearer <replace_with_token

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

您仍然需要调用服务 B 的端点 URL (xxx.y.run.app)。这不会改变,除非您还实施自定义域。

云 运行 的一个很好的功能是当需要身份验证时,云 运行 代理会为您处理。代理位于 Cloud 运行 前面并阻止所有未经授权的请求。您的实例从未启动,因此在黑客试图通过时没有计费时间。

在我网站上的一篇文章中,我展示了如何在 Go 中生成身份令牌 (link). In this article using CURL (link) which is a three-part series. There are numerous articles on the Internet that explain this also. In another article, I explain how Cloud Run Identity works (link) and how Cloud Run Identity Based Access Control works (link)。

查看 --service-account 选项,该选项允许您设置用于标识的服务帐户 (link)。

云 运行 身份验证文档(link)。