feat: добавить аддон yandex-dns-controller — управление DNS Yandex 360

CronJob (*/5 мин) reconcile ConfigMap → Yandex 360 DNS API.
Safe mode: управляет только записями с managed: true.
Никогда не удаляет неуправляемые записи (MX, DKIM, SPF и т.д.).

Удаление только при двух условиях одновременно:
  1. Запись была создана контроллером (есть в state ConfigMap)
  2. Запись полностью удалена из ConfigMap (не просто managed: false)

Переключение managed: true → false = release без удаления из DNS.

API: /directory/v1/org/{org_id}/domains/{domain}/dns
Fields: A→content, CNAME→target, TXT→text, MX→exchange+preference
This commit is contained in:
Sergey Antropoff
2026-04-26 12:16:32 +03:00
parent 5079975d5e
commit 404347b535
23 changed files with 976 additions and 1 deletions

View File

@@ -69,6 +69,7 @@ make addon-netbird
| splitgw | `addon_splitgw` | Прозрачный split-tunnel gateway: sing-box + Hysteria2 TPROXY, YouTube→прокси, RU→прямой | [](../addons/splitgw/README.md) |
| ingress-proxypass | `addon_ingress_proxypass` | Проксировать внешние сервисы (IP:PORT) через ingress-nginx по домену — Service + Endpoints + Ingress | [](../addons/ingress-proxypass/README.md) |
| ingress-add-domains | `addon_ingress_add_domains` | Добавить домены к существующим K8s сервисам — только Ingress, без Service/Endpoints | [](../addons/ingress-add-domains/README.md) |
| yandex-dns-controller | `addon_yandex_dns_controller` | CronJob-контроллер Yandex 360 DNS — ConfigMap → DNS, safe mode (managed:true only) | [](../addons/yandex-dns-controller/README.md) |
## Конфигурация addons.yml

View File

@@ -83,6 +83,9 @@ make addon-ingress-proxypass
make addon-ingress-proxypass ARGS="-e ingress_proxypass_vip=192.168.1.x"
make addon-ingress-add-domains
make addon-yandex-dns-controller
make addon-yandex-dns-controller ARGS="-e yandex_dns_controller_dry_run=true" # dry-run
```
## Управление нодами

View File

@@ -27,6 +27,9 @@
| NetBird: клиент не подключается | DNS не настроен | Настрой A-записи для Management, Signal, Coturn LB IPs |
| MinIO: distributed не поднимается | Мало нод | Distributed требует минимум 4 реплики/ноды |
| Nextcloud: redirect loop | HTTP→HTTPS конфликт | Добавь `TRUSTED_PROXIES` в конфиг Nextcloud |
| yandex-dns-controller: 401 Unauthorized | Неверный токен | Проверь `yandex_dns.token` в vault.yml; токен получается на oauth.yandex.ru |
| yandex-dns-controller: запись не создаётся | managed: false | Убедись что `managed: true` в ConfigMap |
| yandex-dns-controller: старая запись не удалена | Нет в state | Запись была создана вручную, не контроллером — удали вручную если нужно |
| ingress-add-domains: 404 | Ingress не найден в namespace сервиса | `kubectl get ingress -A -l app.kubernetes.io/instance=ingress-add-domains` |
| ingress-add-domains: 503 | Сервис/порт неверный | `kubectl -n <namespace> get svc <name>` — проверь имя и порт |
| ingress-proxypass: 502 Bad Gateway | Кластер не достигает внешний IP | `curl -v http://<external-ip>:<port>` с ноды кластера; проверь файрвол на внешнем хосте |