Consul – это современная платформа для обнаружения сервисов, которая позволяет регистрировать сервисы через DNS и HTTP-интерфейс. Она также предлагает функцию Service mesh, которая обеспечивает безопасные соединения через TLS и авторизацию между сервисами. Кроме того, Consul предоставляет API-шлюз для управления доступом к сервисам и хранилище KV (Key/Value) для хранения конфигурации сервисов.
В этом руководстве мы шаг за шагом рассмотрим установку кластера Consul с несколькими серверами на AlmaLinux 9.
Настройка системы
На этом первом этапе вы подготовите серверы AlmaLinux к установке Consul, что включает в себя:
- Настройка Firewalld для открытия портов.
- Настройка SELinux на разрешительный режим.
Настройка Firewalld
Перед установкой пакетов необходимо открыть порты на серверах Consul. В случае операционной системы на базе RHEL для открытия портов вы будете использовать Firewalld.
Выполните приведенную ниже команду, чтобы открыть порты 8300, 8301, 8302, 8400, 8500 и 8600 на ваших серверах AlmaLinux. В случае успеха вы должны получить вывод типа success.
sudo firewall-cmd --permanent --zone=public --add-port={8300,8301,8302,8400,8500,8600}/tcp
Теперь перезагрузите firewalld с помощью приведенной ниже команды, чтобы он начал действовать.
sudo firewall-cmd --reload
Наконец, проверьте правила firewalld с помощью следующей команды. Убедитесь, что порты 8300, 8301, 8302, 8400, 8500, 8600 доступны в вашем firewalld.
sudo firewall-cmd --zone=public --list-all
Изменение SELinux на разрешительный
После настройки firewalld измените стандартный режим SELinux на разрешительный. Это позволит генерировать журналы ошибок SELinux без блокирования действий.
Выполните следующую команду, чтобы изменить режим SELinux на разрешительный.
sudo setenforce 0 sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Затем перезапустите серверы, чтобы они вступили в силу.
sudo reboot
Теперь, когда вы настроили все ваши серверы AlmaLinux, вы можете начать установку Consul.
Установка Consul через DNF
Consul – это платформа для создания сервисных сетей, поддерживающая множество операционных систем. Кроме того, Consul предоставляет репозиторий пакетов для дистрибутивов Linux, включая дистрибутивы на базе RHEL. В этом шаге вы установите Consul из репозитория Consul с помощью DNF.
Для начала установите несколько базовых пакетов, выполнив следующую команду. Вход y чтобы продолжить установку.
sudo dnf install dnf-plugins-core nano
Теперь выполните приведенную ниже команду DNF, чтобы добавить репозиторий Consul на ваши серверы Alma Linux. Затем проверьте список доступных репозиториев на каждом сервере.
sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo dnf repolist
Следующий результат подтверждает, что вы добавили репозиторий HashiCorp в свои системы.
Далее установите Consul, выполнив следующую команду. Введите y, чтобы продолжить установку Consul.
sudo dnf install consul
После завершения установки выполните следующую команду, чтобы найти двоичный файл consul и проверить его версию.
which consul consul version
Приведенный ниже результат подтверждает, что двоичный файл Consul доступен по адресу /bin/consul, и текущей версией Consul является 1.17.
Настройка Consul
На данный момент вы установили Consul на все ваши серверы AlmaLinux. Давайте без лишних слов приступим к настройке кластера Consul с несколькими серверами. Для примера мы будем использовать три сервера AlmaLinux.
| Hostname | IP Address | | --------- | -------------- | | consul1 | 192.168.10.41 | | consul2 | 192.168.10.42 | | consul3 | 192.168.10.43 |
Сначала остановите службу consul на каждом сервере, выполнив следующую команду.
sudo systemctl stop consul
Перейдите на сервер consul1 и выполните приведенную ниже команду, чтобы сгенерировать новый ключ для кластера Consul. Обязательно сохраните сгенерированный ключ.
consul keygen
На всех ваших серверах Consul откройте конфигурацию Consul по умолчанию /etc/consul.d/consul.hcl с помощью следующей команды редактора nano.
sudo nano /etc/consul.d/consul.hcl
Измените конфигурацию по умолчанию на следующую и обратите внимание на некоторые параметры ниже:
- сервер: True означает, что узел будет работать как сервер Consul.
- advertise_addr: Замените это значение соответствующим IP-адресом сервера Consul.
- bootstrap_expect: Сколько серверов будет в вашем кластере?
- зашифровать: У каждого сервера должен быть один и тот же ключ.
- retry_join: Введите IP-адреса кластера Consul в этот параметр.
# Full configuration options can be found at https://www.consul.io/docs/agent/config
# datacenter
datacenter = “kitty-dc1”
# data_dir
# This flag provides a data directory for the agent to store state.
data_dir = “/opt/consul”
# client_addr
# The address to which the Consul will bind client interfaces, including the HTTP and DNS
# servers.
client_addr = “0.0.0.0”
# ui
# Enables the built-in web UI server and the required HTTP routes.
ui_config{
enabled = true
}
# default domain
domain = “consul”
# enable dns_config
dns_config{
enable_truncate = true
only_passing = true
}
# server
# This flag is used to control if an agent is in server or client mode. When provided,
# an agent will act as a Consul server. Each Consul cluster must have at least one
# server and ideally no more than 5 per datacenter. All servers participate in the Raft
# consensus algorithm to ensure that transactions occur in a consistent, linearizable
# manner. Transactions modify cluster state, which is maintained on all server nodes to
# ensure availability in the case of node failure. Server nodes also participate in a
# WAN gossip pool with server nodes in other datacenters. Servers act as gateways to
# other datacenters and forward traffic as appropriate.
server = true
# Advertise addr – if you want to point clients to a different address than bind or LB.
advertise_addr = “192.168.10.41”
# bootstrap_expect
# This flag provides the number of expected servers in the datacenter.
bootstrap_expect=3
# encrypt
# Specifies the secret key to use for encryption of Consul network traffic.
encrypt = “jFtV8jj4h1hnXGqTllWH+sOqLo/tw9xnnfDHcVxVnYg=”
# retry_join
retry_join = [“192.168.10.41”, “192.168.10.42”, “192.168.10.43”]
Сохраните и выйдите из файла после завершения работы.
Далее выполните следующую команду для проверки конфигурации Consul. Если вы правильно указали синтаксис, вы должны получить результат типа ‘Конфигурация действительна‘.
sudo consul validate /etc/consul.d/
Теперь выполните приведенную ниже команду, чтобы запустить и включить службу consul.
sudo systemctl start consul sudo systemctl enable consul
Затем проверьте consul с помощью следующей команды, чтобы убедиться, что служба работает.
sudo systemctl status consul
В следующем выводе вы должны увидеть, что Consul запущен на сервере consul1.
В следующем выводе вы должны увидеть, что Consul запущен на сервере consul2.
В следующем выводе вы должны увидеть, что Consul запущен на сервере consul3.
Взаимодействие с кластером Consul
Теперь, когда кластер Consul настроен на серверах AlmaLinux, вы можете проверять и взаимодействовать с кластером Consul через командную строку consul.
Проверка кластера Consul
Выполните приведенную ниже команду, чтобы проверить доступность сервера Consul в кластере.
consul members
В этом примере кластер Consul состоит из трех серверов, consul1, consul2 и consul3.
Вы также можете проверить список пиров на кластере с помощью следующей команды.
consul operator raft list-peers
Ниже вы можете увидеть подробную информацию о каждом сервере Consul, включая идентификатор, состояние, избирателя и версию RaftProtocol.
Добавление KV (Key-Value) Store в Consul
Далее выполните следующую команду consul, чтобы создать новую базу данных ключей-значений. В этом примере вы создадите новый ключ имя_базы со значением testdb.
consul kv put consul/configuration/db_name testdb
Теперь выполните приведенную ниже команду, чтобы получить значение для имя_базы.
consul kv get consul/configuration/db_name
Вы должны получить значение testdb, как показано ниже:
Взаимодействие с DNS в Consul
В этом руководстве вы включили DNS в Consul. Чтобы проверить конфигурацию DNS в Consul, воспользуйтесь командой dig, приведенной ниже.
dig @127.0.0.1 -p 8600 consul.service.consul
В этом примере вы настроили серверы Consul в кластере с тем же доменным именем consul. Следующее подтверждает, что домен consul.service.consul с A-записями 192.168.10.41, 192.168.10.42, 192.168.10.43.
Доступ к веб-интерфейсу (пользовательскому интерфейсу) Consul
Наконец, откройте веб-браузер и зайдите на IP-адрес сервера Consul с портом 8500, например http://192.168.10.41:8500/ui/ чтобы получить панель веб-администрирования Consul.
Ниже вы должны увидеть доступные серверы в кластере Consul.
Теперь нажмите на кнопку Узлы меню, чтобы получить подробную информацию о каждом сервере.
Затем нажмите на кнопку Ключ/Значение меню, чтобы получить список доступных KV на ваших серверах Consul.
Заключение
Итак, вы завершили пошаговую установку кластера Consul с тремя серверами AlmaLinux. Вы включили Consul Web UI и Consul DNS в кластере. Наконец, вы также узнали некоторые основные команды для взаимодействия с кластерами Consul, хранилищами ключевых значений и DNS.
Теперь вы можете активировать ACL (списки контроля доступа) и внедрить TLS для соединений между серверами и клиентами Consul.