Глядя на Консула после Эврики

Spring Cloud
Глядя на Консула после Эврики

Consul

Consul – это программное обеспечение с открытым исходным кодом, запущенное HashiCorp. Оно написано на языке GO и предоставляет такие услуги, как регистрация и обнаружение сервисов, конфигурация и решения для обеспечения высокой доступности для нескольких центров обработки данных. Оно поддерживает распределенную согласованность.алгоритм плотаЕго легко внедрить и интегрировать с платформами микросервисов, такими как Spring Cloud, он очень прост в использовании и обладает характеристиками простоты, простоты использования и подключаемости. Короче говоря, Consul предоставляет комплексное решение для сервисной сети.

Консул имеет следующие особенности и функции

  • Обнаружение службы: клиенты Consul могут регистрировать в Consul службы, такие как службы API или службы mysql, а другие клиенты могут использовать Consul для обнаружения поставщиков услуг. Consul поддерживает использование DNS или HTTP для регистрации и обнаружения сервисов.
  • Проверки работоспособности во время выполнения: клиенты Consul могут предоставлять любое количество механизмов проверки работоспособности, либо для данной службы («Да, веб-сервер вернул 200 OK»), либо для локального узла («Использование памяти ниже 90%). Эта информация может использоваться для мониторинга работоспособности кластера, а компоненты обнаружения служб могут использовать эту информацию мониторинга для направления трафика от неработоспособных служб.
  • Хранилище KV: приложения могут использовать хранилище ключей и значений Consul для любых нужд, включая динамическую настройку, тегирование функций, координацию, выборы лидера и многое другое. Он принимает HTTP API, чтобы упростить его использование.
  • Безопасная служебная связь: Consul может генерировать и распространять сертификаты TLS для служб для установления взаимных соединений TLS.
  • Несколько центров обработки данных: Consul поддерживает несколько центров обработки данных. Это означает, что пользователям Consul не нужно беспокоиться о создании дополнительных уровней абстракции для масштабирования на несколько регионов.

Консульский принцип

На каждом узле, предоставляющем услуги, работает агент Consul.Запуск агента не требует обнаружения службы и получения настроенной пары ключ-значение KV.Агент отвечает только за мониторинг и проверку. Узлы агента могут взаимодействовать с одним или несколькими серверами Consul. Сервер Consul — это место, где данные хранятся и реплицируются. Сервер сам выбирает лидера. Хотя Consul может работать на одном сервере, рекомендуется использовать от 3 до 5, чтобы избежать сбоев, которые приводят к потере данных. Рекомендуется использовать набор серверов Consul для каждого дата-центра.

Если вашему компоненту необходимо обнаружить службы, он может запросить любой сервер Consul или любой клиент Consul, и клиент Consul автоматически перенаправит запрос на сервер Consul.

Компоненты инфраструктуры, которым необходимо обнаружить другие службы или узлы, могут запрашивать любой сервер Consul или любой прокси-сервер Consul. Прокси автоматически перенаправляет запрос на сервер. В каждом центре обработки данных работает кластер серверов Consul. Когда возникает запрос на обнаружение или настройку службы между центрами обработки данных, локальный сервер Consul перенаправляет запрос в удаленный центр обработки данных и возвращает результат.

