TGViewer
DevOps не горит DevOps не горит @devops_not_burn · 505 subscribers
Post #24 643
Коллеги, всем привет! =)

Поговорим про DNS внутри k8s и зачем нам нужен Node-local-dns
Суть следующая:
— k8s из коробки предоставляет нам весьма удобный Service Discovery (вспомним те же самые сущности типа Service)
— все это настраивается и менеджится автоматически
— да и работает все это весьма неплохо

НО при этом мы можем схватить следующий кейс
У нас в кластере много сервисов (имею ввиду приложений), которые общаются между собой, и подов всех сервисов у нас достаточно много
В какой то момент DNS у нас просто может отказать (из-за перегруза), отказать с концами, что потенциально приведет к практически полному выходу из строя кластера (имеется ввиду что сервисы не смогут найти друг друга по доменным именам или такой поиск будет сильно затруднен)
Ииииии естественно мы однажды встряли с такой проблемой да еще и в проде ^_^
Что с этим можно сделать что бы стало хорошо и не упасть в будущем?

Вспоминаем как устроен DNS:
— authoritative DNS - самый главный DNS сервер, у которого все зоны и всякое такое
— DNS recursor (иногда его еще называют resolver) - для простоты понимания, это проксян, который ооочень быстро обрабатывает DNS запросы, может их кэшировать, и может выполнять некоторую логику, тем самым сильно разгружая authoritative DNS
Получается что в нашем случае (если у вас кубик в проде - у вас тоже ^_^) нам нужен “рекурсор”, который разгрузит kube-dns и упростит/ускорит работу с DNS для приложений внутри k8s
И тут на сцену выходи Node-local-dns =)
Он как раз и будет выполнять роль DNS recursor
У себя мы его деплоим при помощи вот этого чарта
Все достаточно просто, но есть некоторые моменты на которые стоит обратить внимание

Для начала нужно узнать адрес kube dns
Достаточно выполнить команду

kubectl get svc kube-dns -n kube-system -o jsonpath={.spec.clusterIP}

На выходите мы получим ip адрес котрый нам понадобится позже
У себя мы используем cilium в качестве основного CNI, по этому в values нужно добавить следующий блок

config:
localDnsIp: 192.168.14.12 ##Адрес который мы получили ранее, адрес для примера
cilium: ##Создаем ciliumlocalredirectpolicies для редиректа DNS трафика
clusterDNSService: kube-dns
clusterDNSNamespace: kube-system
udp:
enabled: true
portName: dns
tcp:
enabled: true
portName: dns-tcp

После правки этой части values и деплоя чарта у нас появится CiliumLocalRedirectPolicy внутри кластера
Который будет выглядеть так:

apiVersion: cilium.io/v2
kind: CiliumLocalRedirectPolicy
metadata:
annotations:
meta.helm.sh/release-name: node-local-dns
meta.helm.sh/release-namespace: kube-system
labels:
app.kubernetes.io/name: node-local-dns
helm.sh/chart: node-local-dns-1.6.0
helm.toolkit.fluxcd.io/name: node-local-dns
helm.toolkit.fluxcd.io/namespace: kube-system
name: node-local-dns
namespace: kube-system
spec:
redirectBackend:
localEndpointSelector:
matchLabels:
app.kubernetes.io/instance: node-local-dns
app.kubernetes.io/name: node-local-dns
toPorts:
- name: dns
port: "53"
protocol: UDP
- name: dns-tcp
port: "53"
protocol: TCP
redirectFrontend:
serviceMatcher:
namespace: kube-system
serviceName: kube-dns

Нужно нам это как раз для того что бы редиректить DNS запросы к kube-dns сервису, туда куда нам надо, а именно в node-local-dns
Не забываем настроить дополнительные tolerations, если они у вас есть, суть в том что node-local-dns развертывается при помощи Daemonset и полагаться на мысль о том что Daemonset не реагирует на “кастомные” taints не правильно =)
После успешного развертывания скорее всего вам не составит труда навесить мониторинг на node-local-dns
Базовый дашборд, который взят из Grafana Dashboards, выглядит достаточно информативно
Ну и собственно на этом все, основная часть конфига не этом окончена =)
Более подробно как работает DNS внутри k8s вы можете почитать тут
Надеюсь мой пост поможет вам стать более надежными ^_^
  • 🔥 17
  • ❤ 1
More from @devops_not_burn
  1. Sep 22, 2026Коллеги, всем привет! =) Открываю рубрику «Мама, твой сын вайб-кодер!» =) У меня давно в г…
  2. Sep 18, 2026Коллеги, всем привет! =) Сегодня продолжаем записывать наш DevOops Podcast, внезапно! =) В…
  3. Sep 14, 2026DevOops 2026 Коллеги, всем привет! =) Возможно, вы знаете, что я член программного комитет…
  4. Sep 11, 2026Обновление k8s 1.33⇒1.34 Коллеги, всем привет! =) По старой доброй традиции раз в квартал…
  5. Aug 26, 2026Коллеги, всем привет! =) На подходе очередной выпуск DevOops Podcast, к слову, пятый по сч…
  6. Aug 19, 2026Коллеги, всем привет! =) В продолжение темы про обновление Harbor и про хранение артефакто…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →