У меня дома есть кластер из 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 модуля подраздел ниже.