Все зависит от dnsPolicy , установленного вами в файле конфигурации развертывания вашего приложения.
Когда dnsPolicy модуля Pod имеет значение “default”,
, он наследует конфигурацию разрешения имен от узла, на котором работает модуль Pod. DNS-разрешение модуля должно вести себя так же, как и узел.
1. Во многих Linux дистрибутивах (например, Ubuntu) по умолчанию используется локальный преобразователь DNS (systemd-resolved). Systemd-resolved перемещает и заменяет /etc/resolv.conf
заглушкой, что может привести к фатальной пересылке l oop при разрешении имен на вышестоящих серверах. Это можно исправить вручную, используя флаг --resolv-conf
kubelet, чтобы указать на правильный resolv.conf (для systemd-resolved это /run/systemd/resolve/resolv.conf
). kubeadm (> = 1.11 ) автоматически определяет systemd-resolved и соответствующим образом корректирует флаги kubelet.
Установки Kubernetes не настраивают файлы resolv.conf узлов для использования DNS кластера по умолчанию потому что этот процесс по своей сути определяется дистрибутивом c. Это, вероятно, должно быть реализовано в конечном итоге.
2. lib c в Linux невозможно (застрял в этой ошибке 2005 года) с ограничением в 3 записи DNS-сервера имен и 6 DNS-записей поиска. Kubernetes должен потреблять 1 запись сервера имен и 3 записи поиска. Это означает, что если локальная установка уже использует 3 сервера имен или использует более 3 поисков, некоторые из этих настроек будут потеряны. В качестве частичного обходного пути узел может запустить dnsmasq, который предоставит больше записей сервера имен, но не больше записей поиска. Вы также можете использовать флаг --resolv-conf
kubelet.
3 . Убедитесь, что вы не используете Alpine версии 3.3 или более ранней версии в качестве базового образа, тогда DNS может работать некорректно.
Пожалуйста, посмотрите здесь: dns-kubernetes-known -issues .