[英]Can't resolve dns from inside k8s pod
在 dnsutils pod exec ping stackoverflow.com
/ # ping stackoverflow.com
ping: bad address 'stackoverflow.com'
/etc/resolve.conf
文件从 pod 内部看起来不错
/ # cat /etc/resolv.conf
nameserver 10.96.0.10
search weika.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
10.96.0.10
是 kube-dns 服务 ip:
[root@test3 k8s]# kubectl -n kube-system get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 75d
core dns
[root@test3 k8s]# kubectl -n kube-system get pod -o wide | grep core
coredns-6557d7f7d6-5nkv7 1/1 Running 0 10d 10.244.0.14 test3.weikayuninternal.com <none> <none>
coredns-6557d7f7d6-gtrgc 1/1 Running 0 10d 10.244.0.13 test3.weikayuninternal.com <none> <none>
当我将名称服务器 ip 更改为 coredns ip 时。解析 dns 就可以了。
/ # cat /etc/resolv.conf
nameserver 10.244.0.14
#nameserver 10.96.0.10
search weika.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
/ # ping stackoverflow.com
PING stackoverflow.com (151.101.65.69): 56 data bytes
64 bytes from 151.101.65.69: seq=0 ttl=49 time=100.497 ms
64 bytes from 151.101.65.69: seq=1 ttl=49 time=101.014 ms
64 bytes from 151.101.65.69: seq=2 ttl=49 time=100.462 ms
64 bytes from 151.101.65.69: seq=3 ttl=49 time=101.465 ms
64 bytes from 151.101.65.69: seq=4 ttl=49 time=100.318 ms
^C
--- stackoverflow.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 100.318/100.751/101.465 ms
/ #
为什么会这样?
您还没有提到 kubernetes 是如何安装的。 您应该使用以下命令重新启动 coredns pod。
kubectl -n kube-system rollout restart deployment coredns
这可能仅适用于您在初始安装microk8s
或启用dns
插件期间出现问题的情况,但它可能仍然值得一试。 我在这方面投入了太多的时间,如果我不至少分享帮助那个人的话,我就无法忍受自己。
在我的例子中,我配置的用于设置单节点集群的服务器太小——只有 1GB 的 memory。当我第一次设置 microk8s 并启用我想要的所有插件时(dns、ingress、hostpath-storage ), 我开始遇到问题,只需给服务器更多 memory 就可以解决这些问题。不幸的是,最初搞砸了似乎让插件处于某种未定义、部分初始化/配置的状态 state,这样一切似乎都在运行通常我能说的最好(即 CoreDNS 已部署并准备就绪,并且kube-dns
服务显示 CoreDNS 的 ClusterIP 作为它的后端端点)但是我的 pod 都无法解析集群内部或外部的任何 DNS 名称,我会得到当我运行kubectl describe <pod>
时, 这些烦人的事件日志表明存在某种 DNS 问题。
最终修复它的是重置集群 ( microk8s reset --destroy-storage
),然后重新启用我的所有插件 ( microk8s enable dns ingress hostpath-storage
),现在我有足够的 memory 可以干净利落地这样做。 在那之后,CoreDNS 和kube-dns
服务看起来像以前一样准备就绪,但 DNS 查询实际上在集群中运行的 pod 中正常工作。
TL;博士; - 您的dns
插件可能在集群安装过程中已损坏。 尝试重置您的集群,重新启用插件,并重新部署您的资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.