首页 > 解决方案 > Google Cloud Run(完全托管) - 容器可以重定向到另一个容器吗?

问题描述

背景:尝试在 Google Cloud Run(完全托管)中运行Vault,并尝试确定是否可以设置 HA。Vault 需要单个活动节点(容器),并且需要转发或重定向到备用节点(容器)的入站请求。

转发意味着另一个端口上的侧连接(即 tcp/8200 上的客户端和 tcp/8201 上的 pod-to-pod)。这可能吗,我在文档中看不到任何关于此的内容。

重定向意味着备用节点(容器)需要 307 重定向到活动节点的地址。这可以是 Cloud Run url 或 pod 特定的 url。如果是 Cloud Run url,那么负载均衡器可以直接将其发送回备用节点(循环);不好。它需要是 pod url。Cloud Run“代理”(不知道该怎么称呼它)是否能够接受客户端请求,但会从 pod 到 pod 进行内部重定向以到达活动 pod?

标签: google-cloud-platformgoogle-cloud-run

解决方案


您似乎对 Cloud Run 的编程和流量服务模型不熟悉。我建议查看文档和https://github.com/ahmetb/cloud-run-faq以获得一些答案。

简要回答您的一些观点:

  • Cloud Run 上运行的容器只能向外界公开 1 个端口号
  • Cloud Run 应用只能通过 HTTPS(包括 gRPC)协议通过端口 :443 访问。
  • 您无法确保在 Cloud Run 上一次运行 2 个容器(这不是它的设计目的,这是 Kubernetes 或 VM 更适合的东西)。
  • 根据定义,Cloud Run 用于运行无状态 HA 应用
  • Cloud Run 中没有“pod URL”之类的东西。一个应用程序的多个副本将具有相同的地址。
  • 正如您所说,Cloud Run 无法区分同一应用的多个实例。如果容器将请求转发到它自己的 URL,它最终可能会再次收到请求。

最好的办法是将这两个容器作为单独的应用程序部署到 Cloud Run,因此它们具有不同的 URL 和不同的生命周期。您可以将“最大实例数”设置为 1,以确保这些 VaultService1 和 VaultService2 永远不会获得额外的副本。


推荐阅读