Как зарегистрировать долговременную внешнюю службу в Консуле
Я регистрирую внешнюю службу в консуле через Каталог API http://127.0.0.1:8500/v1/catalog/register с полезной нагрузкой следующим образом:
{
"Datacenter": "dc1",
"Node": "pedram",
"Address": "www.google.com",
"Service": {
"ID": "google",
"Service": "google",
"Address": "www.google.com",
"Port": 80
},
"Check": {
"Node": "pedram",
"CheckID": "service:google",
"Status": "passing",
"ServiceID": "google",
"script": "curl www.google.com > /dev/null 2>&1",
"interval": "10s"
}
}
Внешний сервис успешно регистрируется, и я вижу его в списке зарегистрированных сервисов, но через некоторое время он исчезает. Кажется, что он был незарегистрирован автоматически.
Я работаю консулом в режиме -dev.
В чем проблема?
2 ответа
Я обнаружил, что я должен зарегистрировать внешние службы в отдельном узле. Локальные службы моего приложения регистрируются в узле с именем
"Node": "pedram"
когда я регистрирую внешние службы в этом узле, они будут удалены автоматически.
Но когда я регистрирую свои внешние сервисы в новом узле, все новые внешние сервисы регистрируются на длительный срок и готовы к использованию как все другие локальные сервисы.
моя новая полезная нагрузка выглядит следующим образом:
{
"Datacenter": "dc1",
"Node": "newNode",
"Address": "www.google.com",
"Service": {
"ID": "google",
"Service": "google",
"Address": "www.google.com",
"Port": 80
},
"Check": {
"Node": "newNode",
"CheckID": "service:google",
"Status": "passing",
"ServiceID": "google"
}
}
Это исключительное поведение. В документах Consul Anti-Entropy
Если в каталоге существуют какие-либо службы или проверки, о которых агент не знает, они будут автоматически удалены, чтобы каталог отражал правильный набор служб и информацию о состоянии для этого агента. Консул рассматривает состояние агента как авторитетное; если есть какие-либо различия между представлением агента и каталога, всегда будет использоваться представление локального агента.
В ваших настройках агент на хосте pedram не знал о реестре службы. так что антиэнтропийная стратегия удаляет сервис.
Вы не должны использовать режим -dev, за исключением тестирования / игры. для проверки вашего здоровья я бы рекомендовал не использовать "script": "curl www.google.com > /dev/null 2>&1",
Вместо этого я бы рекомендовал использовать проверку состояния http:"http": "https://www.google.com",
Подробнее о проверках здоровья можно прочитать здесь: https://www.consul.io/docs/agent/checks.html
Кроме того, вы должны, вероятно, перейти на HTTPS (на порт 443), если вы можете.
это также может помочь сохранить его как файл.JSON и позволить консулу читать его как часть своего запуска, так как я предполагаю, что вы хотите, чтобы это был долговременный внешний сервис. Вы можете сделать это с помощью команды вроде:/usr/local/bin/consul agent -config-dir=/etc/consul/consul.d
и каждый файл.json в /etc/consul/consul.d/
будет читаться как часть его конфигурации. Если вы измените файлы, consul reload
перезагрузится
Я хотел бы внести эти изменения (не запускать в режиме разработки и т. Д.) И посмотреть, существует ли проблема. Я предполагаю, что не будет.