在同一主机上使用traefik马拉松进行多路径路由

时间:2018-03-31 23:57:13

标签: go marathon traefik

我在马拉松比赛中运行了两个应用程序 我希望web.myblog.com路由到App 1,web.myblog.com/app路由到app2。

使用以下配置,所有流量都将转到app 1。

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

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

我尝试使用否定匹配来排除app 1的app / app路由,但我的理解是golang并不完全支持负向前瞻,结果也不在traefik中。

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

当我修改App 1的规则以指向Host:test.myblog.com时,所有流量都正确地转到app 2,从中我得出结论,到App 2的路由配置是正确的,它被忽略,因为App 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

2 个答案:

答案 0 :(得分:0)

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

覆盖此人工优先级

traefik.frontend.priority=1000

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

答案 1 :(得分:0)

如果我将app 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采用最长路径匹配)。如果我修改请求以使用根路径/(或/app以外的任何路径,因为它们都将保留匹配的根路径前缀),则流量将转发到应用1.

我对Marathon 1.3.10进行了测试。