Как использовать nginx с докер-контейнерами Coreos и автопарком

У меня настроены три док-контейнера..

  • ghost - пользовательский контейнер докера, который запускает мой блог-призрак
  • ghost-data - Docker-контейнер, в котором хранятся все постоянные данные. content/* config.js, newrelic.js
  • https://github.com/jwilder/nginx-proxy - контейнер докера с nginx, который находится перед контейнером-призраком

Используя один сервер, я получаю, как связать nginx с контейнером-призраком и получать информацию через nginx.

Однако я хочу начать изучать Coreos и перейти на парк серверов Coreos. Я знаю, что для этого мне нужно записать служебные файлы для двух контейнеров (ghost, ghost-data) и убедиться, что ghost и ghost-data находятся на одном хосте, а nginx - нет.

Насколько я понимаю, весь смысл флота / кластеризации в coreos - это время безотказной работы. контейнеры будут перемещаться от узла к узлу по мере необходимости. Проблема в том, что каждый из этих узлов имеет свои IP-адреса в мире. Как я могу узнать, что мой DNS знает об этих IP-адресах и на каком IP-сервере установлен сервер nginx?

Как я вижу, что-то вроде этого работает..

  • node1 - запускает nginx-прокси, публичный ip из 1.1.1.1
  • node2 - запускает ghost, ghost-data, публичный ip из 1.1.1.2
  • node3 - свободный узел, публичный ip из 1.1.1.3

DNS указывает example.com на 1.1.1.1

Что происходит, когда coreos решают переместить nginx-proxy на node3 1.1.1.3?

Как я могу получить DNS, чтобы следовать этому? Я уверен, что в служебном файле есть способ заставить nginx остаться на том же узле, но это полностью противоречит цели, не так ли?

1 ответ

У вас есть три основных варианта:

  1. Используйте определенный хост для маршрутизации

Это будет похоже на вашу настройку, описанную выше, но я бы позаботился о том, чтобы ваш файл модуля оставался на этом хосте с MachineID=abc123..., Это не супер HA, так как у вас есть единственная точка отказа.

  1. Используйте Cloud Load Balancer

Если вы работаете в облачном провайдере, используйте LB и настройте проверку работоспособности на порту 80. Трафик будет передаваться только машине, работающей на 80. Вы будете иметь некоторое время простоя (от секунд до минут), если LB не обнаружит ваш сбой достаточно быстро.

  1. Двухслойная маршрутизация

Нечто похожее на https://github.com/robszumski/varnish_etcd, но вы можете сделать это с помощью лака /nginx/haproxy и confd или vulcand. По сути, у вас есть слой маршрутизации на каждом компьютере, который динамически перенаправляет на местоположение сервера.

Другие вопросы по тегам