我为自己的教育目的设置了一个裸机 kubernetes 集群。它有三台虚拟机 - 一台主虚拟机、两台从虚拟机,运行 Ubuntu 20.04。我在 pod 转发 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
但是,这显然无法解析私有 LAN DNS 名称。我需要 CoreDNS 转发到它运行的机器的 DNS。
我正在运行 k8s 1.20.3,据我所知,由于 Ubuntu 的存根,它不再存在无限循环的问题resolv.conf
。此外,我尝试过强制删除符号链接/etc/resolv.conf
并重新创建它以指向/run/systemd/resolve/resolv.conf
每个虚拟机,重新启动每个虚拟机,但没有任何改善。
我发现 pod 无法 ping 主机的 DNS(192.168.149.2),所以看起来好像是问题所在,但我不知道该怎么办。
我还应该关注什么?
答案1
已解决马特的线索。
请密切关注初始集群设置。在线说明可能会导致您忽略重叠的 IP 范围。Kubernetes 私有 IP 必须与集群外部的私有 IP 分开。
kubectl run curl-busybox --image=radial/busyboxplus:curl -i --tty --rm
使用像和 这样的工具curl
,nslookup
它ip a
可以为 pod 的网络视图提供一定的可见性。