Что такое Consul

Consul

приложение для обнаружения сервисов (service discovery) на основе DNS и проверки их доступности. Оно используется для обеспечения связи между компонентами микросервисной инфраструктуры, позволяя создавать отказоустойчивую и масштабируемую систему с возможностью балансировки нагрузки. Consul разработан компанией HashiCorp, которой также принадлежат другие известные продукты, например, Vagrant, Terraform, Atlas, Vault.

Приложение может быть установлено на серверы под управлением всех популярных систем: Linux, Windows, MacOS, BSD. Поддерживаются следующие способы установки:

  1. Копирование в систему бинарного файла.
  2. Сборка приложения из исходников.
  3. Установка в Kubernetes.
  4. В виде контейнера Docker.

Управление осуществляется через командную строку. Также для некоторых действий может быть активирован UI (User Interface).

Приложение работает на следующих портах:

ПортПротоколОписание
8600TCP and UDPСервер DNS
8500TCPConsul UI + API
8301TCP and UDPПорт LAN
8302TCP and UDPПорт WAN
8300TCPСервис RPC
21000 — 21255Диапазон портов для регистрации сервисов
8501TCPЗащищенный Consul UI + API. По умолчанию, не настроен и задается любой. Данный номер рекомендован в официальной документации.
8502gRPC API. По умолчанию, не настроен и задается любой. Данный номер рекомендован в официальной документации.

По своей сути Consul — это база данных по типу ключ-значение. При обращении к нему мы получаем информацию о работоспособном приложении. Поэтому, среди аналогов, иногда выделяют etcd и ZooKeeper и, даже, Redis.

Также Consul может быть использован для реализации Service Mesh. Регистрация сервисов в последней производится с помощью функции Consul Connect. Помимо самих сервисов, регистрируются политики взаимодействия, например, мы можем указать, что сервис 1 может взаимодействовать с сервисом 2, но не может взаимодействовать с сервисом 3. А для регистрации своего приложения доступна HTTP API или конфигурационные файлы самого консула (при наличии поддержки со стороны приложения).

EnglishRussianUkrainian