问题描述:
本环境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/hosts
root@master01:~# kubectl exec -it busybox -- /bin/sh
/ # cat /etc/resolv.conf
nameserver 169.254.20.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
解决方法:
经过查阅资料发现在集群中新建POD所获取的DNS地址是由各个node节点上的kubelet进行控制的,修改各个节点kubelet相关配置文件(如图为kubelet配置文件的位置)
确定coredns的service的地址为10.100.0.2.
root@master01:~# kubectl get svc -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 5h38m
kube-system kube-dns ClusterIP 10.100.0.2 <none> 53/UDP,53/TCP,9153/TCP 5h32m
kube-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: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 192.168.10.102
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/ssl/ca.pem
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
cgroupsPerQOS: true
clusterDNS:
- 10.100.0.2
重启kubelet
root@node02:~# systemctl restart kubelet
按照如上方法修改完所有结点的kubelet配置文件后重启kubelet,再次创建新的POD测试发现新创建的POD获取到的DNS地址已经为10.100.0.2.
ps:本文操作已在本人环境中操作成功,如有问题亦或表述不清的地方欢迎指正。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。