Автоматически добавлять докер-контейнер в вышестоящую конфигурацию балансировщика нагрузки nginx.

Я запускаю Docker Compose (v2), и у меня есть служба узла (веб-сайт) и API на основе Python, развернутые с nginx, сидящим перед ними.

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

Моя идея состояла в том, чтобы создать сценарий, который будет автоматически добавлять вышестоящие серверы с использованием переменных env при изменении контейнеров, но я не уверен, с чего начать, и не могу найти хороший пример.


person ExoticChimp    schedule 17.04.2016    source источник


Ответы (1)


Есть несколько способов добиться этого. То, что вы имеете в виду, обычно называется обнаружение службы и имеет множество форм. Я опишу два из них, которыми я пользовался раньше.

Первый и самый простой (который отлично работает для отдельных серверов или только для локального обнаружения контейнеров на одном сервере) — это локальный прокси-сервер, который использует сокет Docker или API. https://github.com/jwilder/nginx-proxy — один из самых популярных и должен хорошо подходят для создания прототипов масштабируемых сервисов в Compose.

Другой способ (который более удобен для работы с несколькими хостами, но и более сложен) — это регистрация сервисов в реестре (например, etcd или Consul), а затем динамическая запись конфигурации. Для этого вы можете использовать систему регистрации (например, https://github.com/gliderlabs/registrator) зарегистрировать контейнеры и их порты. Затем ваш прокси или приложение может использовать файл конфигурации, записанный с использованием системы шаблонов, такой как https://github.com/kelseyhightower/confd.

person Andy Shinn    schedule 17.04.2016
comment
похоже, это именно то, что я искал, спасибо! - person ExoticChimp; 17.04.2016