如何使用 Google Cloud HTTP(S) 负载平衡器在两个 Cloud Run 服务之间逐步进行流量迁移

问题描述

我已经使用以下内容设置了外部 HTTP(S) 负载平衡器:

  • 2 个无服务器 NEG,每个 NEG 指向各自区域中的不同 Cloud Run 服务
  • 1 个后端服务,使用 2 个 NEG 作为 2 个后端
  • 1 个将所有内容发送到后端服务的主机和路径规则
  • 1 个 HTTPS 前端指向主机和路径规则

此时,我注意到流量被路由到离发出请求的客户端区域最近的 Cloud Run 服务。

我想将其更改为在第 1 天将 100% 的流量路由到一个 Cloud Run 服务,在第 2 天将 50% 的流量路由到另一个 Cloud Run 服务,并在第 3 天将 100% 的流量路由到另一个 Cloud Run服务。

目前尚不清楚外部 HTTP(S) 负载平衡器是否可以提供帮助。如果可以,目前还不清楚是否应该在后端服务或主机和路径规则中完成。

解决方法

Google Cloud 负载平衡器不支持外部 HTTP(S) 负载平衡的加权/基于百分比的负载平衡。这在 https://cloud.google.com/load-balancing/docs/features#load_balancing_methods 中列出。

也许我需要创建 2 个后端服务,每个指向一个 NEG?

是的,如果外部 HTTPS GCLB 支持,您会这样做。您需要为每个无服务器 NEG 创建单独的 backendServices,并在 urlMap 对象的路由规则中列出 weightedBackendServices。您可以找到一个示例 here,但我相信它目前仅适用于以上链接的内部负载平衡器 (ILB)。

,

AFAIK,外部 HTTPS 负载均衡只能路由到最近的位置,而不能根据权重调度流量。

此外,您的解决方案需要部署在 2 个不同的区域,因为您不能在同一后端服务中的同一区域中部署 2 个后端。

目前最简单的解决方案是使用 Cloud Run 流量拆分功能。将所有流量路由到同一个服务,然后让 Cloud Run 负载均衡器分派请求。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...