Организация Linux Foundation опубликовала значительный выпуск DNS-сервера CoreDNS 1.0.0, написанного на языке Go и построенного с использованием наработок проекта Caddy. CoreDNS может применяться в качестве авторитетного, кэширующего или рекурсивного DNS-сервера, предоставляя возможности, достаточные для работы в качестве замены BIND 9, Knot, NSD или PowerDNS. Сервер развивается в направлении максимального упрощения настройки и обеспечения гибкости в реализации задуманных решений. Код распространяется под лицензией Apache 2.0.
Все этапы обработки данных DNS можно контролировать и при необходимости расширять функциональность через плагины. Более того, сам по себе CoreDNS предствляет набор плагинов, в которые вынесены как основные возможности, связанные с DNS (обработка файлов зонами, поддержание кэша, DNSSEC), так и дополнительные функции, такие как обнаружение сервисов Kubernetes, накопление метрик для системы мониторинга Prometheus, поддержка фильтров для перезаписи запросов, интеграция с системой хранения конфигурации etcd, балансировка нагрузки и т.п. DNS-запросы могут приниматься как через традиционные UDP/TCP, так и при помощи TLS (RFC 7858) и gRPC.
Основные возможности:
- Обработка данных доменных зон из файлов, как для DNS, так и для DNSSEC (поддерживается только NSEC);
- Получение данных доменных зон от первичных DNS-серверов (работа в роли вторичного DNS-сервера) с передачей информации посредством AXFR;
- Формирование цифровых подписей для данных DNS-зон на лету (DNSSEC);
- Балансировка нагрузки на несколько серверов;
- Поддержка трансфера зон (работа в роли первичного DNS-сервера);
- Автоматическая загрузка файлов с данными DNS-зон с диска;
- Работа в роли кэширующего сервера;
- Средства для проверки работоспособности узлов (плагин health);
- Поддержка использования etcd в качестве бэкенда и работы в роли замены SkyDNS;
- Поддержка использования k8s (kubernetes);
- Поддержка функционирования в роли прокси для перенаправления запросов на другие серверы (рекурсивный сервер);
- Предоставления метрик для систем мониторинга;
- Предоставление логов запросов и ошибок;
- Поддержка DNS-класса CH, используемого в Chaosnet;
- Наличие средств для профилирования работы;
- Возможности перезаписи запросов (qtype, qclass и qname);
- Работа в роли сервиса whoami.
В новом выпуске значительно улучшены возможности для интеграции с платформой оркестровки контейнеров Kubernetes — CoreDNS теперь может применяться для организации работы службы DNS в качестве полноценной замены kube-dns. При этом CoreDNS демонстрирует более высокую производительность и достаточно скромные требования к ресурсам. Например, при использовании в кластере из 5000 серверов с нагрузкой 18 тысяч DNS-запросов в секунду, CoreDNS потребляет около 73 Мб ОЗУ, в то время как kube-dns расходует 97 Мб ОЗУ и способен обработать только 7 тысяч DNS-запросов в секунду.
В CoreDNS также добавлена порция дополнительных возможностей для Kubernete, отсутствующих в kube-dns, таких как фильтрация записей по метке или пространству имён, режим верификации pod-ов, получение данных через endpoint_pod_names, реализация поиска специфичных для пространств имён путей на стороне сервера, возможность создания собственных DNS-записей.