Чистые железные кубернеты DNS не пересылаются

У меня есть кластер кубернетов без операционной системы, настроенный для моих собственных образовательных целей. Это три виртуальные машины - одна главная, две рабочих, работающих под управлением 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
}

на вперед. 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-имена частных LAN. Мне нужно, чтобы CoreDNS перенаправлял на DNS машины, на которой он работает.

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

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

На что еще мне обратить внимание?

-1
задан 8 April 2021 в 18:05
1 ответ

Решено по подсказке Matt's.

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

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

1
ответ дан 24 April 2021 в 03:02

Теги

Похожие вопросы