如何获取Kubernetes集群中kube-system命名空间下CoreDNS Pod的/etc/resolv.conf文件内容
解决CoreDNS Pod中无
cat命令时查看/etc/resolv.conf的方法 嘿,这个问题我太熟悉了!CoreDNS使用的是极小化的distroless镜像,这类镜像为了精简体积,砍掉了几乎所有常见的系统工具(包括cat、sh这些),所以直接用exec调用cat会失败。不过有几个靠谱的办法能拿到/etc/resolv.conf的内容:
方法1:用kubectl cp把文件复制到本地查看
这是最直接的方式,不需要依赖容器内的任何工具:
# 格式:kubectl cp <命名空间>/<Pod名称>:<容器内文件路径> <本地目标路径> kubectl cp kube-system/coredns-74ff55c5b-c8dk6:/etc/resolv.conf ./coredns-resolv.conf
执行完后,直接在本地查看复制出来的文件:
cat ./coredns-resolv.conf
方法2:通过kubectl debug创建临时调试容器
可以启动一个带完整工具集的临时容器(比如busybox),和CoreDNS Pod共享进程与文件系统,然后在临时容器里查看文件:
# 启动busybox临时容器,关联到目标CoreDNS Pod kubectl debug -it coredns-74ff55c5b-c8dk6 -n kube-system --image=busybox --share-processes
进入临时容器后,就可以用cat命令查看目标文件了:
cat /etc/resolv.conf
用完退出临时容器即可,Kubernetes会自动清理这个临时资源。
方法3:查看Pod的DNS配置描述
其实/etc/resolv.conf的内容完全对应Pod的DNS配置,你可以通过kubectl describe直接获取这些信息,不需要访问容器内部:
kubectl describe pod coredns-74ff55c5b-c8dk6 -n kube-system
在输出里找到DNS相关字段:
Nameservers对应resolv.conf里的nameserverSearch对应searchOptions对应options
这些字段组合起来就是/etc/resolv.conf的完整内容。
内容的提问来源于stack exchange,提问作者Prateek Joshi
相关产品推荐
相关产品推荐

