LINUX.ORG.RU

Не работает DNS kubernetes внутри контейнеров?

 , ,


0

2

Нет резолва внутри docker-контейнеров на кластере Kubernetes. На физической машине все ок.

Сам конфиг coredns виглядит так:

apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap

В логах пода coredns слудующее:

2019/01/11 11:11:09 [INFO] plugin/reload: Running configuration MD5 = 2e2180a5eeb3ebf92a5100ab081a6381
2019/01/11 11:11:09 [INFO] Reloading complete
2019/01/11 11:11:09 [ERROR] 2 466801387614899657.3058825008286684608. HINFO: unreachable backend: no upstream host

Внутри контейнера файл /etc/resolv.conf выглядит:

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

Не могу понять почему внутри контейнеров не работает dns. Может кто-то сталкивался с такой проблемой?



Последнее исправление: perrfect (всего исправлений: 1)

пода coredns

proxy . /etc/resolv.conf

Ты себе случайно кольцо из ресолверов не устроил? Что в /etc/resolv.conf в поде coredns?

intelfx ★★★★★
()

Это из за системдешного resolved-сервиса.
Если ты посмотришь, у тебя в resolv.conf написанно, что nameserver 127.0.0.1 (и локально эта конфигурация как-то работает за счет systemd-resolvd), этот же resolv.conf влияет на сеть кубера, и оно пытаются резолвить имена через локалхост.
Я у себя решил написав вот так вот:

apiVersion: v1
data:
  Corefile: |
    .:53 {
        ...       
        proxy . /etc/resolv.conf 10.2.10.1
        ...
    }
kind: ConfigMap

(нужно подставить рабочий DNS сервер в вашей сети, у меня это соответственно 10.2.10.1)

sphericalhorse ★★★★★
()
Последнее исправление: sphericalhorse (всего исправлений: 6)
Ответ на: комментарий от deadNightTiger
root@backend-7b6cbc6d56-mwpvm:/# curl -v 10.96.0.10:8080/health
* Hostname was NOT found in DNS cache
*   Trying 10.96.0.10...
* connect to 10.96.0.10 port 8080 failed: No route to host
* Failed to connect to 10.96.0.10 port 8080: No route to host
* Closing connection 0
curl: (7) Failed to connect to 10.96.0.10 port 8080: No route to host
perrfect
() автор топика
Ответ на: комментарий от sphericalhorse

Сделал. Но по прежнему резолва нет. Может нужно дропнуть после этого pod coredns или pod с которого проверяю?

perrfect
() автор топика
Ответ на: комментарий от sphericalhorse

Перезапустил coredns. В логах coredns ошибок уже нет. Но с контейнера резолв не работает:

ping google.com
ping: unknown host

В конфиг coredns добавил:

        proxy . /etc/resolv.conf 10.244.0.121

perrfect
() автор топика
Ответ на: комментарий от sphericalhorse

systemd-resolved использует 127.0.0.53. А ещё systemd-resolved нигде по умолчанию не используется. Если и так, там dnsmasq будет.

intelfx ★★★★★
()
Ответ на: комментарий от deadNightTiger

Попробовал через ip самого пода 10.96.0.10 Результат тот же.

perrfect
() автор топика
Ответ на: комментарий от intelfx

Ну я с проблемой описанной в топике столкнулся на локальном кубер-кластере установленном на моей Убунте 16-ой. У меня в resolv.conf именно 127.0.0.1. Хотя может это и dnsmask сделал. Я в деталях не разбирался.

sphericalhorse ★★★★★
()
Ответ на: комментарий от sphericalhorse

У меня Centos7. Я уже начитаю думать может проблема в firewalld. Хотя форвардинг включен.

perrfect
() автор топика
Ответ на: комментарий от intelfx

Спасибо всем огромное за помощь. Проблема действительно была в firewalld.

Отключил его:

systemctl mask firewald

perrfect
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.