MicroK8s环境下连接CoreDNS Pod执行命令报错如何处理
CoreDNS Pod 无法通过bash进入的解决方案
报错根因
官方CoreDNS容器镜像为了尽可能轻量化、缩减攻击面,未预装bash工具,仅内置了轻量的sh Shell 程序,所以你执行命令时指定/bin/bash作为启动程序会触发文件不存在的报错。
可直接落地的操作方案
方案1:替换Shell类型直接进入终端
将命令中的/bin/bash替换为/bin/sh即可正常进入交互式终端:
microk8s kubectl --namespace kube-system exec --stdin --tty coredns-7f9c69c78c-mcdl5 -- /bin/sh
如果是基于Alpine构建的CoreDNS镜像,也可以尝试替换为/bin/ash,使用逻辑和sh完全一致。
方案2:需要专用排查工具时使用临时容器
如果进入CoreDNS容器后发现没有dig、ping、tcpdump等网络排查工具,不要直接在原有容器内安装软件(会破坏容器原生状态,且容器重启后安装内容会全部丢失),可以使用Kubernetes临时容器功能,将携带全量网络排查工具的镜像注入到CoreDNS Pod的网络、进程命名空间中:
microk8s kubectl --namespace kube-system debug -it coredns-7f9c69c78c-mcdl5 --image=nicolaka/netshoot --share-processes
进入临时容器后即可使用所有预装的网络工具完成CoreDNS的端口监听、网络连通性、域名解析逻辑等排查工作,排查结束退出后临时容器会自动销毁,不会对原有CoreDNS Pod的运行产生任何影响。
内容的提问来源于stack exchange,提问作者Thagor
相关产品推荐
相关产品推荐

