CoreDNS — один из тех компонентов Kubernetes, о которых редко вспоминают… до тех пор, пока не перестаёт работать DNS. А потом — всё ломается.
Разберём, что это такое и как работает — на простом языке.
Что такое CoreDNS?
CoreDNS — это дефолтный DNS-сервер Kubernetes. Он позволяет подам находить друг друга по имени, например my-service.default.svc.cluster.local
.
Это не просто DNS-сервер. Он модульный, расширяемый и отлично подходит для облачных систем.
Зачем нужен DNS в Kubernetes?
В кластере всё постоянно меняется:
- Поды запускаются и удаляются.
- IP-адреса меняются.
- Сервисы масштабируются.
Привязываться к IP бессмысленно. Вместо этого используется DNS — стабильное имя, которое в момент обращения разрешается в нужный IP.
Как работает CoreDNS
Когда под делает DNS-запрос:
- Он направляется на DNS-сервер кластера — это и есть CoreDNS.
- CoreDNS смотрит конфигурацию (Corefile).
- Если имя совпадает с внутренним сервисом — возвращает IP.
- Если не может разрешить — пробрасывает запрос наружу, например на
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. Понимание его принципов помогает решать сетевые проблемы быстрее и увереннее.
→ Узнать больше: