Перейти к основному содержанию

OctoDNS — DNS как код

DNS

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.

Теги

 

Похожие материалы

Добавляем ссылки в "О Seafile"

Домашнее облако Seafile имеет встроенные возможности кастомизации. Если вы используете Seafile дома или на работе, то можете внести полезные вам изменения в интерфейс системы. Добавим дополнительные ссылки в диалоговое окно "О Seafile".

Теги