Traefik: объедините несколько служб докеров в один логический бэкэнд - PullRequest
0 голосов
/ 14 декабря 2018

Я запускаю minio, используя его официальный docker-compose файл , который создает 4 сервиса (контейнера): minio1, minio2, minio3, minio4.Traefik рассматривает их как 4 уникальных сервиса, но в действительности их следует рассматривать как единый бэкэнд, то есть я хочу, чтобы Traefik генерировал 1 фронтэнд и 1 бэкэнд (с 4 серверами) для minio.Я попытался поместить их в одну группу (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 голосов
/ 21 марта 2019

@ Riverman

У меня была та же проблема, что и у вас, и я решил ее, поиграв, так как она не полностью задокументирована в документации 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'
0 голосов
/ 14 декабря 2018

Все службы Minio должны иметь одно и то же правило внешнего интерфейса и одно и то же имя бэкэнда.

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

Также, я думаю, вы неправильно поняли значение «бэкэнда».Бэкэнд - это сервер, на который Traefik направляет трафик на основе правил внешнего интерфейса.То же, что «upstream» / «location» в nginx.


Edit

Как указано в комментарии, эта конфигурация создает несколько внешних интерфейсов, все указывают на один и тот же бэкэнд, хотя это выглядит функциональнонекрасиво.Быстрое решение состоит в том, чтобы просто иметь один сервис с «внешним интерфейсом», но если этот сервис выйдет из строя, внешний интерфейс тоже пропадет.

Лучший способ сделать это - установить его в конфигурационном файле, traefik.Томль:

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