срок

  • Агент агента: это процесс-демон, который всегда работает на каждом члене кластера Consul. Начните с запуска агента консула. Агент может работать в режиме клиента или сервера. Указать узел в качестве клиента или сервера очень просто, если нет других экземпляров агента. Все агенты могут запускать интерфейсы DNS или HTTP и несут ответственность за проверки во время выполнения и синхронизацию служб.

  • Клиент Клиент — это прокси, который перенаправляет все RPC на сервер. Этот клиент относительно не имеет гражданства. Единственное фоновое действие, выполняемое клиентом, — это присоединение к пулу сплетен в локальной сети. Это имеет минимальные накладные расходы на ресурсы и потребляет лишь небольшую часть пропускной способности сети.

  • Сервер: Сервер — это прокси с набором расширенных функций, включая участие в выборах Raft, поддержание состояния кластера, ответ на RPC-запросы, взаимодействие с другими дата-центрами, сплетни WAN и пересылку запросов лидерам или удаленным дата-центрам.

  • Центр обработки данных Хотя определение центра обработки данных очевидно, необходимо учитывать некоторые тонкие детали. Например, в EC2 считается, что несколько зон доступности составляют центр обработки данных? Мы определяем центр обработки данных как частную сетевую среду с низкой задержкой и высокой пропускной способностью. Это не включает доступ к общедоступной сети, но для нас несколько зон доступности в одном и том же EC2 могут считаться частью одного центра обработки данных.

  • Консенсус: в нашей документации мы используем Консенсус для обозначения соглашения о порядке выборов лидера и транзакций. Поскольку эти транзакции применяются к конечным автоматам, консенсус подразумевает непротиворечивость реплицированных конечных автоматов.

  • Gossip: Consul построен на базе Serf, который предоставляет полный протокол для многоадресной рассылки. Serf обеспечивает членство, обнаружение сбоев и широковещательную рассылку событий. Более подробная информация описана в документации gossip. Этого достаточно, чтобы знать, что сплетни используют случайную двухточечную связь по протоколу UDP.

  • LAN Gossip Содержит все узлы, находящиеся в одной локальной сети или центре обработки данных.

  • WAN Gossip: Он содержит только сервер. Эти серверы в основном распределены в разных центрах обработки данных и обычно обмениваются данными через Интернет или глобальную сеть. Удаленный вызов процедуры RPC. Это механизм запроса/ответа, который позволяет клиенту запрашивать сервер.

Давайте разберем эту диаграмму и опишем каждую часть. Во-первых, мы видим, что есть два центра обработки данных, помеченные «1» и «2». Consul имеет первоклассную поддержку для нескольких центров обработки данных, и, надеюсь, это распространенный случай.

В каждом центре обработки данных клиенты и серверы смешаны. Обычно рекомендуется иметь 3-5 серверов. Это основано на компромиссе между доступностью и производительностью в случае сбоя, поскольку чем больше машин подключается, тем медленнее достигается консенсус. Однако количество клиентов не ограничено, их можно легко масштабировать до тысяч или десятков тысяч.

Все узлы в одном центре обработки данных должны присоединиться к протоколу сплетен. Это означает, что протокол сплетен включает все узлы в данном центре обработки данных. Это служит нескольким целям: во-первых, нет необходимости настраивать адрес сервера на клиенте. Обнаружение выполняется автоматически. Во-вторых, работа по обнаружению отказов узлов не размещается на сервере, а распределяется. Это сделано для обнаружения сбоев, которое более масштабируемо, чем механизм сердцебиения. В-третьих, он используется в качестве уровня сообщений для уведомления о событиях, например, когда происходят выборы лидера.

Серверы в каждом центре обработки данных являются частью набора узлов Raft. Это означает, что они работают вместе и выбирают лидера, сервер с дополнительной работой. Лидер обрабатывает все запросы и транзакции. Транзакции также должны быть реплицированы на все остальные узлы в рамках консенсусного протокола. Из-за этого требования, когда сервер, не являющийся лидером, получает запрос RPC, он перенаправляет запрос лидеру кластера.

Серверный узел также действует как часть пула сплетен WAN. Этот пул отличается от пула LAN тем, что он оптимизирован для более высокой задержки в Интернете и содержит только другие серверные узлы Consul. Цель этого пула — позволить центрам обработки данных обнаруживать друг друга с минимальным вмешательством. Это позволяет новому центру обработки данных легко присоединиться к существующим сплетням WAN. Поскольку все серверы работают в этом пуле, он также поддерживает запросы между центрами обработки данных. Когда сервер получает запрос из другого центра обработки данных, он перенаправляет его на сервер с правильными данными. Затем сервер перенаправляет его локальному лидеру.

Это оставляет только очень низкую связь между центрами обработки данных, но благодаря обнаружению сбоев, кэшированию соединений и мультиплексированию запросы между центрами обработки данных выполняются относительно быстро и надежно.

Процесс обнаружения регистрации службы Консул

Консул наиболее широко используется в отрасли в качестве реестра услуг. Как и тип Eureka, консул используется в качестве реестра услуг. Процесс его регистрации и обнаружения выглядит следующим образом:

