故障场景:
k8s集群内pod需要访问sms.devhub.com获取数据,但是它是一个内网地址,公网DNS无法解析,所以需要在node节点的resolve.conf 添加内网的NDS服务器地址来解决问题,刚添加后是正常的,但是过了几分钟后先又解析不了,检查发现添加的resolve.conf被还原了。
故障原因:
K8s会重写
/etc/resolv.conf
文件以确保Pod中的DNS解析正确。因为在k8s集群中,Pod可能会被调度到不同的节点上,每个节点可能会有不同的DNS配置。因此,k8s会在每个节点上生成一个新的/etc/resolv.conf
文件,并将其复制到每个Pod中,以确保Pod中的DNS解析与节点上的DNS解析一致。Kubernetes会在每个节点上运行一个名为kubelet的服务,该服务负责管理节点上的Pod。kubelet会通过读取
/etc/kubernetes/kubelet.conf
文件获取Kubernetes集群中的DNS服务器地址,然后使用这些地址生成新的/etc/resolv.conf
文件。kubelet会定期检查/etc/resolv.conf
文件是否需要更新,并在必要时重新生成它。
解决方案1
使用 ConfigMap 来存储 hosts 文件的内容,然后将 ConfigMap 挂载到 Pod 中作为一个文件,从而实现在 Pod 启动的节点增加 hosts 的目的。