外部负载均衡路径规则与Cloud Run服务配合失效问题排查
解决Cloud Run负载均衡路径路由404问题
你的问题核心在于路径匹配规则覆盖不全,部分场景未被匹配,同时可能存在路径转发前缀未处理的情况,以下是具体修复方案:
1. 修正路径匹配规则
当前配置的prefixMatch: /api/*仅会匹配带斜杠后缀的路径(如/api/xxx),但无法匹配/api这个精确路径,这就是直接访问example.com/api报404的主要原因。
将匹配规则修改为覆盖所有以/api开头的路径:
defaultService: projects/example-proj/global/backendServices/fun1 name: matcher1 routeRules: - matchRules: - prefixMatch: /api priority: 1 routeAction: weightedBackendServices: - backendService: projects/example-proj/global/backendServices/fun2 weight: 100
prefixMatch: /api会匹配/api和/api/xxx两类路径,覆盖你的访问场景。
2. 路径重写(关键可选配置)
如果第二个Cloud Run服务(fun2)的接口是基于根路径(如/而非/api),负载均衡会把完整路径(如/api/users)转发给服务,而服务中没有对应路径就会触发404。此时需要添加路径重写,剥离前缀:
defaultService: projects/example-proj/global/backendServices/fun1 name: matcher1 routeRules: - matchRules: - prefixMatch: /api priority: 1 routeAction: urlRewrite: pathPrefixRewrite: "/" weightedBackendServices: - backendService: projects/example-proj/global/backendServices/fun2 weight: 100
配置后,/api/users这类请求会被重写为/users转发给fun2,适配服务的路径结构。
3. 验证优先级配置
GCP负载均衡中priority数值越小优先级越高,默认服务未显式设置优先级时为最低优先级(数值最大),你当前设置的priority:1不会被默认服务覆盖,无需调整。
4. 检查服务访问权限
确认第二个Cloud Run服务(fun2)已配置允许负载均衡后端服务访问,未设置限制访问的权限策略。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

