Я пытаюсь внедрить кластер контейнерных приложений в производство, используя докер в режиме роя.
Позвольте мне описать очень минималистичный сценарий.Все, что у меня есть, это просто 5 aws-ec2 экземпляров.Ни одному из этих узлов не назначен общедоступный IP-адрес, а всем частным IP-адресам назначена часть подсети.
Например,
Узлы диспетчера
Рабочие узлы
- 172.16.50.3
- 172.16.50.4
- 172.16.50.5
С помощью описанной выше инфраструктуры создали рой докеров с IP первого узла (172.16.50.1) в качестве - advertise-addr , чтобы остальные 4 узла присоединились к рому как администратору или рабочему со своими соответствующими токенами.
Я не хотел перегружать узлы диспетчеразаставляя их выполнять роль рабочих узлов тоже.(Это хорошая идея или недоиспользование ресурса?).
Поскольку узлы по 4 ядра, я размещаю 9 реплик моего веб-приложения, которые распределены на 3 рабочих узлакаждый из которых работает с 3 контейнерами, на которых размещается мое веб-приложение.
Теперь, имея в виду эту настройку, как мне следует разоблачить весь док-рой-кластер с VIP (виртуальным IP) для внешнего мира?для потребления?
пожалуйста, подтвердите мои следующие мысли:
1.Должен ли я иметь классическую настройку балансировщика нагрузки, такую как сохранение обратного прокси-сервера на основе httpd или nginx или haproxy, которому назначен публичный IP-адрес, и заставить его балансировать нагрузку на 5 вышеупомянутых узлов, где развернут наш docker-swarm?
Один недостаток, который я вижу здесь, заключается в том, что вышеуказанный обратный прокси-сервер будет Single Point of Failure ?Любые идеи, как это может быть сделано отказоустойчивым / высокодоступным?я должен попробовать решение AnyCast?
2.Переходя к AWS ALB / ELB, который будет направлять трафик к вышеуказанным 5 узлам, где находится наш рой.
3.Если вам нужно сохранить отдельный балансировщик нагрузки, то для чего же в действительности используется балансировка нагрузки и обнаружение сервисов docker-swarm?
на что отвечает docker swarmпредоставить 1 виртуальный IP-адрес или имя хоста внешним клиентам для доступа к службам в кластере swarm?
Docker-swarm много говорит о наложенных сетях, но не уверен, как это относится кмоя проблема разоблачения кластера через VIP для клиентов в интернете.Должны ли мы всегда держать балансировщик нагрузки в курсе IP-адресов узлов, которые присоединяются к рою докеров позже?
, пожалуйста, пролите немного света!