Идеальные настройки для 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.confsystemd-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. Проверьте здесь для получения дополнительной информации.

Другие вопросы по тегам