k8s域名解析错误:pod中/etc/reslove.conf中nameserver和kube-dns中ip不一致
问题:
k8s集群中,某台node节点上,dns解析失败,进入pod中 查看/etc/reslove.conf 中nameserver和kube-dns不一致,如图:
pod中如下:
kube-dns如下:
造成这种现象的原因,可能是重装k8s集群的时候,这台node节点上kubelet的启动参数,用的是原来集群的配置文件,也就是/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,(k8s组件是通过systemctl来管理的,因此可以在/etc/systemd/system)这个文件是原来集群的配置文件,其中kubelet的启动参数里--cluster-dns用的是原先的ip,所以导致dns解析失败。
解决方案:
一,如果这个问题是在node节点上:
1.1,查看kubelet的启动参数:ps -ef |grep kubelet
1.2,修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 文件中的--cluster-dns ,使它和kube-dns的ip一致:
- sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- sudo cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
1.3,重启kubelet:
- sudo systemctl stop kubelet
- sudo systemctl daemon-reload
- sudo systemctl start kubelet
1.4,查看kubelet启动参数是否生效,生效后,dns解析问题就解决了
二,如果这个问题是mater节点上:
2.1,如果是mater节点上,/etc/systemd/system/kubelet.service.d/10-kubeadm.conf里是没有cluster-dns这个参数变量的,kubelet的参数都在/var/lib/kubelet/config.yaml中
2.2,重启kubelet
参考:DNS 解析异常 - Kubernetes 实践指南 (imroc.cc)