Голый металл Kubernetes DNS не пересылает

У меня есть кластер Kubernetes на «голом железе», настроенный для моих собственных образовательных целей. Это три виртуальные машины — одна главная, две рабочие, работающие под управлением Ubuntu 20.04. У меня проблемы с модулями, пересылающими DNS-запросы.

CoreDNS работает

      kubectl get po --all-namespaces |grep dns
kube-system      coredns-74ff55c5b-cdvcv                   1/1     Running   11         4d

Имеет ожидаемый IP-адрес кластера.

      kubectl get svc kube-dns -n kube-system
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   4d

Однако он не может разрешать имена, как, например, эта попытка на главном узле:

      nslookup github.com 10.96.0.10
Server:     10.96.0.10
Address:    10.96.0.10#53

** server can't find github.com: SERVFAIL

Если я отредактирую ConfigMap.yaml

      forward . /etc/resolv.conf {
    max_concurrent 1000
}

кforward . 8.8.8.8 {тогда это сработает.

      nslookup github.com 10.96.0.10
Server:     10.96.0.10
Address:    10.96.0.10#53

Non-authoritative answer:
Name:   github.com
Address: 140.82.112.3

Однако это, очевидно, не разрешит частные DNS-имена локальной сети. Мне нужно, чтобы CoreDNS пересылал данные на DNS машины, на которой он работает.

Я использую k8s 1.20.3, который, как я понимаю, больше не имеет проблем с бесконечным циклом из-за заглушки Ubunturesolv.conf. Кроме того, я пробовал грубую силу, удалив символическую ссылку./etc/resolv.confи воссоздать его, чтобы указать на/run/systemd/resolve/resolv.confна каждой виртуальной машине перезагрузите каждую, и ничего не улучшится.

Я обнаружил, что модуль не может проверить связь с DNS хост-машины (192.168.149.2), так что, похоже, проблема именно в этом, но я не знаю, что с этим делать.

На что еще мне следует обратить внимание?

1 ответ

Решено по подсказкам HelloWorld .

Обратите особое внимание на первоначальную настройку кластера. Инструкции в Интернете могут привести к тому, что вы упустите из виду перекрывающийся диапазон IP-адресов. Частные IP-адреса Kubernetes должны быть отделены от частных IP-адресов, внешних по отношению к кластеру.

Используйте такой инструмент, какkubectl run curl-busybox --image=radial/busyboxplus:curl -i --tty --rmкcurl,nslookupиip aчто дает некоторую наглядность представления модуля о сети.

Другие вопросы по тегам