Traefik:将多个 docker 服务聚合到一个逻辑后端
Traefik: Aggregate multiple docker services into a single logical backend
我 运行 minio 使用其官方 docker-compose file 创建 4 个服务(容器):minio1、minio2、minio3、minio4。 Traefik 将它们视为 4 个独特的服务,但实际上,它们应该被视为单个后端,也就是说,我希望 Traefik 为 minio 生成 1 个前端和 1 个后端(有 4 个服务器)。
我尝试将它们放在一个组中(servicefabric.groupname),但无济于事。
我为每个 minio 服务设置了以下标签:
labels:
- "traefik.servicefabric.groupname=minio"
- "traefik.basic.frontend.rule=Host:foo.bar.com"
- "traefik.weight=10" # 10,20,30,40 incremented per service
- "traefik.frontend.rule=Host:traefik"
- "traefik.port=9000"
container_name: minio*
有什么办法可以实现吗?
所有 minio 服务必须具有相同的前端规则和相同的后端名称。
labels:
- "traefik.frontend.rule=Host:minio.${DOMAIN}"
- "traefik.backend=minio"
- "traefik.port=9000"
另外我觉得你误解了"backend"的意思。后端是 Traefik 根据前端规则将流量路由到的服务器。与 nginx 中的 "upstream"/"location" 相同。
编辑
正如评论中所述,此配置创建了多个前端,所有前端都指向同一个后端,尽管功能看起来很丑陋。一个快速的解决方案是只提供一项带有“前端”的服务,但如果该服务出现故障,前端也会消失。
更好的方法是在配置文件中设置它,traefik.toml:
[frontends]
[frontends.frontend1]
backend = "minio"
[frontends.frontend1.minio]
rule = "Host: minio.${DOMAIN}”
@里弗曼
我和你有同样的问题,我通过尝试解决了它,因为它没有在 Traefik 文档中完整记录。您需要做的是将所有服务的 traefik.backend
值指定为相同的名称,并将 traefik.frontend.backend
设置为该 traefik.backend
值。您不能为此使用服务件。下面是一个例子。
services:
minio01:
image: minio/minio
hostname: minio01
restart: always
volumes:
- minio01-data:/export
networks:
- minio
- traefik
command: server http://minio01/export http://minio02/export
labels:
- 'traefik.enable=true'
- 'traefik.docker.network=traefik'
- 'traefik.frontend.rule=Host:minio.local'
- 'traefik.frontend.backend=minio'
- 'traefik.port=9000'
- 'traefik.protocol=http'
- 'traefik.backend=minio'
minio02:
image: minio/minio
hostname: minio02
restart: always
volumes:
- minio02-data:/export
networks:
- minio
- traefik
command: server http://minio01/export http://minio02/export
labels:
- 'traefik.enable=true'
- 'traefik.docker.network=traefik'
- 'traefik.frontend.rule=Host:minio.local'
- 'traefik.frontend.backend=minio'
- 'traefik.port=9000'
- 'traefik.protocol=http'
- 'traefik.backend=minio'
我 运行 minio 使用其官方 docker-compose file 创建 4 个服务(容器):minio1、minio2、minio3、minio4。 Traefik 将它们视为 4 个独特的服务,但实际上,它们应该被视为单个后端,也就是说,我希望 Traefik 为 minio 生成 1 个前端和 1 个后端(有 4 个服务器)。 我尝试将它们放在一个组中(servicefabric.groupname),但无济于事。 我为每个 minio 服务设置了以下标签:
labels:
- "traefik.servicefabric.groupname=minio"
- "traefik.basic.frontend.rule=Host:foo.bar.com"
- "traefik.weight=10" # 10,20,30,40 incremented per service
- "traefik.frontend.rule=Host:traefik"
- "traefik.port=9000"
container_name: minio*
有什么办法可以实现吗?
所有 minio 服务必须具有相同的前端规则和相同的后端名称。
labels:
- "traefik.frontend.rule=Host:minio.${DOMAIN}"
- "traefik.backend=minio"
- "traefik.port=9000"
另外我觉得你误解了"backend"的意思。后端是 Traefik 根据前端规则将流量路由到的服务器。与 nginx 中的 "upstream"/"location" 相同。
编辑
正如评论中所述,此配置创建了多个前端,所有前端都指向同一个后端,尽管功能看起来很丑陋。一个快速的解决方案是只提供一项带有“前端”的服务,但如果该服务出现故障,前端也会消失。
更好的方法是在配置文件中设置它,traefik.toml:
[frontends]
[frontends.frontend1]
backend = "minio"
[frontends.frontend1.minio]
rule = "Host: minio.${DOMAIN}”
@里弗曼
我和你有同样的问题,我通过尝试解决了它,因为它没有在 Traefik 文档中完整记录。您需要做的是将所有服务的 traefik.backend
值指定为相同的名称,并将 traefik.frontend.backend
设置为该 traefik.backend
值。您不能为此使用服务件。下面是一个例子。
services:
minio01:
image: minio/minio
hostname: minio01
restart: always
volumes:
- minio01-data:/export
networks:
- minio
- traefik
command: server http://minio01/export http://minio02/export
labels:
- 'traefik.enable=true'
- 'traefik.docker.network=traefik'
- 'traefik.frontend.rule=Host:minio.local'
- 'traefik.frontend.backend=minio'
- 'traefik.port=9000'
- 'traefik.protocol=http'
- 'traefik.backend=minio'
minio02:
image: minio/minio
hostname: minio02
restart: always
volumes:
- minio02-data:/export
networks:
- minio
- traefik
command: server http://minio01/export http://minio02/export
labels:
- 'traefik.enable=true'
- 'traefik.docker.network=traefik'
- 'traefik.frontend.rule=Host:minio.local'
- 'traefik.frontend.backend=minio'
- 'traefik.port=9000'
- 'traefik.protocol=http'
- 'traefik.backend=minio'