В приведенной выше блок-схеме есть три роли, а именно: реестр услуг, поставщик услуг и потребитель услуг.

  • Когда поставщик услуг запущен, он отправит в Consul запрос на отправку метаданных, таких как его хост, IP-адрес, имя приложения, проверка работоспособности и т. д., в Consul.
  • После получения регистрации Провайдера Консул периодически отправляет Провайдеру запрос на проверку работоспособности, чтобы проверить работоспособность Провайдера.
  • Потребитель службы Потребитель получит список регистрации службы из центра регистрации Консул.Когда потребитель службы использует службу, он получит конкретный экземпляр службы (один или несколько) из списка регистрации службы в соответствии с именем приложения, тем самым завершив сервисный звонок.

Консул против Эврики

Согласно вышеуказанному таблицу сравнения центра регистрации, мы знаем, что самая большая разница между консулом и Eureka заключается в том, что консуль гарантирует CA, а Eureka гарантирует AP.

Сильная последовательность Консула приносит:

Регистрация в сервисе немного медленнее, чем в Eureka. Поскольку плотный протокол Consul требует, чтобы более половины узлов были успешно записаны, прежде чем регистрация будет считаться успешной. Когда лидер умирает, весь консул недоступен во время переизбрания. Сильная согласованность гарантируется за счет доступности.

Eureka гарантирует высокую доступность (A) и окончательную согласованность:

Регистрация службы выполняется относительно быстро, так как нет необходимости ждать, пока регистрационная информация будет реплицирована на другие узлы, и нет гарантии, что регистрационная информация реплицируется успешно. [Когда данные противоречивы](nuggets.capable/post/684490…), хотя регистрационная информация на A и B не совсем одинакова, каждый узел Eureka по-прежнему может нормально предоставлять услуги внешнему миру.Это приведет к тому, что, если A не может быть найден при запросе служебной информации, B может быть найден при запросе . Это обеспечивает доступность, но жертвует согласованностью.

Скачать и установить Консул

ссылка для скачивания:woohoo.consul.IO/downloads.Также…

Linux

Команда запуска:

nohup consul agent -server -bootstrap-expect 1 -config-dir /etc/consul.d/ -data-dir /tmp/consul -ui -bind=0.0.0.0 >> /var/opt/consul/consul.log 2>&1 

Mac

# 安装
brew install consul
# 修改 Consul 启动参数
vim /usr/local/opt/consul/homebrew.mxcl.consul.plist
# 修改 ProgramArguments 部分
<key>ProgramArguments</key><array><string>/usr/local/opt/consul/bin/consul</string><string>agent</string><string>-server</string><string>-bootstrap</string><string>-advertise</string><string>127.0.0.1</string><string>-data-dir</string><string>./data</string><string>-ui</string></array>
# Consul 启动
bashbrew services start consul

Посетите веб-интерфейс

доступ:http://localhost:8500

