@kiranananda

Docker swarm вопросы по архитектурое?

Здравствуйте!

Есть докеровский рой. В нем 3 железки. Поднято 3 менеджера для отказоустойчивости. Внутри на данный момент работает nginx->php. И прочие для этого дела сервисы.
Мне нужно, что бы через одну железку приходили подключения на боевой сайт, через другую велась разработка. Порт везде 80. По идее nginx должен быть поднят как для боя, так и на машинке для разработчиков, что бы когда велась разработка тут же иметь доступ к загруженным файлам. Ну и в идеале иметь их изолированными друг от друга. Но сварм, открывает для сервиса порт на всех железках кластера. И получается я не могу запустить 2 nginx в одном кластере. Тут же есть решение использовать ключ mode = host. Но в таком случае не получится сделать красивый рестарт сервиса, что бы клиенты этого не заметили. Реализуется это с помощью order: start-first (докер ругается, что нет доступной ноды, ну это и понятно). То есть стартует новый сервис, а старый тем временем дообслуживает подключившихся клиентов...
Хотел влезть в iptables и там через dnat разрулить все это дело, но как я понял что ip адреса задать тоже не получается, поэтому эта идея отвалилась (.
Поднимать прокси для этого и им разруливать порты? Не создаст ли это дополнительно сильную нагрузку на сеть? Может есть какие то еще решения?
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@askhat
> По идее nginx должен быть поднят как для боя, так и на машинке для разработчиков

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

example.com
dev.example.com // как я понимаю слушает только 192.168...

или

example.com/
example.com/dev // imho не удобно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы