Идеальные настройки для Kubernetes DNS для использования systemd resolvd entires
Я собираюсь развернуть новый кластер K8S с использованием KubeSpray. На моих агентах я запускаю resolvd, который не принимает настройки DNS от /etc/resolvd.conf
а скорее берет это из /etc/systemd/resolved.conf
,
Итак, какую настройку DNS лучше всего использовать? CoreDNS? KubeDNS? Просто хочу убедиться, что развертываемые мной модули используют те же DNS-серверы, которые настроены на узлах моего агента.
что должен быть мой выбор для
# Can be dnsmasq_kubedns, kubedns, coredns, coredns_dual, manual or none
dns_mode: kubedns
# Set manual server if using a custom cluster DNS server
#manual_dns_server: 10.x.x.x
# Can be docker_dns, host_resolvconf or none
resolvconf_mode: docker_dns
?
1 ответ
Согласно официальной документации:
Начиная с Kubernetes v1.12, CoreDNS - это рекомендуемый DNS-сервер, заменяющий kube-dns. Тем не менее, kube-dns все еще может быть установлен по умолчанию с некоторыми инструментами установщика Kubernetes. Обратитесь к документации, предоставленной вашим установщиком, чтобы узнать, какой DNS-сервер установлен по умолчанию.
Развертывание CoreDNS предоставляется как служба Kubernetes со статическим IP-адресом. И CoreDNS, и служба kube-dns названы kube-dns
в metadata.name
поле. Это сделано для того, чтобы обеспечить большую совместимость с рабочими нагрузками, которые опирались на устаревшие kube-dns
Имя службы для разрешения адресов внутри кластера. Он абстрагирует детали реализации того, какой DNS-провайдер работает за этой общей конечной точкой.
Если стручок dnsPolicy
установлен на "default
”, Он наследует конфигурацию разрешения имен от узла, на котором работает Pod. DNS-разрешение модуля должно вести себя так же, как и узел. Но посмотрите Известные проблемы.
Если вы не хотите этого, или если вы хотите другую конфигурацию DNS для модулей, вы можете использовать Kubelet's --resolv-conf
флаг. Установите этот флаг на "", чтобы блоки не могли наследовать DNS. Установите правильный путь к файлу, чтобы указать файл, отличный от /etc/resolv.conf
для наследования DNS.
В некоторых дистрибутивах Linux (например, Ubuntu) по умолчанию используется локальный преобразователь DNS (systemd-resolved). Systemd-разрешенные шаги и замены /etc/resolv.conf
с заглушкой, которая может вызвать фатальный цикл пересылки при разрешении имен на вышестоящих серверах. Это можно исправить вручную с помощью Kubelet --resolv-conf
флаг, указывающий на правильный resolv.conf
(С systemd-resolved
, это /run/systemd/resolve/resolv.conf
). kubeadm 1.11 автоматически обнаруживает systemd-resolved
и соответственно настраивает флаги кубелетов.
Установки Kubernetes не настраивают узлы resolv.conf
файлы для использования кластерного DNS по умолчанию, поскольку этот процесс по своей сути зависит от распределения. Это, вероятно, должно быть реализовано в конце концов.
Libc в Linux невозможно застрять ( см. Эту ошибку 2005 года) с ограничениями всего в 3 DNS nameserver
записей и 6 DNS search
записей. Кубернетес должен потреблять 1 nameserver
запись и 3 search
записей. Это означает, что если локальная установка уже использует 3 nameserver
с или использует более 3 search
Да, некоторые из этих настроек будут потеряны. В качестве частичного обходного пути узел может работать dnsmasq
который обеспечит больше nameserver
записи, но не более search
записей. Вы также можете использовать Kubelet's --resolv-conf
флаг.
Если вы используете Alpine версии 3.3 или более раннюю в качестве базового образа, DNS может работать некорректно из-за известной проблемы с Alpine. Проверьте здесь для получения дополнительной информации.