2014-12-23 3 views
0

Мы используем агента консула на хосте, который также выполняет службу. (RabbitMQ) Чтобы убедиться, что служба готова, мы определили проверку работоспособности завитка. Однако мы используем регистратор для ввода этой проверки с использованием переменной env. SERVICE_CHECK_SCRIPT = curl hostname: 15672/....Как определить проверку работоспособности HTTP в контейнере consul для службы на том же хосте?

проблема есть, мы также сказали консул-агенту, что его имя хоста совпадает с хостом. (Мы должны иметь эту функцию, так как мы хотим, чтобы увидеть правильное имя хоста, зарегистрированный в консуле кластере.

Когда консул агент запускает проверку работоспособности, он ищет URL на своем собственном контейнере ... это, очевидно, не может ... делает кто-нибудь знает, как определить эту проверку работоспособности (мы используем Mesos, чтобы сделать это), так что ротор будет пытаться подключиться к правому IP?

ответ

6

вы можете использовать Registrator-х HTTP health check (при условии, что вы бежите консул внутри progrium/docker-consul), например:

ENV SERVICE_CHECK_HTTP=/howareyou 
ENV SERVICE_CHECK_INTERVAL=5s 

Эта проверка будет выполняться check-http script, предоставленной docker-consul, которая представляет собой IP-адрес и порт целевого контейнера, используя API-интерфейс Docker.

Другой вариант заключается в настройке консулом DNS для прослушивания на мосту IP Docker (который уже сделано в progrium/docker-consul «s run script), а также запускать Docker демон с глобальным параметром DNS, указывая на тот же IP, например, docker -d --bip 10.0.42.1/24 --dns 10.0.42.1 --dns 8.8.8.8.

После этого Консул DNS будет доступен в любой из контейнеров, в том числе docker-consul один, а это означает, что вы можете запустить curl http://my-app.service.consul:12345/howareyou, или даже запрос SRV записи, например, с dig -t SRV, чтобы получить как IP, так и порт службы. А затем вы можете добавить 10.0.42.1 на номер resolv.conf хоста, чтобы получить возможность запрашивать DNS-консул не только в контейнерах, но и в ОС хоста.

Предпочтительный метод imho заключается в использовании регистратора SERVICE_CHECK_HTTP, но настройка DNS-консула для ваших контейнеров стоит делать в любом случае.

Оба эти метода требуют запуска агента Consul в клиентском режиме на каждом из ваших хостов приложений, но агент Consul при запуске в этом режиме использует такое крошечное количество системных ресурсов, которое вы вряд ли заметите. И вам это нужно в любом случае для проведения медицинских проверок :)