Что такое NodeLocalDNS?
NodeLocalDNS — это дополнительный компонент в Kubernetes, который ускоряет и стабилизирует работу DNS, запуская локальный кэширующий DNS-сервер на каждой ноде.
Вместо того чтобы каждая DNS-запрос шёл по сети к kube-dns
или CoreDNS
, он обрабатывается локально на ноде. Это снижает задержки и уменьшает нагрузку на общий DNS сервис кластера.
Зачем использовать NodeLocalDNS?
- ⚡ Быстрее разрешение DNS — ответы кэшируются локально.
- 🔻 Меньше нагрузки на CoreDNS/kube-dns.
- 🛡 Более стабильная работа — при сбоях центрального DNS кэш продолжит работать.
Как работает NodeLocalDNS
Простой порядок действий:
- Под делает DNS-запрос (например,
my-service.default.svc.cluster.local
). - Запрос отправляется на локальный IP (обычно
169.254.20.10
) вместо центрального DNS. - 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. Прост в установке и даёт ощутимый прирост стабильности и скорости.
→ Узнать больше: