Голый металл 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
что дает некоторую наглядность представления модуля о сети.