Данное решение позволяет настроить DNS сервис в отказоустойчивом режиме при использовании более одной зоны доступности.
- существующая папка в Облаке
- установленный инструмент yc
Решение обеспечивает перенаправление DNS запросов на резервный DNS сервис в другой зоне доступности в случае отказа активного DNS сервиса в локальной зоне доступности.
В процессе работы создаются следующие артефакты в инфраструктуре Облака:
- Сеть (VPC) - общий объект для всех зон доступности (атрибуты сети задаются во входных параметрах)
- IPv4-подсеть/подсети по одной для каждой зоны доступности (атрибуты подсети задаются во входных параметрах)
Подразумевается, что целевой сервис будет иметь резевирование и размещаться минимум в 2х зонах доступности.
При создании подсети (по умолчанию) в список DNS серверов этой подсети всегда добавляется 2ой адрес из IPv4 префикса этой сети. Подробнее об этом можно почитать в главе "Подсети" раздела документации "Облачные сети и подсети".
При создании IPv4-подсети, в атрибут domain_name_servers добавляется список IPv4 адресов DNS серверов в разных зонах доступности. Например, при следующей конфигурации подсетей:
[
{ name = "sub1", zone = "ru-central1-a", prefix = "10.1.1.128/25" },
{ name = "sub2", zone = "ru-central1-b", prefix = "10.2.2.0/24" },
{ name = "sub3", zone = "ru-central1-c", prefix = "10.3.3.64/28" },
]
список DNS-серверов для каждой из подсетей выше будет таким:
sub1: [10.1.1.130, 10.2.2.2, 10.3.3.66]
sub2: [10.2.2.2, 10.1.1.130, 10.3.3.66]
sub3: [10.3.3.66, 10.1.1.130, 10.2.2.2]
Входные параметры variables.tf
net_name
- имя сети (VPC) в Облаке. Сеть будет создана во всех зонах доступности автоматически.subnet_list
- список IPv4 подсетей, которые будут создаваться в заданной параметромnet_name
сети.
Каждая из подсетей описывается набором атрибутов:name
- имя подсетиzone
- имя зоны доступностиprefix
- IPv4 префикс для создаваемой сети
- Проверить конфигурацию рабочего окружения YC в файле env-yc-prod.sh. Изменить при необходимости имя профиля "prod" на необходимое.
- Активировать рабочее окружение
source env-yc-prod.sh
- Инициализировать Terraform
terraform init
- Создать подсети в заданной сети с отказоустойчивым DNS сервисом
terraform apply
- Сохраним внешний адрес созданной VM в переменную окружения
export vm_ext_ip=`terraform output vm_ext_ip_address | sed 's/"//g'`
- Подключимся к VM
ssh -oStrictHostKeyChecking=no ubuntu@$vm_ext_ip
- Проверим работу DNS сервиса
dig www.yandex.ru
- Отключим все 3 DNS сервера с помощью инструмента iptables
sudo iptables -A OUTPUT -d 10.1.1.130 -j DROP sudo iptables -A OUTPUT -d 10.2.2.2 -j DROP sudo iptables -A OUTPUT -d 10.3.3.66 -j DROP sudo iptables -L -v -n
- Убедимся, что DNS запросы теперь остаются без ответа - DNS сервис ожидаемо не работает.
dig www.yandex.ru
- Разрешим трафик на 2ой DNS сервер в списке, удалив запрещающее правило, которое мы создали в п.4
sudo iptables -D OUTPUT -d 10.2.2.2 -j DROP
- Убедимся, что DNS сервис снова работает.
dig www.yandex.ru
unset vm_ext_ip
terraform destroy