DNS — это важная часть почти любого достаточно продвинутого web-проекта.
DNS (Domain Name System) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста, получения информации о маршрутизации почты и/или обслуживающих узлах для протоколов в домене.
На начальных этапах обычно DNS управляется вручную. В процессе усложнение системы появляется много доменов, поддоменов, DNS записей. Конфигурацию DNS необходимо резервировать, бэкапировать, хранить версионность изменений и, в конце концов, автоматизировать.
В эпоху облачных технологий и микросервисной архитектуры традиционные методы управления DNS через веб-интерфейсы становятся узким местом DevOps-процессов. Ручное редактирование записей, отсутствие контроля версий, человеческие ошибки при массовых изменениях — все эти проблемы знакомы каждому системному администратору. Именно для решения этих задач был создан OctoDNS — инструмент с открытым исходным кодом от GitHub, который реализует принципы Infrastructure as Code (IaaC) для управления DNS.
https://github.com/octodns/octodns
Infrastructure as Code (IaaC) или ИНфраструктура как код — это подход к управлению инфраструктурой, при котором все компоненты (серверы, сети, настройки) описываются в декларативных конфигурационных файлах, которые можно версионировать, тестировать и автоматически развертывать.
OctoDNS и воплощает философию IaaC в мире DNS. Инструмент не единственный, но часто используемый.
Ключевые принципы IaaC в OctoDNS
- Декларативность — вы описываете ЖЕЛАЕМОЕ состояние DNS-зоны, а инструмент сам определяет, какие изменения необходимы для достижения этого состояния.
- Идемпотентность — многократное применение одной и той же конфигурации дает одинаковый результат. Это исключает дрейф конфигураций.
- Версионирование — все изменения хранятся в Git, что позволяет отслеживать историю, делать откаты и понимать, кто и когда внес изменения.
- Тестируемость — конфигурации можно проверять на синтаксические ошибки, тестировать в изолированных средах перед применением в продакшене.
- Автоматизация — процесс развертывания полностью автоматизирован через CI/CD-пайплайны.
Одна из самых мощных возможностей OctoDNS — поддержка множества DNS-провайдеров одновременно:
Основные поддерживаемые провайдеры
- AWS Route53
- Cloudflare
- Google Cloud DNS
- Azure DNS
- DigitalOcean
- DNSimple
- PowerDNS
- И другие через плагины
Давайте попробуем что-нибудь провернуть с помощью OctoDNS.
OctoDNS и bind9
К примеру, мы имеем файл зоны, уже работающий в bind9 сервере. Требуется сконвертировать его в формат YAML для OctoDNS, чтобы в будущем использовать для развертывания данной DNS зоны у какого-нибудь облачного провайдера, поддерживающего оправление DNS зонами посредством OctoDNS.
Установка OctoDNS и плагинов
Установка Python 3, virtualenv и pip3:
sudo apt-get update
sudo apt-get install python3 virtualenv
sudo apt-get install python3-pipСоздание рабочих директорий:
mkdir -p ~/octodns/{config,zones}
cd ~/octodnsСоздание виртуальной среды:
virtualenv env
source env/bin/activateУстановка пакетов:
pip3 install octodns octodns-bindПроверим версию:
octodns-sync --versionУ меня octoDNS 1.15.0.
В папку ~/octodns/zones скопируем наш файл зоны, к примеру, example.com.zone. Если серийный номер в файде задан как %SERIAL%, заменим его на INT число.
В папке ~/octodns/config создаем конфигурационный файл config.yaml:
---
providers:
zonefile:
class: octodns_bind.ZoneFileSource
directory: ./zones
file_extension: .zone
config:
class: octodns.provider.yaml.YamlProvider
directory: ./output_yaml
zones:
example.com.:
sources:
- zonefile
targets:
- configПопробуем сконвертировать в директории ~/octodns.
octodns-sync --config-file=./config/config.yaml --doitИ в директории ~/octodns/output_yaml получаем файл example.com.yaml.
