GCP全局负载均衡异常路由至新加坡而非曼谷Cloud Run实例
架构配置
- 前端:全局应用负载均衡器(Global Application Load Balancer,GALB),绑定自定义域名
- 后端:单一后端服务,包含多个Serverless NEG(网络端点组)
- 计算资源:Cloud Run服务部署在两个区域:
asia-southeast1(新加坡)和asia-southeast3(曼谷)
问题描述
本人位于曼谷,访问GALB的自定义域名时,流量始终被路由到新加坡(asia-southeast1)的Cloud Run实例,完全没有分发到本地曼谷(asia-southeast3)的节点。
已执行的排查操作
- 两个区域的Serverless NEG都已正确添加到同一后端服务中
- 测试了曼谷本地3家主流ISP的网络,所有请求都指向新加坡;甚至在GCP曼谷区域的VM内测试,结果依旧如此
- 直接访问Cloud Run默认的
.run.app域名,确认曼谷节点的延迟确实更低、速度更快;而GALB的延迟数据和新加坡节点加上代理开销的结果完全吻合
延迟测试结果(样本量:每个URL请求20次)
- 直接访问曼谷Cloud Run节点(
asia-southeast3):
PS C:\Users\[Username]\Desktop> .\latency.ps1 -Url "https://[masked-app-hash].asia-southeast3.run.app/openapi.json" -Count 20 Summary ------- Successful requests: 20/20 Min latency: 89.26 ms Average latency: 106.11 ms P50 latency: 103.72 ms
- 直接访问新加坡Cloud Run节点(
asia-southeast1):
PS C:\Users\[Username]\Desktop> .\latency.ps1 -Url "https://[masked-app-hash].asia-southeast1.run.app/openapi.json" -Count 20 Summary ------- Successful requests: 20/20 Min latency: 116.62 ms Average latency: 128.08 ms P50 latency: 121.8 ms
- 访问全局负载均衡器自定义域名:
PS C:\Users\[Username]\Desktop> .\latency.ps1 -Url "https://api.[masked-custom-domain].app/openapi.json" -Count 20 Summary ------- Successful requests: 20/20 Min latency: 127.31 ms Average latency: 138.2 ms P50 latency: 133.98 ms
请教问题
- 为什么GALB完全无视物理距离更近、延迟更低的
asia-southeast3区域NEG? - 较新的
asia-southeast3区域和GALB的边缘路由之间是否存在已知的控制平面限制? - 除了IAP配置或健康检查失败之外,还有哪些GCP侧的配置或指标会导致负载均衡器把100%流量从正常运行的本地Serverless NEG导去其他节点?
分析与排查建议
1. GALB无视曼谷节点的可能原因
- 检查后端服务的流量分发策略:默认是轮询(ROUND_ROBIN),但如果配置了基于容量的负载均衡或自定义权重,可能导致流量全走新加坡节点。
- 确认曼谷NEG的端点健康状态:即使Cloud Run实例正常,NEG与GALB的关联可能存在隐性故障,可在GCP控制台查看负载均衡器后端的端点状态。
- 验证DNS解析:确认自定义域名的DNS记录是否正确指向GALB,且曼谷本地的DNS缓存未导向旧的边缘节点。
2. asia-southeast3区域的潜在限制
曼谷属于较新区域,部分GALB边缘路由特性可能存在部署延迟。可查看GCP官方服务状态公告,确认该区域是否有过GALB相关的故障或功能限制通知;另外,边缘节点到曼谷Cloud Run的专用通道可能尚未完全开通,导致流量无法正常路由。
3. 其他可能的配置/指标问题
- 会话亲和性配置:如果开启了基于IP的会话亲和性,测试IP可能被长期绑定到新加坡节点,导致所有请求走同一区域。
- Cloud Run容量限制:若曼谷区域的Cloud Run实例因资源耗尽无法扩容,GALB会自动将流量转移到新加坡节点,可查看Cloud Run控制台的扩缩容历史和资源使用率。
- NEG关联状态:检查Serverless NEG的
endpointGroup状态,是否存在UNHEALTHY或PENDING的端点,NEG创建后可能需要时间被GALB完全识别。 - GALB访问日志:启用访问日志后,查看每条请求的
backend_target字段,可直接看到负载均衡器选择后端的原因,比如容量不足、路由策略匹配等。
内容的提问来源于stack exchange,提问作者curious_dev
相关产品推荐
相关产品推荐

