Когда речь заходит о производительности, в Kubernetes важен каждый DNS-запрос.
Без NodeLocal DNSCache поды отправляют DNS-запросы на Service IP
kube-dns/CoreDNS.Эти запросы проходят через
kube-proxy, правила DNAT и conntrack, прежде чем попасть в CoreDNS.В загруженных кластерах это может приводить к дополнительным задержкам и увеличивать нагрузку на таблицу
conntrack.NodeLocal DNSCache решает эту проблему, разворачивая локальный DNS-кеш на каждой ноде в виде
DaemonSet.В результате поды обращаются не напрямую к CoreDNS, а к локальному DNS-кешу на той же ноде.
Основные преимущества:
- Сокращает среднее время DNS-резолвинга, поскольку многие запросы обрабатываются локально из DNS-кеша.
- Снижает нагрузку на CoreDNS.
- Помогает избежать переполнения таблицы
conntrack, так как соединения между подами и локальным DNS-кешем не создают записей в conntrack.- DNS-запросы к внешним доменам могут форвардиться напрямую, без участия CoreDNS.
Примечание: NodeLocal DNSCache не включён в Kubernetes по умолчанию.
Для его использования необходимо вручную развернуть
DaemonSet с NodeLocal DNSCache (за исключением некоторых managed-решений, например GKE Autopilot, где эта функциональность уже включена по умолчанию).👉 DevOps Portal
