Настройка secondary DNS-серверов для Designate с backend PDNS4

Настройка позволяет отправлять DNS NOTIFY secondary DNS-серверам и локально переопределять параметры pdns.conf без копирования полного шаблона в репозиторий региона.

Используйте эту настройку в регионах, где Designate работает с backend PDNS4, если необходимо:

  • передавать изменения зоны на secondary DNS-серверы после обновлений в Designate;

  • отправлять DNS NOTIFY на несколько secondary DNS-серверов;

  • задавать отдельный порт для конкретного secondary DNS-сервера;

  • переопределять только отдельные параметры pdns.conf без копирования полного шаблона.

Если сервис Designate выключен в регионе, предварительно включите его согласно принятому в вашем контуре процессу сопровождения.

Настройка secondary DNS-серверов

Для настройки secondary DNS-серверов добавьте или измените параметры designate_ns_record и designate_also_notifies_ips в файле globals.d/REGION.yml репозитория региона.

Параметр designate_ns_record задаёт список NS-серверов, которые публикуются для зон.

Параметр designate_also_notifies_ips задаёт список secondary DNS-серверов, которым Designate отправляет DNS NOTIFY после изменения зоны.

Поддерживаемые форматы

Поддерживается обратная совместимость со старым форматом, в котором указывается только IP-адрес secondary DNS-сервера:

designate_also_notifies_ips:
  - "10.10.10.4"
  - "10.10.10.5"

В этом случае для всех secondary DNS-серверов используется значение designate_bind_port.

Для задания отдельного порта для конкретного secondary DNS-сервера используйте расширенный формат:

designate_also_notifies_ips:
  - host: "10.10.10.4"
  - host: "10.10.10.5"
    port: 5353

Если у элемента списка не указан port, используется значение designate_bind_port.

Если используется старый формат со списком строк, для secondary DNS-сервера также используется значение designate_bind_port.

Рекомендуемая конфигурация

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

designate_ns_record:
  - "ns1.example.com."
  - "ns2.example.com."

designate_also_notifies_ips:
  - host: "10.10.10.4"
    port: 53
  - host: "10.10.10.5"
    port: 5353

Локальная кастомизация pdns.conf

Для локальной кастомизации PowerDNS используйте один из поддерживаемых файлов в репозитории региона:

  • config/designate/designate-backend-pdns4/<inventory_hostname>/pdns.conf;

  • config/designate/designate-backend-pdns4/pdns.conf;

  • config/designate/pdns.conf.

Если достаточно одного общего файла переопределения для всех узлов сервиса, используйте файл config/designate/pdns.conf.

Итоговый файл pdns.conf формируется через механизм объединения конфигураций, поэтому в файле переопределения указывайте только те параметры, которые требуется изменить.

Это позволяет:

  • не копировать полный шаблон pdns.conf в репозиторий региона;

  • переопределять только необходимые параметры;

  • сохранять совместимость с базовым шаблоном роли.

Приоритет источников конфигурации

Итоговый pdns.conf собирается из следующих источников:

  1. config/designate/designate-backend-pdns4/<inventory_hostname>/pdns.conf;

  2. config/designate/designate-backend-pdns4/pdns.conf;

  3. config/designate/pdns.conf;

  4. базовый шаблон роли.

Более специфичный файл имеет приоритет над менее специфичным.

Рекомендуемый способ задания порта

Для задания порта указывайте его в параметре local-address.

local-address={{ 'api' | kolla_address }}:{{ designate_bind_port }}

Предупреждение

Не указывайте один и тот же порт одновременно в local-address и local-port.

Параметр local-port считайте устаревшим параметром обратной совместимости. Если порт уже указан в local-address, дополнительная строка local-port не требуется.

Практический сценарий

Изменение конфигурации региона

  1. Откройте веб-интерфейс GitLab.

  2. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  3. Откройте файл globals.d/REGION.yml.

  4. Убедитесь, что в файле включён сервис Designate и задан backend PDNS4:

    enable_designate: "yes"
    designate_backend: "pdns4"
    
  5. Добавьте или измените параметры designate_ns_record и designate_also_notifies_ips.

    Пример:

    designate_ns_record:
      - "ns1.example.com."
      - "ns2.example.com."
    
    designate_also_notifies_ips:
      - host: "10.10.10.4"
        port: 53
      - host: "10.10.10.5"
        port: 5353
    
  6. При необходимости создайте или измените файл переопределения pdns.conf.

    Для общего сценария используйте config/designate/pdns.conf.

    Если требуется более специфичное переопределение, используйте один из файлов:

    • config/designate/designate-backend-pdns4/pdns.conf;

    • config/designate/designate-backend-pdns4/<inventory_hostname>/pdns.conf.

    Пример:

    local-address={{ 'api' | kolla_address }}:{{ designate_bind_port }}
    
  7. Сохраните изменения в новой ветке и оформите MR. При необходимости используйте GitLab Web IDE. Подробнее см. Редактор кода.

  8. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  9. В переменной KOLLA_ARGS укажите значение -t designate.

  10. Запустите пайплайн, нажав кнопку New pipeline.

  11. Дождитесь завершения задач на этапе setup.

  12. Запустите задачу deploy на этапе deploy и дождитесь её завершения.

Проверка результата

Считайте изменение применённым, если выполняются все следующие условия:

  • на узлах designate-worker в файле /etc/kolla/designate-worker/pools.yml в секции also_notifies указаны ожидаемые значения host и port;

  • итоговый pdns.conf содержит только необходимые параметры переопределения, а полный шаблон в репозитории региона не дублируется;

  • secondary DNS-серверы получают DNS NOTIFY на ожидаемые порты и после изменения зоны получают актуальные данные.

Для проверки:

  1. Проверьте на узлах designate-worker файл /etc/kolla/designate-worker/pools.yml и убедитесь, что в секции also_notifies указаны ожидаемые значения host и port.

  2. Проверьте файл /etc/kolla/designate-backend-pdns4/pdns.conf на узле designate-backend-pdns4 и убедитесь, что порт задан через local-address.

  3. Создайте тестовую зону и тестовую запись, затем убедитесь, что secondary DNS-сервер получил обновление и отдаёт актуальные данные.

    Пример команд OpenStack CLI:

    $ openstack zone create --email test@test.com test.com.
    $ openstack recordset create test.com. notify-test.test.com. --type TXT --records "ping-1"
    

Ограничения и обратная совместимость

Настройка применяется только к сценарию с backend PDNS4.

Изменение затрагивает роль Designate в Kolla-Ansible.

Существующие конфигурации со старым форматом designate_also_notifies_ips продолжают работать без изменений.

Переход на расширенный формат не обязателен, но рекомендуется для новых конфигураций, если требуется управлять портами secondary DNS-серверов по отдельности.