繁体   English   中英

GCP HTTP/S 负载平衡器路由规则

[英]GCP HTTP/S Load Balancer Routing Rules

我很难弄清楚如何实现我正在尝试设置的应用程序所需的路由/重写规则,非常感谢任何帮助。

我有一个简单的 web 应用程序在三个云计算 VM 实例组上运行。 该应用程序在每个 VM 上运行良好(每个实例组单个 VM)。 除了标识实例的 HTML 中的一个小细节外,该应用程序是相同的。

负载均衡器在使用路径将流量路由到实例方面工作正常,但我需要为应用程序的每个用户提供一个唯一的 URL。我真正想要实现的是这样的:

Url 路径 路线到 实例组
/青铜/总结 /概括 1个
/银/总结 /概括 2个
/黄金/总结 /概括 3个

这样每个用户都会点击他们自己的 URL 路径,LB 将请求路由到运行该用户应用程序版本的特定实例组上的 /summary。

我看不到如何使用基本主机和路径规则视图进行设置。 使用高级主机和路径规则视图似乎提供了更多可能性,我发现了这个资源: https://cloud.google.com/load-balancing/docs/https/setting-up-url-rewrite

但是,我不确定如何编写规则。 链接中给出的示例没有帮助的是,使用的目标是存储而不是实例组 (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 应用程序上有一条类似“/bronze/summary”的路线,那么它会起作用,但实施起来会非常痛苦。

有人可以指导我正确的方向吗?

谢谢!!

更新

在对文档进行了大量的混乱和挣扎之后,我想出了这个:

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: /

它似乎做我需要的。

我现在所做的就是克隆模板应用程序并作为本地构建和运行的一部分(在 VM 本身上),我正在更新导航部分以前缀为“/bronze/”、“/silver/”或“ /gold/' 一切似乎都运行良好。

不得不说这方面的文档对于新手来说很难,可以用更多简单的例子来做。

希望这对某人有用。

我不相信你能做到这一点。 负载均衡器重写没有能力重写 URL 以删除中间的内容。 我几乎必须做同样的事情(除了 Cloud Run 目标而不是 Compute Engine),我所做的是在另一个 Cloud Run 实例(也在负载均衡器后面)中设置一个 HAProxy,重写 URL,设置一个 header,并且然后将请求发送回负载均衡器。 我将负载均衡器配置为将没有 header 的请求发送到 HAProxy,否则使用基于 header 重写的 URL 路由请求。

可能有更好的方法,但这就是我想出的方法,而且似乎效果很好。 我不得不使用 GCP 负载均衡器,因为我使用 Cloud Run 实例作为后端(通过无服务器 NEG),但如果您使用的是 GCE 后端,大概您也可以使用不同的负载均衡器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM