Назад | Перейти на главную страницу

Как использовать nginx с docker-контейнерами и флотом coreos

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

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

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

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

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

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

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

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

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

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

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

  1. Используйте облачный балансировщик нагрузки

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

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

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