-bootstrap:启动模式,此模式下,节点可以选举自己为leader,一个数据中心只能有一个此模式启动的节点。机群启动后,新启动的节点不建议使用这种模式。
-bootstrap-expect:设定一个数据中心需要的服务节点数,可以不设置,设置的数字必须和实际的服务节点数匹配。consul会等待直到数据中心下的服务节点满足设定才会启动集群服务。初始化leader选举,不能和bootstrap混用。必须配合-server配置。
-bind:绑定的内部通讯地址,默认0.0.0.0,即,所有的本地地址,会将第一个可用的ip地址散播到集群中,如果有多个可用的ipv4,则consul启动报错。[::]ipv6,TCP UDP协议,相同的端口。防火墙配置。
-client:客户端模式,http dns,默认127.0.0.1,回环令牌网址
-config-file:配置文件位置
-config-dir:配置文件所在文件夹,会加载其下所有配置文件,.json或者.hcl文件,加载顺序为字母表顺序;可用配置多个此配置,从而加载多个文件夹,子文件夹的配置不会被加载。
-config-format:配置文件格式,配置了,则加载相应个是的文件。不配置,则consul自动识别。
-data-dir:状态数据存储文件夹,所有的节点都需要。文件夹位置需要不收consul节点重启影响,必须能够使用操作系统文件锁,unix-based系统下,文件夹文件权限为0600,注意做好账户权限控制,
-datacenter:数据中心名称,默认dc1,一个数据中心的所有节点都必须在一个LAN中。
-dev:开发模式,去掉所有持久化选项,内存服务器模式。
-disable-host-node-id:不使用host信息生成node ID,适用于同一台服务器部署多个实例用于测试的情况。随机生成nodeID
-dns-port:v7.0以后,自定义dns 端口,覆盖默认8600
-enable-script-checks:是否允许使用脚本进行健康检查,默认false,最好配置enable acl
-encrypt:consul网络通讯加密key,base64加密,16比特;consul keygen产生。集群中的每个实例必须提供相同的,只需提供一次,然后会保存到数据文件。重启自动加载。consul节点启动后提供,会被忽略。
-hcl:添加hcl格式配置,和已有的配置合并。可以使用多个此配置。
-http-port:http api端口,覆盖默认的8500。适用于云环境指定。
-log-file:日志记录文件,如果没有提供文件名,则默认Consul-时间戳.log
-log-level:日志级别,默认info,包含:trace,debug,info,warn,err;consul monitor监控
-log-rotate-bytes:新日志文件生成大小阈值。
-log-rotate-rotation:新日志生成时间阈值
-join:需要加入的其它节点地址,可以多次使用,加入多个节点。
-retry-join:会进行加入重试,适用于认定加入节点最终会正常的情况。ipv4,ipv6,dns
-retry-interval:上述,重试间隔,默认30s
-retry-max:重试次数,默认0,无限次重试
-join-wan, -retry-join-wan, -retry-interval-wan, -retry-max-wan 
-node:节点名称,默认主机名
-node-id:节点ID,
-pid-file:consul 存储 pid 的文件位置,用于主动发信号。如停止节点,重载配置等。
-protocol:使用的协议,升级时使用。consul -v查看协议版本
-raft-protocol:使用raft协议版本,默认3
-raft-snapshot-threshold:raft执行快照,提交次数阈值。一般不需要设置,io密集型应用可以调高。避免所有的节点同一时间快照。此值过大,会造成相应日志文件变大,节点重启恢复会耗费更长时间。1.1.0后,默认16384,之前8192.
-raft-snapshot-interval:执行快照间隔,影响类似上个配置,1.1.0后默认30s,之前5s。
-rejoin:节点会尝试重新加入集群。
-server:服务端节点模式。
-server-port:服务端RPC端口,v1.2.2后提供。
-non-voting-server:服务节点不参与选举,接受日志复制,用于横向扩展,服务查询请求。(类比zookeeper 观察者节点)
-syslog:linux OSX系统,配置日志输出到系统日志。
-ui:内置web ui界面。
-ui-dir:web ui 资源文件夹,使用此配置,则不需也不能使用再-ui配置。

Конкретные параметры:woohoo.consul.IO/docs/argentina/…

Порты, используемые по умолчанию:

  • Сервер RPC: по умолчанию 8300, TCP.
  • Serl LAN: обработка сплетен в локальной сети, по умолчанию 8301, TCP UDP.
  • Serl WAN: обработка сплетен в локальной сети, по умолчанию 8302, TCP UDP.
  • HTTP API: 8500, TCP.
  • DNS: 8600, TCP, UDP.

Консул клиент

добавить зависимости

добавить пом-зависимости

<!--监控,提供了健康检查-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

Изменить настройку

bootstrap.yml

spring:
 cloud:
  consul:
   host: xxx.xxx.xxx.xxx # 地址
   port: 8500 # 端口
   discovery:
   	register: true # 是否注册到 consul
    prefer-ip-address: true # ip 优先,以ip方式注册到 consul
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address} # 实例名称
    healthCheckInterval: 15s  # 健康检查时间间隔
    health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/  # 健康检查地址

стартовый класс

Добавить к@EnableDiscoveryClientаннотации или непосредственно@SpringCloudApplication

@SpringCloudApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

Включить элементы конфигурации, связанные с файлом конфигурации

