Docker Swarm + Traefik:通过前端规则公开 Traefik GUI;服务/容器端口重定向



我正在尝试将Traefik与Docker Swarm后端一起使用,并且我正在使用下面的堆栈文件:

version: "3"
services:
traefik:
image: traefik:1.5
command: --web --docker --docker.swarmmode --docker.watch --docker.domain=sample.com --logLevel=DEBUG 
deploy:
placement:
constraints: [node.role==manager]
restart_policy:
condition: on-failure
labels:
- "traefik.port=8080"
- "traefik.docker.network=sample-network"
- "traefik.frontend.rule=Host:traefik.sample.com"
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /dev/null:/traefik.toml
networks:
- sample-network
portainer:
image: portainer/portainer:latest
command: --no-auth -H unix:///var/run/docker.sock
deploy:
placement:
constraints: [node.role == manager]
labels:
- "traefik.portainer.port=7777"
- "traefik.docker.network=sample-network"
- "traefik.frontend.rule=Host:portainer.sample.com"
ports:
- "7777:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- sample-network
networks:
sample-network:

我有两个问题,我试图绕开我的头:

1)(通过前端规则公开 Traefik 仪表板)我可以在sample.com:8080上访问 Traefik 的网络仪表板,但我无法通过traefik.sample.com访问它。

2)(容器/服务上的端口重定向)我可以通过sample.com:7777访问Portainer GUI,但我无法通过portainer.sample.com访问它。我对端口重定向更好奇,因为如果我遇到发布到同一端口的 2 个图像,我将如何在单个堆栈文件中设置 2 个服务?我的服务标签声明将在traefik.port=XXXX冲突

您不需要 traefik 服务本身上的 traefik 标签。它通过指定的端口从外部访问:

ports:
- "80:80"
- "8080:8080"
- "443:443"

在 portainer 服务上,您不需要端口映射,因为您可能希望使用 traefik 路由请求。 因为 traefik 和 portainer 在同一个 docker 网络中,所以 traefik 可以访问每个端口上的 portainer。 因此,traefik 的端口必须与真正的端口相匹配:

labels:
- "traefik.port=9000"
- "traefik.docker.network=sample-network"
- "traefik.frontend.rule=Host:portainer.sample.com"

在当前设置中,您必须使用Host:portainer.sample.com请求 traefik . 你可以用

curl --verbose --header 'Host: portainer.sample.com' 'http://<DockerhostIp>:80'

编辑:更新卷曲

编辑 2:对 PO 编辑的反应

portainer.sample.comDNS 条目必须指向您的 docker 主机。然后 traefik 会将其路由到正确的容器。

另一种方法是指定一个 traefik 前缀:

"traefik.frontend.rule=Host:site1.org;PathPrefixStrip: /sub/"

使用该规则,site1.org/sub 上的所有请求都将路由到此特定服务/容器。

看看 Traefik-Docker-Sample

编辑3:

仪表板/webui 的自我路由应适用于:

labels:
- "traefik.port=8080"
- "traefik.docker.network=sample-network"
- "traefik.frontend.rule=Host:traefik.sample.com"

只需确保您有用于 traefik.sample.com 的 DNS 条目即可。 要检查 traefik 设置是否有效,您还可以运行

curl --verbose -H Host:traefik.sample.com <DockerHostIp>

最新更新