Что такое CoreDNS?

CoreDNS — это гибкий, расширяемый DNS сервер, написанный на Go, который служит как DNS сервер и service discovery механизм для cloud-native приложений. Используется по умолчанию в Kubernetes для разрешения DNS имен внутри кластера.

Основные возможности CoreDNS

  • Plugin architecture — модульная архитектура с множеством плагинов
  • Service discovery — автоматическое обнаружение сервисов
  • Zone files — поддержка стандартных DNS zone файлов
  • API integration — интеграция с различными API (Kubernetes, etcd)
  • Health checking — проверка доступности backend сервисов
  • Load balancing — балансировка нагрузки между DNS ответами

Архитектура CoreDNS

  • Core — основной движок обработки DNS запросов
  • Plugins — расширяемые модули функциональности
  • Middleware chain — цепочка обработки запросов
  • Corefile — конфигурационный файл

Установка CoreDNS

 1# Скачивание бинарного файла
 2wget https://github.com/coredns/coredns/releases/download/v1.11.1/coredns_1.11.1_linux_amd64.tgz
 3tar -xzf coredns_1.11.1_linux_amd64.tgz
 4sudo mv coredns /usr/local/bin/
 5
 6# Установка через package manager (Ubuntu)
 7sudo apt update
 8sudo apt install coredns
 9
10# Запуск CoreDNS
11coredns -conf Corefile

Пример конфигурации Corefile

 1# Базовая конфигурация
 2.:53 {
 3    # Обработка всех доменов на порту 53
 4    errors
 5    health {
 6        lameduck 5s
 7    }
 8    ready
 9    kubernetes cluster.local in-addr.arpa ip6.arpa {
10        pods insecure
11        fallthrough in-addr.arpa ip6.arpa
12        ttl 30
13    }
14    prometheus :9153
15    forward . /etc/resolv.conf {
16        max_concurrent 1000
17    }
18    cache 30
19    loop
20    reload
21    loadbalance
22}

Конфигурация для Kubernetes

 1# ConfigMap для CoreDNS в Kubernetes
 2apiVersion: v1
 3kind: ConfigMap
 4metadata:
 5  name: coredns
 6  namespace: kube-system
 7data:
 8  Corefile: |
 9    .:53 {
10        errors
11        health {
12            lameduck 5s
13        }
14        ready
15        kubernetes cluster.local in-addr.arpa ip6.arpa {
16            pods insecure
17            fallthrough in-addr.arpa ip6.arpa
18            ttl 30
19        }
20        prometheus :9153
21        forward . /etc/resolv.conf
22        cache 30
23        loop
24        reload
25        loadbalance
26    }

Основные плагины CoreDNS

  • kubernetes — интеграция с Kubernetes API
  • file — обслуживание DNS зон из файлов
  • forward — пересылка запросов upstream серверам
  • cache — кеширование DNS ответов
  • health — health check endpoint
  • metrics — экспорт метрик для мониторинга
  • rewrite — перезапись DNS запросов и ответов
  • loadbalance — балансировка A/AAAA записей

Когда использовать CoreDNS

  • Kubernetes кластеры (используется по умолчанию)
  • Microservices архитектуры с service discovery
  • Cloud-native приложения
  • Гибридные и multi-cloud окружения
  • Необходимость в программируемом DNS сервере
  • Интеграция DNS с различными backend системами

Преимущества CoreDNS

  • Гибкость — модульная архитектура с плагинами
  • Performance — высокая производительность и низкая задержка
  • Cloud-native — разработан специально для современных архитектур
  • Kubernetes integration — нативная интеграция с Kubernetes
  • Observability — встроенные метрики и логирование
  • Extensibility — легко расширяется через плагины

Мониторинг CoreDNS

1# Проверка health endpoint
2curl http://localhost:8080/health
3
4# Метрики Prometheus
5curl http://localhost:9153/metrics
6
7# Проверка готовности
8curl http://localhost:8181/ready

Отладка и troubleshooting

1# Проверка DNS резолюции
2dig @coredns-ip example.com
3
4# Логи CoreDNS в Kubernetes
5kubectl logs -n kube-system deployment/coredns
6
7# Проверка конфигурации
8kubectl get configmap coredns -n kube-system -o yaml

Альтернативы CoreDNS

  • BIND — традиционный DNS сервер
  • PowerDNS — высокопроизводительный DNS сервер
  • Unbound — validating DNS resolver
  • dnsmasq — легковесный DNS forwarder
  • Consul — service discovery с DNS интерфейсом
  • kube-dns — предыдущий DNS сервер для Kubernetes

FAQ

Подходит ли CoreDNS для продакшена?

Да, CoreDNS широко используется в production как DNS сервер по умолчанию в Kubernetes и зарекомендовал себя как надежное и производительное решение.

Какие требования к инфраструктуре?

CoreDNS имеет минимальные требования к ресурсам и может работать на различных платформах. В Kubernetes обычно требует 170MB памяти и 100m CPU на pod.

Как мигрировать с kube-dns на CoreDNS?

В современных версиях Kubernetes CoreDNS используется по умолчанию. Миграция обычно происходит автоматически при обновлении кластера.