在同一主机上使用 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
如果我将应用 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 进行了测试。
我有两个应用程序 运行 参加马拉松比赛。
我希望 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
如果我将应用 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 进行了测试。