问题描述
- 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 负载均衡器分派请求。