Kubernetes中dns解析不生效解决方法(修改kubelet配置文件)
·
需要在集群中部署StatefulSet时,发现使用域名无法解析到对应的ip。
创建dns测试pod:
kubectl run -n train-ticket dns-test --rm -it --image=busybox:1.28 --restart=Never -- sh
运行nslookup指令,无法解析域名。
nslookup nacosdb-mysql-0.nacosdb-mysql
Server: 10.96.0.10
Address 1: 10.96.0.10
nslookup: can't resolve 'nacosdb-mysql-0.nacosdb-mysql'
解析默认的kubernetes.default,也无法解析
nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10
nslookup: can't resolve 'kubernetes.default'
查询相关教程,检查了 CoreDNS 、 kube-dns service 、以及 Pod 的 /etc/resolv.conf
均正常。
多次查询资料+询问chatgpt
最终找到解决方法:修改kubelet的dns设置:
✅ 5. 检查 kubelet 的启动参数
如果 kubelet 没配置 --cluster-dns=10.96.0.10,Pod 的 resolv.conf 会被写成宿主机 DNS(如 8.8.8.8),导致无法解析集群内服务名。
在每台 Node 上执行:
ps aux | grep kubelet | grep cluster-dns
应包含类似参数:
--cluster-dns=10.96.0.10 --cluster-domain=cluster.local
如果 kubelet 没这个参数,Pod 会用宿主机的 DNS(比如 8.8.8.8),而不是 CoreDNS,导致你看到:nslookup kubernetes.default 失败
修改方法
修改kubelet配置文件:
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
添加
Environment="KUBELET_EXTRA_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
重启kubelet:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart kubelet
再次进入dns-test容器,执行nslookup,可以看到成功解析:
nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
测试statufulset的域名,也正常解析:
nslookup nacosdb-mysql-0.nacosdb-mysql.train-ticket
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: nacosdb-mysql-0.nacosdb-mysql.train-ticket
Address 1: 10.244.1.214 10-244-1-214.nacosdb-mysql-follower.train-ticket.svc.cluster.local
更多推荐
所有评论(0)