在同一主机上使用 traefik marathon 进行多路径路由

Multi path routing with traefik marathon on the same host

我有两个应用程序 运行 参加马拉松比赛。
我希望 web.myblog.com 路由到应用程序 1,web.myblog.com/app 路由到应用程序 2。

使用以下配置,所有流量都将流向应用程序 1。

App 1  
traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.myblog.com

App 2  
traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/app

我尝试使用否定匹配来排除应用程序 1 的 /app 路由,但据我了解,golang 不完全支持否定前瞻,结果在 traefik 中也不支持。

我也试过像这样为应用程序 1 指定路径前缀 traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/ 但这没有效果。

当我修改应用程序 1 的规则以指向 Host:test.myblog.com 所有流量都正确地转到应用程序 2,据此我得出结论,到应用程序 2 的路由配置是正确的,它只是被忽略了,因为应用程序1 取代它,因为它也满足路线。

这个问题正在讨论这个确切的用例:
https://github.com/containous/traefik/issues/419#issuecomment-223843103

但看起来没有 pathPrefix 的配置优先于带有 pathPrefix 的配置,也许马拉松后端根本不支持这种类型的配置?

我不清楚这个文档:
https://github.com/fclaeys/traefik/blob/master/docs/basics.md.

正在寻找可以帮助我了解马拉松后端是否完全支持此用例的答案,或者它的工作配置示例。

使用 Traefik v1.5.1

如果多个规则匹配,traefic 将使用规则的长度来确定哪个规则最具体,而不是实际的具体情况。您可以使用

覆盖此人工优先级

traefik.frontend.priority=1000

更多信息: https://github.com/containous/traefik/issues/1663

如果我将应用 1 的规则调整为

traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/

每一次尝试,坚持

traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/app

在应用程序 2 上,路由行为似乎符合预期:使用 web.myblog.com 主机和 /app 路径的请求排他性且确定性地转到应用程序 2(因为 Traefik 使用 longest-path匹配)。如果我修改请求以使用根路径 /(或 /app 以外的任何路径,因为它们都将包含匹配的根路径前缀),流量将转发到应用程序 1.

我针对 Marathon 1.3.10 进行了测试。