GCP HTTP/S负载均衡URL路由与重写规则配置求助
解决Cloud Load Balancer路径路由与重写问题
我在部署一个运行在3个Cloud Compute VM实例组上的Web应用,每个实例组各含1台VM,应用仅HTML标识细节不同。需要实现带前缀的URL路由到对应实例组的指定路径,具体需求如下:
| URL路径 | 转发到后端路径 | 实例组 |
|---|---|---|
| /bronze/summary | /summary | 1 |
| /silver/summary | /summary | 2 |
| /gold/summary | /summary | 3 |
即用户访问带专属前缀的URL后,负载均衡器要自动移除前缀,将请求转发到对应实例组的/summary路径。
初始尝试用基础主机与路径规则视图配置无法实现前缀移除,高级视图官方示例多针对存储服务,不适用VM实例组。初始配置如下:
defaultService: projects/<project-name>/regions/europe-west2/backendServices/backend-1 name: path-matcher-1 pathRules: - paths: - /summary service: projects/<project-name>/regions/europe-west2/backendServices/backend-1 - paths: - /bronze/summary service: projects/<project-name>/regions/europe-west2/backendServices/backend-1 - paths: - /silver/summary service: projects/<project-name>/regions/europe-west2/backendServices/backend-2 - paths: - /gold/summary service: projects/<project-name>/regions/europe-west2/backendServices/backend-3
这个配置能实现路由,但无法移除路径中的/bronze等前缀,若在Web应用中添加对应路由过于繁琐。
经过反复测试和查阅文档,最终通过添加routeAction配置实现了路径重写,满足需求的配置如下:
defaultService: projects/<project-name>/regions/europe-west2/backendServices/backend-1 name: path-matcher-1 pathRules: - paths: - /bronze/* service: projects/<project-name>/regions/europe-west2/backendServices/backend-1 routeAction: urlRewrite: pathPrefixRewrite: / - paths: - /silver/* service: projects/<project-name>/regions/europe-west2/backendServices/backend-2 routeAction: urlRewrite: pathPrefixRewrite: / - paths: - /gold/* service: projects/<project-name>/regions/europe-west2/backendServices/backend-3 routeAction: urlRewrite: pathPrefixRewrite: /
(注:原配置中/silver/*对应的service路径缺失了/,已修正避免配置错误)
目前该配置可正常工作:用户访问/bronze/summary时,LB会将路径重写为/summary并转发到实例组1,其他前缀路由逻辑同理。同时通过克隆模板应用,在VM本地构建阶段更新导航前缀,整体运行流程顺畅。希望这个配置能帮到遇到同样问题的开发者,毕竟官方针对VM实例组的新手友好示例确实不足。
内容的提问来源于stack exchange,提问作者Indrid
相关产品推荐
相关产品推荐

