问题形容:
本环境 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:本文操作已在自己环境中操作胜利,如有问题亦或表述不清的中央欢送斧正。