Согласно официальной документации :
Начиная с 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
», он наследует конфигурацию разрешения имен от узла, к которому подключен модуль.работает на.DNS-разрешение модуля должно вести себя так же, как и узел.Но смотрите Известные проблемы .
Если вы не хотите этого или если вам нужна другая конфигурация DNS для модулей, вы можете использовать флаг --resolv-conf
кублета.Установите этот флаг на «», чтобы блоки не могли наследовать DNS.Задайте для него правильный путь к файлу, чтобы указать файл, отличный от /etc/resolv.conf
для наследования DNS.
Известная проблема :
В некоторых дистрибутивах Linux (например, Ubuntu) используйтелокальный DNS-преобразователь по умолчанию (systemd-resolved).Systemd-resolved перемещает и заменяет /etc/resolv.conf
заглушкой, которая может вызвать фатальный цикл пересылки при разрешении имен на вышестоящих серверах.Это можно исправить вручную, используя флаг --resolv-conf
kubelet, чтобы указать на правильный resolv.conf
(с systemd-resolved
, это /run/systemd/resolve/resolv.conf
).kubeadm 1.11 автоматически обнаруживает systemd-resolved
и соответствующим образом настраивает флаги kubelet.
Установки Kubernetes не настраивают файлы resolv.conf
узлов для использования DNS кластера по умолчанию, поскольку этот процесс по своей сути зависит от распределения.Это, вероятно, должно быть реализовано в конечном итоге.
libc Linux невозможно застрял ( см. Эту ошибку 2005 ) с ограничением только 3 DNS nameserver
записей и 6 DNS search
записей.Kubernetes должен потреблять 1 nameserver
запись и 3 search
запись.Это означает, что если локальная установка уже использует 3 nameserver
с или использует более 3 search
с, некоторые из этих настроек будут потеряны.В качестве частичного обходного пути узел может запустить dnsmasq
, который предоставит больше nameserver
записей, но не больше search
записей.Вы также можете использовать флаг --resolv-conf
kubelet.
Если вы используете Alpine версии 3.3 или более раннюю в качестве базового образа, DNS может работать некорректно из-за известной проблемы с Alpine.Проверьте здесь для получения дополнительной информации.