CoreDNS — один из тех компонентов Kubernetes, о которых редко вспоминают… до тех пор, пока не перестаёт работать DNS. А потом — всё ломается.

Разберём, что это такое и как работает — на простом языке.

Что такое CoreDNS?

CoreDNS — это дефолтный DNS-сервер Kubernetes. Он позволяет подам находить друг друга по имени, например my-service.default.svc.cluster.local.

Это не просто DNS-сервер. Он модульный, расширяемый и отлично подходит для облачных систем.

Зачем нужен DNS в Kubernetes?

В кластере всё постоянно меняется:

  • Поды запускаются и удаляются.
  • IP-адреса меняются.
  • Сервисы масштабируются.

Привязываться к IP бессмысленно. Вместо этого используется DNS — стабильное имя, которое в момент обращения разрешается в нужный IP.

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

Когда под делает DNS-запрос:

  1. Он направляется на DNS-сервер кластера — это и есть CoreDNS.
  2. CoreDNS смотрит конфигурацию (Corefile).
  3. Если имя совпадает с внутренним сервисом — возвращает IP.
  4. Если не может разрешить — пробрасывает запрос наружу, например на 8.8.8.8.

Пример Corefile:

.:53 {
  errors
  health
  kubernetes cluster.local in-addr.arpa ip6.arpa {
    pods insecure
    fallthrough in-addr.arpa ip6.arpa
  }
  forward . /etc/resolv.conf
  cache 30
  loop
  reload
  loadbalance
}

Как посмотреть логи CoreDNS

kubectl -n kube-system logs -l k8s-app=kube-dns

Частые ошибки

  • Высокая задержка DNS — включите кеширование (cache).
  • Ошибки loop — когда CoreDNS сам себя опрашивает.
  • Ошибки в Corefile — особенно в блоках forward и kubernetes.

Вывод

CoreDNS — основа внутреннего DNS и сервис-дискавери в Kubernetes. Понимание его принципов помогает решать сетевые проблемы быстрее и увереннее.

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