客观的
我有一台运行 Rancher (Docker) 的服务器。在该服务器中,我有几个不相关的堆栈。
我想让 Traefik 成为该堆栈的主要交互点。并根据路径对不同容器的请求进行负载平衡/代理。
我想让它把流量发送/api
到后端server
服务。并将流量发送/
到frontend
服务。
当前状态
docker-compose.yml
这是我只显示相关服务的精简版:
version: '2'
services:
server:
image: server
labels:
- "traefik.frontend.rule=PathPrefix:/api"
- "traefik.enable=true"
- "traefik.port=80"
frontend:
image: frontend
labels:
- "traefik.frontend.rule=PathPrefix:/"
- "traefik.enable=true"
- "traefik.port=80"
proxy:
image: traefik:v1.4
command: --web --accessLog --rancher --rancher.exposedbydefault=false --rancher.metadata=true
volumes:
- /dev/null:/traefik.toml
然后使用监听公共端口的 Rancher 负载均衡器,我将请求重定向app1.example.com
到我的proxy
服务。然后它接受请求并根据路径将流量重定向到两个容器中的每一个。
我还将流量重定向traefik.app1.example.com
到同一个服务,重定向到访问 Web UIproxy
的端口。8080
如果我只有一个堆栈,它可以工作。
问题
如果我添加另一个堆栈(或者如果我复制该堆栈)并且有更多带有 Traefik 标签的服务,则proxy
fromapp1
将从中的服务app2
和任何其他声明 Traefik 标签的堆栈中读取标签。
然后,在 in 的 Web UIproxy
中app1
,我可以看到来自所有不同堆栈的所有后端。但是前端规则会被覆盖。
问题
到目前为止,我看到的示例大多是关于如何将 Traefik 用作独特的全局负载均衡器/代理。我刚刚意识到我假设我也可以为每个堆栈创建隔离的 Traefik 实例,或者 Traefik 负载均衡器的层次结构。
在我看来,我缺少一些配置或误解了一些东西。
但是,我仍然要问,是否有可能每个堆栈有不同的隔离 Traefik 实例,并让它们只监听和使用自己堆栈中的服务?
Rancher可以吗?是否可以使用任何其他 Docker 堆栈编排器(例如 Swarm)?
如果这是可能的,我错过了什么?