1

我正在使用其官方 docker -compose 文件运行 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*

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

4

2 回答 2

3

@里弗曼

我和你有同样的问题,我通过玩耍解决了它,因为它没有在 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'
于 2019-03-21T15:06:48.153 回答
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}”
于 2018-12-14T12:29:54.677 回答