Назад | Перейти на главную страницу

Kubernetes pod /etc/resolv.conf имеет неправильный сервер имен

У меня дома есть кластер из 4 узлов, с которым я играю, и столкнулся с проблемой, когда начал пытаться установить связь между модулями. Я использовал Kubespray для установки узлов (1 «сервер / контроллер» и 3 «узла»).

Проблема в том, что я не могу разрешить службы по имени, только IP. Например, я использовал Helm для запуска Jeknins в пространстве имен по умолчанию с именем службы «jenkins», но если я попытаюсь выполнить ping «jenkins» или «jenkins.default», это не разрешится. Делать dig jenkins или dig jenkins.default в поде dnsutils производит:

/ # dig jenkins.default

; <<>> DiG 9.11.6-P1 <<>> jenkins.default
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 8927
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 229fbf94bb25564ae66dc8f45e7f646e5abb5f9dd4ede1d7 (good)
;; QUESTION SECTION:
;jenkins.default.       IN  A

;; Query time: 0 msec
;; SERVER: 169.254.25.10#53(169.254.25.10)
;; WHEN: Sat Mar 28 14:51:26 UTC 2020
;; MSG SIZE  rcvd: 72

Проверка /etc/resolv.conf файл в модуле dnsutils, я заметил, что для него установлен странный IP-адрес nameserver: 169.254.25.10. После просмотра всех модулей кажется, что все они имеют одинаковую конфигурацию, но для службы coredns установлено значение 10.233.0.3. Фактически, все IP-адреса 10. что-то. Изменение вручную /etc/resolv.conf в модуле dnsutils, чтобы использовать 10.233.0.3 для сервера имен, казалось, исправил это для этого модуля, но как мне исправить это для ВСЕХ модулей? А откуда вообще этот IP 169.254.25.10? Мой реальный сетевой DNS-сервер - 10.0.0.5, и, насколько мне известно, в моей внутренней сети нет 169.254 IP-адресов.

Как мы можем прочитать из Kubernetes dosc Настройка службы DNS:

Если стручок dnsPolicy установлен на «default”, Он наследует конфигурацию разрешения имен от узла, на котором работает Pod. Разрешение DNS модуля должно вести себя так же, как и узел.

Если вы этого не хотите или вам нужна другая конфигурация DNS для подов, вы можете использовать --resolv-conf флаг. Установите для этого флага значение «», чтобы блоки не наследовали DNS. Задайте для него допустимый путь к файлу, чтобы указать файл, отличный от /etc/resolv.conf для наследования DNS.

Что касается Политика Pod в отношении DNS являются следующими:

Политики DNS могут быть установлены для каждого модуля. В настоящее время Kubernetes поддерживает следующие политики DNS для конкретных подов. Эти политики указаны в dnsPolicy поле Pod Spec.

  • «Default«: Модуль наследует конфигурацию разрешения имен от узла, на котором работают модули. Видеть связанное обсуждение Больше подробностей.
  • «ClusterFirst«: Любой DNS-запрос, не соответствующий настроенному суффиксу домена кластера, например«www.kubernetes.io”, Перенаправляется на вышестоящий сервер имен, унаследованный от узла. Администраторы кластера могут настроить дополнительный домен-заглушку и вышестоящие DNS-серверы. Видеть связанное обсуждение для получения подробной информации о том, как обрабатываются DNS-запросы в таких случаях.
  • «ClusterFirstWithHostNet«: Для модулей, работающих с hostNetwork, вы должны явно указать его политику DNS»ClusterFirstWithHostNet».
  • «None«: Он позволяет модулю игнорировать настройки DNS из среды Kubernetes. Все настройки DNS должны быть предоставлены с помощью dnsConfig в поле Pod Spec. Видеть Конфигурация DNS модуля подраздел ниже.