Kubernetes. Не резолвятся имена в подах

Под CoreDNS собирает DNS записи с каждой ноды кластера Kubernetes из файла /etc/resolv.conf.

Мы столкнулись с проблемой невозможности разрешить имена внутри подов при обращении, например, к srv-nt-postgres-01 внутри сети.




А всё дело в том, что на всех нодах кластера в resolve.conf были такие записи:
$ cat /etc/resolv.conf
# Generated by resolvconf
# Do not edit manually, use
# /etc/net/ifaces/<interface>/resolv.conf instead.
domain company-domain.local
nameserver 172.24.99.2
nameserver 172.24.99.3
nameserver 172.24.99.7

Обратите внимание на строку domain company-domain.local.
А теперь обратите внимание, какую строку передаёт системный под CoreDNS во все поды в файл resolv.conf:
$ kubectl exec -ti busybox -- cat /etc/resolv.conf
search devops.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5

Видите, что там строка search? Так вот. CoreDNS ищет строку search, а у нас на нодах domain. Соответственно, CoreDNS, не найдя строку с search, ничего не добавляет в поды.

А теперь, на всех нодах кластера, поменяем domain на search. В итоге resolv.conf будет выглядеть так:
$ cat /etc/resolv.conf
# Generated by resolvconf
# Do not edit manually, use
# /etc/net/ifaces/<interface>/resolv.conf instead.
search company-domain.local
nameserver 172.24.99.2
nameserver 172.24.99.3
nameserver 172.24.99.7

После внесения изменений перезапустим CoreDNS:
kubectl -n kube-system rollout restart deployment coredns

И перезапустим проблемный под.

Проверяем и видим, что запись company-domain.local была добавлена:
$ kubectl exec -ti busybox -- cat /etc/resolv.conf
search devops.svc.cluster.local svc.cluster.local cluster.local company-domain.local
nameserver 10.96.0.10
options ndots:5

Добавить комментарий