spring:
  application:
    name: consul-provider
  cloud:
    consul:
      config:
          enabled: true
          format: yaml           
          prefix: config     
          profile-separator: ':'    
          data-key: data 

Посетите интерфейс управления KV-хранилищем консула на веб-странице, а именно http://localhost:8500/ui/dc1/kv, и создайте запись конфигурации.

Конфигурация динамического обновления с использованием @Refreshscope

@RestController
@RefreshScope
public class FooBarController {

    @Value("${foo.bar}")
    String fooBar;

    @GetMapping("/foo")
    public String getFooBar() {
        return fooBar;
    }
}

Параметр Описание

spring:
 cloud:
  consul:
   host: xxx.xxx.xxx.xxx # 地址
   port: 8500 # 端口
   discovery:
   	register: true # 是否注册到 consul
   	serviceName: service-producer
    prefer-ip-address: true # ip 优先,以ip方式注册到 consul
    tags: version=1.0  # key-value
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address} # 实例名称
    healthCheckInterval: 15s  # 健康检查时间间隔
    health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/  # 健康检查地址

Атрибут имени зарегистрированной службыspring.cloud.consul.discovery.serviceName, а не как в Eurekaspring.application.name=xx.

API

Смотрите также:Детали API

ACL

Настройка сервера Консул

сгенерировать токен

Доступ с PUThttp://localhost:8500/v1/acl/bootstrap, возьмите SecretID или ID и вы обнаружите, что эти два значения на самом деле одинаковы.

{
    "ID": "e292b56b-eee4-76c6-07a1-af7a81fc8c38",
    "AccessorID": "3aea8f1b-f30a-5a0a-3970-14135c4ce1a3",
    "SecretID": "e292b56b-eee4-76c6-07a1-af7a81fc8c38",
    "Description": "Bootstrap Token (Global Management)",
    "Policies": [
        {
            "ID": "00000000-0000-0000-0000-000000000001",
            "Name": "global-management"
        }
    ],
    "Local": false,
    "CreateTime": "2019-12-16T16:11:54.159198+08:00",
    "Hash": "oyrov6+GFLjo/KZAfqgxF/X4J/3LX0435DOBy9V22I0=",
    "CreateIndex": 1061,
    "ModifyIndex": 1061
}

Измените файл конфигурации сервера Consul

По пути конфигурации, где находится служба Consul (/etc/consul.d),Создаватьacl.jsonфайл, выполните следующую настройку, завершите настройку и перезапустите службу Consul.

{
  "acl_master_token": "e292b56b-eee4-76c6-07a1-af7a81fc8c38",
	"acl_default_policy": "deny",
	"server": true,
	"log_level": "INFO",
	"bootstrap_expect": 1,
  "client_addr": "0.0.0.0"
}

мы увидим онлайнacl_tokenЭлемент конфигурации, который используется для аутентификации клиента Consul.

Имя файла acl.json не должно называться произвольно, может быть проблема в том, что элементы конфигурации не распознаются

Создание правил ACL

Доступ с PUThttp://localhost:8500/v1/acl/create

Параметры запроса следующие:

{
  "Name": "AgentToken",
  "Type": "client",
  "Rules": "node \"\" { policy = \"read\" } node \"\" { policy = \"write\" } service \"\" { policy = \"read\" } service \"\" { policy = \"write\" }  key \"\" { policy = \"read\" } key \"\" { policy = \"write\" } agent \"\" { policy = \"read\" } agent \"\" { policy = \"write\" }  session \"\" { policy = \"read\" } session \"\" { policy = \"write\" }"
}

Проверьте, действителен ли сертификат

# 命令行下,返回空
consul members
# 返回列表数据
consul members -token e292b56b-eee4-76c6-07a1-af7a81fc8c38

Настройка клиента Консул

Конфигурация клиента Spring Cloud Consul

Настроить на клиенте Consulacl-tokenПункт конфигурации, рекомендуется поставить его вbootstrap.ymlпод файлом

spring:
  cloud:
    consul:
      discovery:
        enabled: true
        healthCheckPath: ${management.server.servlet.context-path}/health
        healthCheckInterval: 15s
        prefer-ip-address: true
        register: true
        acl-token: e292b56b-eee4-76c6-07a1-af7a81fc8c38
      host: localhost
      port: 8500

