У меня есть кластер кубернетов без операционной системы, настроенный для моих собственных образовательных целей. Это три виртуальные машины - одна главная, две рабочих, работающих под управлением 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), так что, похоже, проблема в этом, но я не знаю, что с этим делать.
На что еще мне обратить внимание?
Решено по подсказке Matt's.
Обратите пристальное внимание на начальную настройку кластера. Инструкции в Интернете могут привести к тому, что вы не заметите перекрывающийся диапазон IP-адресов. Частные IP-адреса Kubernetes должны быть отделены от частных IP-адресов, внешних по отношению к кластеру.
Используйте такой инструмент, как kubectl run curl-busybox --image=radial/busyboxplus:curl -i --tty --rm
для curl
, nslookup
и ip a
, который дает некоторую видимость сетевого представления стручка.