GCP:负载均衡器重写路径

问题描述 投票:0回答:2

我正在为全球外部 HTTP(S) 负载均衡器设置流量管理。我有两个后端 Cloud Run 服务,

serverless-lb-www-service
serverless-lb-api-service
,我想从同一 IP/域提供服务。

我想这样配置它们:

example.com
->
serverless-lb-www-service

example.com/api
->
serverless-lb-api-service

我可以使用简单的路由规则来服务流量半预期:

路径 后端
/* 无服务器-lb-www-服务
/API 无服务器-lb-api-服务
/api/* 无服务器-lb-api-服务

但是,我遇到了一个问题,我尝试访问不是根 API 端的端点,例如

example.com/api/test
。我总是能看到我所期望的回应
example.com/api

我相信这与我的API(运行express.js)接收路径

/api
有关,而它期望从那里提供该路线
/test
。我想我可能需要设置重写以在访问 API 时删除
/api

任何帮助将不胜感激。谢谢

更新

我可以确认 API 中记录的请求都带有

/api
前缀。我可以通过更改所有 API 路由处理程序以在生产环境中使用
/api
前缀来解决我的问题。然而,我仍然宁愿通过路径重写来做到这一点,这样应用程序代码在所有环境中都是相同的

google-cloud-platform network-programming load-balancing gcp-load-balancer
2个回答
1
投票

您可以自定义主机和路径规则。您可以通过此链接按照步骤操作。它还使用 Cloud Run 服务,可能会帮助您解决重写路径问题。

注意:如果链接不会重定向并显示“自定义主机和路径规则”步骤,请一直向下滚动。


0
投票

您可以使用包含 URL 重写的 URL 映射来完成您想要的任务。

这是您的用例的示例,其中匹配

/api/test
的路由将被重写到您的 api 服务,就像
/test
:

defaultService: projects/xxx/global/backendServices/your-default-backend
name: path-matcher
routeRules:
- matchRules:
  - prefixMatch: /
  priority: 1
  service: projects/xxx/global/backendServices/serverless-lb-www-service
- matchRules:
  - pathTemplateMatch: /api/{path=**}
  priority: 2
  service: projects/xxx/global/backendServices/serverless-lb-api-service
  routeAction:
    urlRewrite:
      pathTemplateRewrite: /{path}

这里是 URL 映射文档的链接:https://cloud.google.com/load-balancing/docs/url-map-concepts

© www.soinside.com 2019 - 2024. All rights reserved.