Rules

Элемент описания конфигурации правила на третьем шаге выше.

Policy Scope
agent Utility operations in the Agent API, other than service and check registration
event Listing and firing events in the Event API
key Key/value store operations in the KV Store API
keyring Keyring operations in the Keyring API
node Node-level catalog operations in the Catalog API, Health API, Prepared Query API, Network Coordinate API, and Agent API
operator Cluster-level operations in the Operator API, other than the Keyring API
query Prepared query operations in the Prepared Query API
service Service-level catalog operations in the Catalog API, Health API, Prepared Query API, and Agent API
session Session operations in the Session API

Включая вопросы недействительности токена, описания параметров и т. д., вы можете просмотретьКонсул Контроль доступа (ACLS).

Смотрите также:Официальная конфигурация ACL

Безопасность веб-интерфейса Consul

Консул сам по себе не обеспечивает гарантии безопасности веб-интерфейса. Пока это позволяет брандмауэр, любой человек во внешней сети также может получить доступ к его веб-интерфейсу, что опасно. Здесь мы используем базовыйauth_basicДля обеспечения безопасности веб-интерфейса консула решение кратко описано следующим образом:

  1. Сервер, на котором работает агент-консул в режиме сервера, настраивает сетевую политику, которая разрешает другим узлам в интрасети получать доступ только к его порту 8500.

  2. Узел, на котором работает агент консула в режиме клиента, если он откроет веб-интерфейс, будет привязан только к адресу 127.0.0.1; он может подключиться к агенту сервера консула через порт 8500, но при использовании функций, связанных с консулом, токен клиента или должен использоваться токен управления.

  3. Используйте nginx или apache в качестве обратного прокси-сервера в интрасети для порта 8500 узла агента сервера consul и настройте его в nginx или apacheauth_basicСертификация. обратный прокси иauth_basicКонфигурация аутентификации выглядит следующим образом:

    yum install -y httpd-tools
    htpasswd -c /etc/nginx/htpsswd consul_access # 执行后会要求你输入密码,完了就完成了账号密码的生成
    # 下面以配置nginx示例,apache的配置类似
    upstream consul {
           server 10.12.142.216:8500;
           server 10.12.142.217:8500;
           server 10.12.142.218:8500;
    }
    server {
        listen 18500;
        server_name consul.xxxx.com;
        location / {
            proxy_pass http://consul;
            proxy_read_timeout 300;
            proxy_connect_timeout 300;
            proxy_redirect off;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/htpasswd;
        }
    }
    
  4. Настройте сетевую политику, разрешите доступ только к обратному прокси-адресу nginx во внешней сети, вам нужно ввестиauth_basicАутентификационная информация, а при использовании функций, связанных с консулом, должен использоваться клиентский токен (в принципе управляющий токен нельзя выводить во внешнюю сеть).

Конфигурация Spring Cloud Consul

основные параметры
элемент конфигурации По умолчанию
spring.cloud.consul.enabled true
spring.cloud.consul.host localhost
spring.cloud.consul.port 8500

Для других конфигураций параметров см.:Spring Cloud Consul от входа до мастерства

проблема

1. Есть критическая проблема

Причина может быть в том, что нет ссылкиspring-boot-starter-actuatorЗависимость приводит к

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2,Spring Cloud ConsulСообщение об ошибке следующее, причина в том, что в приложении СЦ нет настроекacl-token, к бутстрапу и приложению это не имеет никакого отношения, если проблема все же есть, то можно проверить правильность имени конфигурационного файла или отладить операцию инициализации конфигураций в классе ConsulDiscoveryProperties.

com.ecwid.consul.v1.OperationException: OperationException(statusCode=403, statusMessage='Forbidden', statusContent='Permission denied')

Расширенное чтение

Полное руководство по гринвичской версии Spring Cloud Consul

Начало работы с Консулом

Spring Cloud Consul

микросервисная система springcloud (2) - 2.0G версия построения регистрационного центра Consul

консул конфиг/KV/ACL

Spring Cloud Consul от входа до мастерства

Consul Basics

Consul API

Консул Контроль доступа (ACLS)