приложение для обнаружения сервисов (service discovery) на основе DNS и проверки их доступности. Оно используется для обеспечения связи между компонентами микросервисной инфраструктуры, позволяя создавать отказоустойчивую и масштабируемую систему с возможностью балансировки нагрузки. Consul разработан компанией HashiCorp, которой также принадлежат другие известные продукты, например, Vagrant, Terraform, Atlas, Vault.
Приложение может быть установлено на серверы под управлением всех популярных систем: Linux, Windows, MacOS, BSD. Поддерживаются следующие способы установки:
- Копирование в систему бинарного файла.
- Сборка приложения из исходников.
- Установка в Kubernetes.
- В виде контейнера Docker.
Управление осуществляется через командную строку. Также для некоторых действий может быть активирован UI (User Interface).
Приложение работает на следующих портах:
Порт | Протокол | Описание |
8600 | TCP and UDP | Сервер DNS |
8500 | TCP | Consul UI + API |
8301 | TCP and UDP | Порт LAN |
8302 | TCP and UDP | Порт WAN |
8300 | TCP | Сервис RPC |
21000 — 21255 | Диапазон портов для регистрации сервисов | |
8501 | TCP | Защищенный Consul UI + API. По умолчанию, не настроен и задается любой. Данный номер рекомендован в официальной документации. |
8502 | gRPC API. По умолчанию, не настроен и задается любой. Данный номер рекомендован в официальной документации. |
По своей сути Consul — это база данных по типу ключ-значение. При обращении к нему мы получаем информацию о работоспособном приложении. Поэтому, среди аналогов, иногда выделяют etcd и ZooKeeper и, даже, Redis.
Также Consul может быть использован для реализации Service Mesh. Регистрация сервисов в последней производится с помощью функции Consul Connect. Помимо самих сервисов, регистрируются политики взаимодействия, например, мы можем указать, что сервис 1 может взаимодействовать с сервисом 2, но не может взаимодействовать с сервисом 3. А для регистрации своего приложения доступна HTTP API или конфигурационные файлы самого консула (при наличии поддержки со стороны приложения).