ExternalDNS Webhook Provider для MikroTik
|
Важно
|
Несмотря на то что программа достигла версии Пожалуйста, сообщайте об обнаруженных проблемах и предлагайте улучшения — проект активно развивается. Спасибо за участие! |
ExternalDNS — это дополнение (add-on) для Kubernetes, которое автоматически управляет DNS-записями для входящих маршрутов (Ingress) и сервисов кластера с помощью различных DNS-провайдеров. Данный webhook-провайдер позволяет автоматически переносить DNS-записи из ваших кластеров Kubernetes в маршрутизатор MikroTik.
Поддерживаемые типы DNS-записей: A, AAAA, CNAME, MX, NS, SRV, TXT
Примеры создания DNS-записей через CRD или через аннотации Ingress/Service можно найти в директории example/.
🎯 Требования
-
ExternalDNS >=
v0.15.0
|
Примечание
|
В версии Более старые версии ExternalDNS могут работать, однако эта возможность в них недоступна. |
-
MikroTik RouterOS (проверено на
7.16stable)
|
Примечание
|
Другие версии RouterOS могут работать, но официально не тестировались. Если вам удалось успешно использовать этот webhook с другой версией ROS, оставьте комментарий в mirceanton/external-dns-provider-mikrotik#141. На данный момент точно известно, что версия |
🚫 Ограничения
Записи с регулярными выражениями (Regexp Records)
Webhook умеет читать записи с заданным regexp, однако сам ExternalDNS управлять ими не может. Это означает, что такие записи необходимо исключать с помощью domainFilters или excludeDomains, чтобы ExternalDNS не пытался взять на себя владение ими.
Проблема состоит в том, что с точки зрения MikroTik DNS-запись может содержать либо поле name, либо поле regexp — они взаимоисключающие.
Это создаёт трудности: даже если создать Endpoint без имени, ExternalDNS всё равно попытается создать TXT-запись для отслеживания владения. Поскольку имя TXT-записи формируется на основе имени основной записи, при его отсутствии создание TXT-записи завершается ошибкой.
Подробнее: mirceanton/external-dns-provider-mikrotik#166
⚙️ Параметры конфигурации
Настройки подключения к MikroTik
| Переменная окружения | Описание | Значение по умолчанию |
|---|---|---|
|
URL, по которому доступен RouterOS API (например, |
— |
|
Имя пользователя для аутентификации в RouterOS API |
— |
|
Пароль для аутентификации в RouterOS API |
— |
|
Пропускать ли проверку TLS ( |
|
|
Путь к файлу собственного CA-сертификата для проверки TLS |
— |
Настройки логирования
| Переменная окружения | Описание | Значение по умолчанию |
|---|---|---|
|
Формат вывода логов ( |
|
|
Уровень детализации логов ( |
|
Настройки значений по умолчанию
| Переменная окружения | Описание | Значение по умолчанию |
|---|---|---|
|
Значение TTL по умолчанию для DNS-записей, у которых TTL не задан |
|
|
Комментарий по умолчанию для DNS-записей, у которых комментарий не задан |
— |
Настройки webhook-сервера
| Переменная окружения | Описание | Значение по умолчанию |
|---|---|---|
|
Адрес хоста, на котором слушает сервер |
|
|
Порт, на котором слушает сервер |
|
|
Время ожидания сервера до завершения операции чтения по таймауту |
— |
|
Время ожидания сервера до завершения операции записи по таймауту |
— |
|
Список доменов, включаемых в фильтр |
Пусто |
|
Список доменов, исключаемых из фильтра |
Пусто |
|
Регулярное выражение для фильтрации доменов |
Пусто |
|
Регулярное выражение для исключения доменов из фильтра |
Пусто |
🚀 Развёртывание
-
Создайте сервисную учётную запись в RouterOS. Этому локальному пользователю необходимы политики
apiиrest-apiдля аутентификации и работы с HTTP API RouterOS, а также политикиreadиwriteдля управления статическими DNS-записями. -
Создайте пространство имён (namespace) Kubernetes для развёртывания External DNS:
--- apiVersion: v1 kind: Namespace metadata: name: external-dns -
Создайте секрет Kubernetes с параметрами подключения к экземпляру RouterOS:
--- apiVersion: v1 kind: Secret metadata: name: mikrotik-credentials namespace: external-dns stringData: MIKROTIK_BASEURL: "https://192.168.88.1:443" MIKROTIK_USERNAME: "external-dns" MIKROTIK_PASSWORD: "external-dns" MIKROTIK_SKIP_TLS_VERIFY: "true" -
Добавьте Helm-репозиторий External DNS и обновите локальный кэш:
helm repo add external-dns https://kubernetes-sigs.github.io/external-dns/ helm repo update -
Настройте значения Helm. Ознакомьтесь с примером файла values.yaml.
-
Установите Helm-чарт External DNS:
helm upgrade --install --namespace external-dns external-dns external-dns/external-dns -f values.yaml
|
Совет
|
По умолчанию поддержка записей MX, NS и SRV отключена и включается через аргумент |
⭐ Статистика звёзд
🤝 Благодарности
Спасибо всем, кто уделяет своё время сообществу Home Operations в Discord.