Traefik:将多个docker服务聚合到一个逻辑后端

时间:2018-12-14 11:30:39

标签: docker docker-compose traefik minio

我正在使用其官方docker-compose file运行minio,它创建了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*

有什么办法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

所有minio服务必须具有相同的前端规则和相同的后端名称。

  labels:
  - "traefik.frontend.rule=Host:minio.${DOMAIN}"
  - "traefik.backend=minio"
  - "traefik.port=9000"

我还认为您误解了“后端”的含义。后端是Traefik根据前端规则将流量路由到的服务器。与nginx中的“上游” /“位置”相同。


编辑

如评论中所述,此配置创建了多个都指向同一个后端的前端,尽管在功能上看起来很丑。一种快速的解决方案是仅使用一项带有“前端”的服务,但是如果该服务出现故障,那么前端也将消失。

一种更好的方法是在配置文件traefik.toml中进行设置:

[frontends]
  [frontends.frontend1]
  backend = "minio"
    [frontends.frontend1.minio]
    rule = "Host: minio.${DOMAIN}”

答案 1 :(得分:0)

@河人

我遇到了与您相同的问题,并且由于没有在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'