Учебники

Консул — Самозагрузка и DNS

В этой главе мы обсудим, как следующие компоненты используются в Консуле.

  • Автоматическая загрузка
  • Ручная начальная загрузка
  • Использование пересылки DNS
  • DNS-кеширование

Давайте теперь обсудим каждый из них в деталях.

Автоматическая начальная загрузка

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

$ sudo consul info

Вывод будет таким, как показано на следующем скриншоте.

Автоматическая начальная загрузка

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

$ consul agent -server -data-dir = ”/tmp/consul” -bootstrap-expect 3

Автоматическую загрузку нельзя выполнить в режиме -dev.

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

Ручная начальная загрузка

Ручная начальная загрузка — старая и полезная функция Consul. На самом деле, в более ранней версии Consul начальная загрузка должна выполняться вручную при первоначальной установке и использовании consul. Позже стало понятно, что эту операцию командной строки невозможно выполнить в разное время. Следовательно, была введена автоматическая начальная загрузка. Вы всегда можете использовать загрузку вручную, используя следующие команды.

В этом случае мы будем предполагать, что кластер консулов ​​с 3 узлами должен быть построен.

Есть два варианта ручной загрузки

  • Запуск команд на 2 узлах: на узле B и узле C вы можете сделать следующее:

Запуск команд на 2 узлах: на узле B и узле C вы можете сделать следующее:

$ consul join <Node A Address>
  • Запуск команды над 1 узлом —

Запуск команды над 1 узлом —

$ consul join <Node B Address> <Node C Address>

Использование пересылки DNS

DNS обслуживается с порта 53 . Переадресация DNS может быть выполнена с использованием BIND, dnsmasq и iptables . По умолчанию агент Consul запускает DNS-сервер, прослушивающий порт 8600. Отправляя запросы DNS на DNS-сервер агента Consul, вы можете получить IP-адрес узла, на котором работает интересующая вас служба.

DNS-интерфейс Consul делает информацию о порте для службы доступной через записи SRV . Без добавления логики в коде вы обычно ограничены только информацией об IP-адресе (то есть записи) запрашиваемой вами услуги.

Наилучшим вариантом является наличие нескольких серверов BIND, на каждом из которых агент Consul работает локально. Любые запросы, полученные сервером BIND, будут перенаправлены на его локальный DNS-сервер агента Consul.

Использование Bind

Мы можем использовать пересылку DNS с помощью функции Bind. Это можно сделать с помощью следующей команды.

$ sudo apt-get install bind9 bind9utils bind9-doc

Вывод будет таким, как показано на следующем скриншоте.

Функция привязки

Давайте отредактируем файл /etc/bind/named.conf с помощью следующей команды.

$ sudo vim /etc/bind/named.conf

В файле, пожалуйста, добавьте следующие строки ниже последней строки кода.

options {
   directory "/var/cache/bind";
   recursion yes;
   allow-query { localhost; };
   
   forwarders {
      8.8.8.8;
      8.8.4.4;
   };
   dnssec-enable no;
   dnssec-validation no;
   auth-nxdomain no; # conform to RFC1035
   listen-on-v6 { any; };
};
include "/etc/bind/consul.conf";

Вывод будет таким, как показано на следующем скриншоте.

Команда Bind

Вы можете воспользоваться следующей командой Bind для настройки Consul.

$ sudo vim /etc/bind/consul.conf

Добавьте следующие строки при создании файла —

zone "consul" IN {
   type forward;
   forward only;
   forwarders { 127.0.0.1 port 8600; };
};

Теперь вы можете запустить свой консул-агент с помощью следующей команды. (Не забудьте также перезапустить службу bind9.)

$ sudo service bind9 restart
$ consul agent -server -bootstrap-expect 1 -data-dir = /tmp/consul -configdir = [Path]

Система должна быть настроена на отправку запросов на DNS-сервер локального агента Консула. Это делается путем обновления файла resolv.conf в системе, чтобы он указывал на 127.0.0.1. В большинстве случаев необходимо настроить Consul для работы через порт 53.

Вы можете добавить следующую информацию в /etc/resolv.conf:

nameserver 127.0.0.1

DNS-кеширование

Consul обслуживает все результаты DNS со значением «0 TTL» (время жизни). Это предотвращает любое кеширование. Однако из-за значений TTL его можно настроить так, чтобы результаты DNS кэшировались в нисходящем направлении от Consul. Более высокие значения TTL уменьшают количество запросов на серверы Consul и ускоряют поиск для клиентов за счет все более устаревших результатов.

Для этого мы будем использовать DNS-кеширование, используя метод ниже:

$ sudo apt-get install dnsmasq

Вывод будет таким, как показано на следующем скриншоте.

Dnsmasq

Теперь мы можем сделать очень простую конфигурацию —

$ echo "server = /consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul

Все, что мы здесь делаем, — это указание DNS-запросов на услуги консула, которые должны обрабатываться DNS-сервером 127.0.0.1 на порту 8600. Если вы не измените значения консула по умолчанию, это должно сработать.

В обычных случаях следует использовать следующую команду.

$ dig @127.0.0.1 -p 8600 web.service.consul

С Dnsmasq вы должны использовать следующую команду.

$ dig web.service.consul

Вывод будет таким, как показано на следующем скриншоте.