Может быть, я тупой, может, просто не использую хороших слов, но я не могу найти ни одного ответа нигде на Stackexchange или во всем Интернете.
Я создал множество веб-сайтов, в основном на Wordpress, Drupal, ...
(А недавно я начал работать со Scala и Go, пытаясь создать веб-сайт, чтобы получить некоторые знания об этих языках.)
Мой DNS-провайдер в основном DNSMadeEasy.
Сначала я использовал только один большой выделенный серверв Debian, мои разные веб-сайты просто находятся в разных папках, а Nginx, PHP-FPM, ... обслуживает все мои веб-сайты. Традиционная установка.
Затем несколько лет назад я переключился на установку Docker, все еще на одном хосте., с одним контейнером Nginx, одним контейнером PHP-FPM, одним контейнером MySQL ... на веб-сайт.
И один контейнер обратного прокси nginx перед всем, чтобы перенаправить посетителя веб-сайта example.com в контейнеры example.com.
Либо с традиционной настройкой, либо с настройкой на основе Docker, я назначал IP-адрес моего хоста для записи A моих разных сайтов в DNSMadeEasy, и вуаля, все будет работать должным образом.
СЕЙЧАС я хотел бы переключиться с настройки с одним хостом на настройку с несколькими хостами, также известную как настройка кластера, используя Docker Swarm (1.12 Swarm) или Kubernetes, чтобы упростить масштабирование, поскольку в первую очередь это было целью перехода на Docker.
Таким образом, контейнеры для разных моих веб-сайтов будут распределены по разным хостам моего кластера.
Я планирую использовать европейское облако, работающее на OpenStack, так как я не могу (<> законы о конфиденциальности) и не хочу использовать (<> слишком дорого) американские облака, такие как Google Cloud Engine или AWS EC2 (<> Patriot Act <> Европейские данные), поэтому, пожалуйста, не говорите мне использовать эти облака. Я уже смог настроить кластер Kubernetes и кластер Docker Swarm в этом облаке Openstack.
МОЙ ВОПРОС: Я не могу понять, как вы ДИНАМИЧЕСКИ направляете свои веб-сайты на новые службы и модули, которые создаются автоматически?
Допустим, у меня четыре хоста (1 мастер и 3 рабочих).
Если я просто сделаю Циклическое разрешение DNS, помещая все четыре IP-адреса моих четырех хостов в A-запись моих веб-сайтов, чтобы он шел на любой из четырех, это будет страшный сон и полный беспорядок, с заголовками кеша и всем остальным. Более того, с DNSMadeEasy у них есть API для автоматического добавления и удаления записей, поэтому я полагаю, что должна быть возможность автоматически обновлять запись A или запись CNAME веб-сайтов, как этот плагин делает с AWS Route53: https://github.com/wearemolecule/route53-kubernetes? (Мы видим, что здесь используется внешний LoadBalancer, поэтому я полагаю, что мне также понадобится внешний фунт для моей настройки, если я должен следовать этому решению?)
Мне известно, что и Kubernetes, и Docker Swarm используют DNS для обнаружения сервисов, а etcd / consul - для регистрации и выборов.
Но насколько я понимаю, это используется как внутренняя система DNS, а не как внешняя, нет?
Или я должен указать NS на мои хосты и использовать мои хосты вместо DnsMadeEasy !! ??
Я что-то упускаю ? Я что делаю неправильно?
Пожалуйста, помогите мне, у меня начинаются огромные головные боли, пытаясь во всем разобраться :)
Y
Docker 1.12 с роевым режимом имеет встроенную балансировку нагрузки.
В вашем случае основным преимуществом этого является то, что вам не нужно динамически обновлять свой DNS в зависимости от того, на каком хосте работает конкретный контейнер (что, скорее всего, в любом случае приведет к катастрофе из-за DNS ttl и кеширования).
Скажем, например, вы бежали:
docker service create --name nginx -p 80:80 nginx
Это создаст службу nginx с одной репликой, поэтому один контейнер будет запущен на случайном хосте в вашем рое. Но встроенная балансировка нагрузки будет направлять запросы на порт 80 на любой хостов роя на хост, на котором запущен контейнер. И аналогично, если вы масштабируете услугу с помощью:
docker service scale nginx=2
Это делает настройку очень простой:
docker service create
Судя по вашему вопросу, похоже, что вы хотите запустить несколько сайтов в своем рое, например. все несколько приложений прослушивают порт 80 и порт 443. Как указывает @Flippy, для этого в настоящее время вам нужно запустить балансировщик нагрузки уровня 7, такой как HAProxy или nginx, который проверяет заголовки хоста запросов и соответствующим образом перенаправляет запросы. Это также просто сделать с режимом Docker 1.12 Swarm, и это хорошее руководство по началу работы.
Начиная с Kubernetes 1.3, DNS - это встроенная служба, запускаемая автоматически с помощью надстройки кластера диспетчера дополнений. Модуль и служба DNS будут запланированы в кластере, а кублеты будут настроены для указания отдельным контейнерам использовать IP-адрес службы DNS для разрешения имен DNS.
Каждой службе, определенной в кластере (включая сам DNS-сервер), будет назначено DNS-имя. По умолчанию список поиска DNS клиентского модуля будет включать собственное пространство имен модуля и домен кластера по умолчанию. Лучше всего это проиллюстрировать на примере:
Предположим, что служба с именем foo находится на панели пространства имен Kubernetes. Pod, запущенный в строке пространства имен, может найти эту службу, просто выполнив DNS-запрос для foo. Pod, работающий в пространстве имен quux, может найти эту службу, выполнив DNS-запрос для foo.bar.
Для получения дополнительной информации проверьте Документация Kubernetes.
Конфигурации по умолчанию для балансировки нагрузки:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
Для получения дополнительной информации проверьте Документация NGINX.
Затем вы можете создать собственный сценарий для взаимодействия с API вашего поставщика DNS по мере необходимости.
Для получения дополнительной информации проверьте DNSMadeEasy Документация по REST API.