Как зарегистрировать долговременную внешнюю службу в Консуле

Я регистрирую внешнюю службу в консуле через Каталог 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 перезагрузится

Я хотел бы внести эти изменения (не запускать в режиме разработки и т. Д.) И посмотреть, существует ли проблема. Я предполагаю, что не будет.

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