Consul — современная платформа для обнаружения сервисов, позволяющая регистрировать сервисы через DNS и HTTP-интерфейс. Он также предлагает функцию Service Mesh, которая обеспечивает безопасные соединения через TLS и обеспечивает авторизацию между службами. Кроме того, Consul также предоставляет шлюз API для управления доступом к сервисам и хранилище KV (ключ/значение) для хранения конфигурации сервиса.
В этой статье рассмотрим установку Consul Cluster с тремя серверами.
Протестировано на:
Almalinux: 8|9
Настройка системы
На первом этапе подготовим серверы AlmaLinux к установке Consul:
- Настройка Firewalld для открытия портов
- Настройте SELinux.
Настройка файрвола
Перед установкой пакетов откроем необходимые порты на своих серверах для работы Consul.
Выполните команду ниже, чтобы открыть порты 8300, 8301, 8302, 8400, 8500 и 8600
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 доступны на вашем брандмауэре.
sudo firewall-cmd --zone=public --list-all

Изменение политики SELinux.
После настройки firewalld изменим режим SELinux.
Выполните следующую команду, чтобы изменить режим SELinux на permessive.
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Затем перезагрузите серверы, чтобы изменения вступили в силу.
sudo reboot
Теперь, когда мы предварительно настроили все свои серверы, можем приступить к установке Consul.
Установка Consul
Consul— это сервисная сетевая платформа, поддерживающая различные операционные системы. Кроме того, Consul предоставляет репозиторий пакетов для дистрибутивов Linux, включая дистрибутивы на основе RHEL.
Перед установкой Consul предварительно установим несколько необходимых для это пакетов.
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

Затем установите Consul, выполнив следующую команду:
sudo dnf install consul
После завершения установки выполните следующую команду, чтобы проверить его версию.
consul version

Конфигурация Consul
После того, как установили Consul на все наши серверы, приступим к настройке кластера Consul. Для демонстрации будем использовать три сервера.
alma91 | 192.168.56.10 |
alma92 | 192.168.56.11 |
alma93 | 192.168.56.12 |
Сначала остановите службу Consul на каждом сервере, выполнив команду ниже.
sudo systemctl stop consul
Перейдите на сервер Consul1 и запустите команду ниже, чтобы сгенерировать новый ключ для кластера Consul. Обязательно сохраните сгенерированный ключ.
consul keygen
На всех ваших серверах консула откройте конфигурацию консула по умолчанию /etc/consul.d/consul.hcl, используя любой удобный текстовый редактор.
Измените конфигурацию следующим образом:
- server: true означает, что узел будет действовать как консул -сервер.
- advertise_addr: измените этот параметр на соответствующий IP -адреса сервера consul
- bootstrap_expep: Сколько будет серверов в вашем кластере?
- Encrypt: Ключ, который получили на предыдущем шаге, на каждом сервере должен быть одинаковым.
- retry_join: IP -адреса всех трех серверов для этого параметра.
# Full configuration options can be found at https://www.consul.io/docs/agent/config
# datacenter
datacenter = "my-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
}
# 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.56.10"
# 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.56.10", "192.168.56.11", "192.168.56.12"]
Сохраните файл и закройте редактор, когда закончите.
Затем запустите следующую команду для проверки правильности конфигурации. Если все хорошо, то вы должны получить сообщение «Configuration is valid!»
sudo consul validate /etc/consul.d/
Теперь включим службу consul и добавим ее в автозагрузку
sudo systemctl start consul
sudo systemctl enable consul
Теперь проверим статус службы consul на первом сервере
sudo systemctl status consul

На втором

И на третьем

Работа с кластером Consul
Теперь, когда у нас есть настроенный кластер consul, мы можем взаимодействовать с ним через командную строку.
Проверка кластера consul
Запустите команду ниже, чтобы посмотреть какие сервера состоят в кластере
consul members

В нашем случае кластер consul состоит из трех серверов: alma91, alma92 и alma93
Также можно проверить список пиров на кластере, используя ниже команду.
consul operator raft list-peers

Здесь можно получить подробную информацию о каждом сервере консула, включая ID, статус, количество всего серверов в кластере и так далее.
Добавление хранилище KV (Key-Value)
Запустите следующую команду, чтобы создать новую базу данных Value. В этом примере создадим новый ключ db_name с значением testdb.
consul kv put consul/configuration/db_name testdb
Чтобы посмотреть значение ключа db_name, используем следующую команду
consul kv get consul/configuration/db_name
Взаимодействие с DNS
В этой статье при настройке consul, мы включили службу DNS в конфигурационном файле. Чтобы проверить DNS, используйте команду dig ниже.
dig @127.0.0.1 -p 8600 consul.service.consul
В выводе можем увидеть все ip адреса с доменным именем consul.service.consul. В данном случае мы видим, что запись consul.service.consul имеет A записи 192.168.56.10, 192.168.56.11, 192.168.56.12

Доступ к web-интерфейсу
Откройте свой веб -браузер и посетите IP -адрес сервера Consul с портом 8500, например:
http://192.168.56.10:8500/ui/
Вы попадете на веб-панель consul. Использовать для входа можно любой сервер, принципиальной разницы нет.
На главной странице, вы можете увидеть доступные серверы в кластере

Можем посмотреть подробную информацию по каждому серверу в пункте Nodes

Доступные ключи в базе KV можно посмотреть в пункте Key/Value

Заключение
В этой статье познакомились с тем как развернуть кластер consul, добавили ключ со значением в хранилище KV. На выходе получили настроенный кластер consul с работающим DNS сервером.
Теперь вы можете активировать ACL (списки управления доступа) и реализовать TLS для соединений между серверами консул и клиентами.
Was this helpful?
0 / 0