Что такое NodeLocalDNS?

NodeLocalDNS — это дополнительный компонент в Kubernetes, который ускоряет и стабилизирует работу DNS, запуская локальный кэширующий DNS-сервер на каждой ноде.

Вместо того чтобы каждая DNS-запрос шёл по сети к kube-dns или CoreDNS, он обрабатывается локально на ноде. Это снижает задержки и уменьшает нагрузку на общий DNS сервис кластера.


Зачем использовать NodeLocalDNS?

  • Быстрее разрешение DNS — ответы кэшируются локально.
  • 🔻 Меньше нагрузки на CoreDNS/kube-dns.
  • 🛡 Более стабильная работа — при сбоях центрального DNS кэш продолжит работать.

Как работает NodeLocalDNS

Простой порядок действий:

  1. Под делает DNS-запрос (например, my-service.default.svc.cluster.local).
  2. Запрос отправляется на локальный IP (обычно 169.254.20.10) вместо центрального DNS.
  3. NodeLocalDNS агент либо возвращает результат из кэша, либо обращается к CoreDNS.

Таким образом, большинство DNS-трафика остаётся внутри ноды.


Пример включения NodeLocalDNS

Примените стандартную манифестацию (для kubeadm-кластера):

kubectl apply -f https://k8s.io/examples/admin/nodelocaldns/nodelocaldns.yaml

Проверьте, что поды nodelocaldns запущены на всех нодах:

kubectl get pods -n kube-system -l k8s-app=nodelocaldns

Где особенно полезен NodeLocalDNS

  • Кластеры с частой перезапуском подов.
  • Приложения с частыми DNS-запросами.
  • Проблемы с производительностью CoreDNS.

Вывод

NodeLocalDNS — лёгкий способ ускорить DNS в Kubernetes и уменьшить нагрузку на CoreDNS. Прост в установке и даёт ощутимый прирост стабильности и скорости.

→ Узнать больше: