IAP 强制负载均衡器到单个后端到 NGINX 到应用程序,或负载均衡器到多个后端到应用程序?

问题描述 投票:0回答:1
  • 一切都在 GCP 上
  • 通过 Cloud Run 实例访问各种工具和应用程序
  • 这些都应该受到 IAP + IAM 的保护,因此负载均衡器的设置需要适当的后端配置
  • 我希望我的(通常是 Flask 应用程序+前端)工具和应用程序尽可能不了解更通用的 URL 结构。 (即,可能会 ping
    https://domain.name/app1
    ,它将路由到相应的 Cloud Run 实例。该实例可能会从
    /static
    请求某些内容,但
    /static
    需要重新路由为
    https://domain.name/app1/static
    而不是
    https://domain.name/static

据我所知,可能有两种明显的方法可以做到这一点?

  1. 指向 NGINX 的单个 GCP 后端。访问给定 URL 受 IAP 保护。然后,NGINX 对 Google 的元数据服务器执行 ping 操作以获取令牌(IAM 部分),并将请求 + 令牌路由到适当的 Cloud Run 实例。 NGINX 将制定规则,根据
    /static
    app1/static
    等请求代理回
    http_referrer
  2. 完全跳过 NGINX。每个 Cloud Run 实例都有一个与其关联的 GCP 后端,并且负载均衡器执行路由(问题是我不知道如何执行上述路由)。

工具和应用程序经常添加、删除和更改。我希望应用程序代码尽可能不知道 URL 结构。我更喜欢 (2),特别是因为在 (1) 中,NGINX 实例成为单点故障。

或者,也许最好的方法实际上是 (2),并且在每个应用程序中都有

{base}/static
。但我真的很想例如移动应用程序。从
in_dev/app1
tools/app1
w.o.必须更改应用程序代码中的 base_URL。

nginx google-cloud-platform architecture backend url-routing
1个回答
0
投票

要实现此目的,您需要利用负载均衡器的 URL 重写。这将允许您在将流量引导到后端服务之前更改主机、路径或两者。

假设一切都已设置完毕,您只需编辑负载均衡器的路由规则即可。

  1. 编辑负载均衡器并选择路由规则。

  2. 在模式部分,选择“高级主机和路径规则”。

  3. 在 YAML 文件中,为您的 URL 请求创建一个带有“matchRules”的“rouetRules”,以区分您的后端服务。

  4. 通过使用“pathPrefixRewrite”创建“urlRewrite”来指示您想要的路径。

下面的示例 YAML 代码:

name: matcher
routeRules:
- description: service
  matchRules:
  - prefixMatch: /foo                 # Request path that need to be rewrite.
  priority: 1
  service: projects/example-project/global/backendServices/<your-backend>
  routeAction:
    urlRewrite:
      pathPrefixRewrite: /foo/bar      # This will be your desired path.

如需更全面的指南,您可以关注这篇文章

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