Без NodeLocal DNSCache DNS-запрос от Pod проходит через:
Service IP → kube-proxy → DNAT → conntrack → CoreDNSВ нагруженных кластерах это увеличивает задержки и создаёт дополнительную нагрузку на таблицу
conntrack.NodeLocal DNSCache запускает локальный DNS-кеш на каждой ноде как
DaemonSet:Pod → локальный DNS-кеш → CoreDNSЕсли запись уже есть в кеше, Pod получает ответ прямо с текущей ноды. При промахе запрос передаётся в CoreDNS.
Преимущества
- быстрее обрабатываются повторные DNS-запросы;
- снижается нагрузка на CoreDNS;
- уменьшается межнодовый DNS-трафик;
- обходятся
kube-proxy и DNAT;- сокращается количество UDP-записей в
conntrack;- доступны DNS-метрики отдельно для каждой ноды.
NodeLocal DNSCache стабилен с Kubernetes 1.18, но обычно его нужно включать отдельно и развернуть
node-local-dns как DaemonSet.🔗 Официальная документация Kubernetes: https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/
