Используя nginx в качестве обратного прокси-сервера и балансировщика нагрузки, существует ли способ автоматического обнаружения новых экземпляров контейнера при использовании docker-compose? - PullRequest
0 голосов
/ 14 марта 2019

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

Я могу раскрутить приложениеиспользуя docker-compose up -d и все прекрасно работает.Затем я могу увеличить один из моих сервисов, используя docker-compose up -d --scale auth=3, и все продолжает работать нормально.

Единственная проблема заключается в том, что nginx еще не знает о двух новых экземплярах, поэтому мне нужно перезапустить вручнуюпроцесс nginx внутри работающего контейнера с использованием docker exec revproxy nginx -s reload, где "revproxy" - это имя контейнера nginx.

Это нормально и прекрасно, я не против запустить дополнительную команду, когда решу масштабировать однуиз моих услуг.Однако реальная проблема заключается в том, что где-то происходит сбой контейнера ... nginx необходимо знать, как только это произойдет, чтобы остановить отправку трафика на сбойный экземпляр, пока механизм Docker не сможет заменить его работоспособным.

С учетом всего вышесказанного, я бы хотел выполнить то, что они делают, в кратком руководстве по Traefik , за исключением того, что я хотел бы использовать nginx в качестве обратного прокси-сервера.

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Хотя я лично считаю, что Traefik в вашем случае поможет сэкономить время, есть еще один проект, который делает то, что вы хотите с nginx: jwilder / nginx-proxy .

Это работаетпрослушивая события механизма докера и когда контейнеры добавляются или удаляются, он обновляет конфигурацию nginx, используя шаблон.

Вы можете использовать это jwilder/nginx-proxy образ докера в том виде, как есть, или вы также можете сделать свой собственныйизобразить с помощью проекта jwilder / docker-gen , который является частью, которая создает файл с заданными событиями шаблона и механизма докера.

Но, опять же, я бы порекомендовал Traefik ;за сэкономленное время и проблемы, а также за все функции, которые с ним связаны (различные стратегии балансировки нагрузки, проверки работоспособности, автоматические выключатели, автоматическая настройка SSL-сертификата с ACME / Let's Encrypt, ...)

0 голосов
/ 14 марта 2019

Вам просто нужно написать скрипт обнаружения службы, который будет искать обновленный список контейнеров каждые X интервалов и соответственно обновлять конфигурацию nginx.

...