Назад | Перейти на главную страницу

docker-compose + traefik - направляет трафик на сервисы за пределами сети docker-compose

Заранее прошу прощения за длину - но это интересно, особенно для архитекторов и мастеров traefik.

Шалланж:

Суть в том, что я надеюсь, что есть установка, в которой мы можем использовать traefiks возможность динамической конфигурации:

автоматически обнаруживать, когда контейнер остановлен, и знать, как откатиться к внешним службам на машине разработчика / внешнем хосте.

В качестве альтернативы - когда запускается контейнер local-db, знайте, что он лучше, чем служба db из внешнего источника.

Полная картина

Мне нужно оптимизировать рабочий процесс для пары команд.

Ограничения:

Это требует, чтобы на машине разработчика запускался абсолютный минимум. Текущее решение относится к docker-compose и traefik@1.x, и меня просят сохранить это, однако я считаю, что обновление до traefik@2.x будет принято.

Предполагаемые варианты использования

На самом деле я рассматриваю с вами два варианта использования, которые, как мне кажется, имеют одно и то же решение - по крайней мере, теоретически ...

Вариант использования один - локальный разработчик нескольких микросервисов

Dev-Mode = running a process in debug mode, with IDE, file-watch live reloads, etc.

AS A    - developer of services in mid layers of the service mesh
I WANT  - to be able to direct traffic to services under development to
          native processes on my machine, and keep the rest in the compose 
          network
SO THAT - I can run in Dev-Mode only services under development, 
          while all the rest in the mesh run using production-level docker 
          images in docker-compose.

Второй вариант использования - локальный разработчик и внешняя база данных

AS A    - developer of data brokers in the mesh
I WANT  - to control if containers get to the shared db or to local 
          db container using traefik
SO THAT - I can keep applications in the containers completely agnostic to 
          the topography in which they run

Так чего же не хватает?

Для начала - поскольку Traefik - это служебная шина, через которую проходят все межконтейнерные коммуникации - я ищу способ настройки traefik потреблять услуги от вне сеть docker-compose.

Первый вариант использования означает использование traefik в качестве служебной шины - единственного объекта, который знает, где работает каждая служба, который может быть контейнером или службой, внешней по отношению к сети docker-compose.

Второй вариант использования означает настройку traefik для направления трафика процессу выполняется за пределами сети docker-compose, но конкретно на машине разработчика, который, в свою очередь, потребляет службы из compose-сети (для этого разработчик compose, в отличие от production compose - предоставляет точку входа для каждого узла в сетке, включая для услуг, которые используются только для внутренних нужд производства).

Два по цене одного

Я знаю, что здесь есть два вопроса, но я не мог придумать другого способа задать каждый вопрос отдельно и получить ответы, относящиеся к полной картине ...

Я надеюсь, что есть установка, в которой мы сможем использовать traefiks возможность динамической конфигурации:

автоматически обнаруживать, когда контейнер остановлен, и знать, как откатиться к внешним службам на машине разработчика или на любом другом хосте, если это необходимо. В качестве альтернативы - когда контейнер db запущен, он знает, что предпочесть ему внешнюю службу db.

Мы можем попросить разработчиков добавить записи в свои hosts файл, но решение на основе DNS было бы намного предпочтительнее, особенно если мы можем использовать встроенный DNS для докера :)

Помогите ?

Любая помощь или указание в правильном направлении были бы очень признательны!

Я сделал это.

Ознакомьтесь с изолированным решением, продемонстрированным здесь:

https://github.com/osher/lcdev-using-compose-and-traefik

TL; DR:

  1. хост-машина разработчика присутствует внутри сети docker-compose как host.docker.internal.
  2. поставщик файлов предоставляет службы и маршруты для каждой службы, обслуживаемой командой. Маршруты в провайдере файлов имеют низкий приоритет.
  3. Поставщик докеров предоставляет услуги и маршруты для каждого контейнера docker-compose. созданные таким образом маршруты имеют высокий приоритет.

Результат:

  • когда есть контейнер - он используется.
  • когда контейнер остановлен - traefik попробую девелоперскую машину.