问题形容:
本环境k8s版本为:v1.22.2
在部署k8s集群的时候抉择装置了NodeLocal DNSCache服务以便减速各个节点POD的DNS解析速度,然而因为某些起因须要删除DNSCache服务,在应用部署NodeLocal DNSCache的yaml文件删除DnsCache相干的POD后再次新建的POD还是会或取到之前配置的NodeLocal DNSCache的地址。导致在删除NodeLocal DNSCache相干的POD后无奈失常解析域名。
问题景象:
在删除NodeLocal DNSCache相干POD后依然获取的是169.254.20.10的地址,导致无奈失常解析集群内域名。
root@master01:~# kubectl run --iamge=busybox busybox -- tail -f /etc/hostsroot@master01:~# kubectl exec -it busybox -- /bin/sh/ # cat /etc/resolv.confnameserver 169.254.20.10search default.svc.cluster.local svc.cluster.local cluster.localoptions ndots:5
解决办法:
通过查阅材料发现在集群中新建POD所获取的DNS地址是由各个node节点上的kubelet进行管制的,批改各个节点kubelet相干配置文件(如图为kubelet配置文件的地位)
确定coredns的service的地址为10.100.0.2.
root@master01:~# kubectl get svc -ANAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEdefault kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 5h38mkube-system kube-dns ClusterIP 10.100.0.2 <none> 53/UDP,53/TCP,9153/TCP 5h32mkube-system metrics-server ClusterIP 10.100.181.165 <none> 443/TCP 3h12m
批改kubelet配置文件中的clusterDNS字段为coredns的service的地址。
root@node02:~# cat /var/lib/kubelet/config.yaml kind: KubeletConfigurationapiVersion: kubelet.config.k8s.io/v1beta1address: 192.168.10.102authentication: anonymous: enabled: false webhook: cacheTTL: 2m0s enabled: true x509: clientCAFile: /etc/kubernetes/ssl/ca.pemauthorization: mode: Webhook webhook: cacheAuthorizedTTL: 5m0s cacheUnauthorizedTTL: 30scgroupDriver: systemd cgroupsPerQOS: trueclusterDNS:- 10.100.0.2
重启kubelet
root@node02:~# systemctl restart kubelet
依照如上办法批改完所有结点的kubelet配置文件后重启kubelet,再次创立新的POD测试发现新创建的POD获取到的DNS地址曾经为10.100.0.2.
ps:本文操作已在自己环境中操作胜利,如有问题亦或表述不清的中央欢送斧正。