Проверка состояния сервиса с помощью consul
Написал compose файл, в нем создается 3 образа с консулом в режиме сервер, 1 образ в режиме клиент, и одно хранилище vault. В вебморде видно что сервера все друг друга видят ( находятся в одном дата центре), клиент и vault тоже видно. Но как только я добавил healthcheck мне пишет:
Head "http://localhost:8200/v1/sys/health": dial tcp 127.0.0.1:8200: connect: connection refused
В документации написано что проверку vault можно делать по пути host:port/v1/sys/health с помощью get запроса. Однако оно пишет данную ошибку. Я добавил заголовки для авторизации с помощью стандартного токена vault, однако все равно получаю данную ошибку. Листинг файла с сервисом и проверкой:
{
"service": {
"name": "vault",
"tags": ["vault"],
"address": "localhost",
"port": 8200
},
"check": {
"id": "vault",
"name": "Check vault health",
"service_id": "vault",
"header": {"accept": ["*/*"],"X-Vault-Token": ["myroot"]},
"http": "http://localhost:8200/v1/sys/health",
"method": "HEAD",
"interval": "30s",
"timeout": "5s"
}
}
И сам docker-compose.yaml файл:
version: '3.7'
services:
consul-agent-server-1:
image: consul:latest
restart: always
container_name: consul-server-1
command: 'agent -server -ui -node=consul-server-1 -bootstrap-expect=3 -client=0.0.0.0'
ports:
- "8500:8500"
- "8600:8600"
consul-agent-server-2:
image: consul:latest
restart: always
container_name: consul-server-2
command: 'agent -server -node=consul-server-2 -join=consul-server-1 -bootstrap-expect=3'
consul-agent-server-3:
image: consul:latest
restart: always
container_name: consul-server-3
command: 'agent -server -node=consul-server-3 -join=consul-server-1 -bootstrap-expect=3'
consul-agent-client-1:
image: consul:latest
restart: always
container_name: consul-client-1
command: 'agent -node=consul-client-1 -join=consul-server-1 -config-file=/consul/services/'
volumes:
- './services/:/consul/services/:ro'
vault-1:
image: vault
restart: always
container_name: vault-storage-1
ports:
- "8200:8200"
environment:
- VAULT_ADDR=http://0.0.0.0:8200
- VAULT_API_ADDR=http://0.0.0.0:8200
- VAULT_ADDRESS=http://0.0.0.0:8200
- VAULT_UI=true
- VAULT_DEV_ROOT_TOKEN_ID=myroot
cap_add:
- IPC_LOCK
Не могу понять в чем проблема. Может быть кто-то сталкивался с таким вопросом?
Ответы (1 шт):
В общем удалось проблему решить следующим способом:
- В docker-compose создать отдьльную сеть, и каждому сервису выделить свой ip.
- В файле с проверкой заменить localhost на ip сервиса.
В целом это рабочий вариант