对coredns解析外部域名的一点理解

Coredns 解析流程:

1、K8s集群内部服务解析-----》直接请求 coredns 服务ip;

K8s 集群以外的域名解析-------》会coredns configmap中找到forward配置或proxy配置的上游dns ip-----》如果没有proxy配置,只有forward转发的/etc/resolv.conf这个配置里有记录,不过并没有看到明确dns ip地址,这句意思是转发到pod内部的/etc/resolv.conf配置文件,即:解析不到的域名会在pod中的/etc/resolv.conf中寻找解析的dns(如下图)-------》而coredns的po又无法进入查看,我们可以docker inspect  coredns容器id看看能否发现线索------》会发现有一行挂载路径是/var/lib/container/**container id**/resolv.conf的文件,cat这行文件其实就是宿主机的resolv.conf------》我们顺着container id,docker ps | grep 以下会发现这个id是coredns的POD volume,这里有一个概念,在k8s里pod和POD会共享数据卷和网络,所以这个文件也是coredns容器内部的解析配置,docker在启动容器时会将容器宿主机上resolv.conf配置加载到容器内部,这也是为什么配置文件里看不到挂载本地resolv.conf文件的原因-----》所以forward . /etc/resolv.conf这个配置可以理解为,找不到的域名解析最终会请求到容器所在的宿主机resolv.conf配置里,如果宿主机里也没有的话,那这条记录就解析失败了

这里有两个注意点:

busybox镜像不建议做nslookup 测试域名,或者若用就用2022-10-30后的最新版,旧版本存在解析失败的bug

如果启动coredns后想暂时停止dns外部域名解析:注释pod所在宿主机的resolv.conf中的记录没用,因为配置已经被加载到容器中,并且不会像 coredns的configmap中的配置那样被热加载。

描述的有点糙,有不对的地方请交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CoreDNS是一个用于Kubernetes集群的域名解析器。它负责将域名解析为相应的IP地址,以便Kubernetes集群中的各个组件可以相互通信。 当coredns解析k8s域名偶尔失败时,可能是由于以下几个原因: 1. 配置错误:coredns的配置文件可能存在错误,导致解析过程中出现问题。可以通过检查coredns的配置文件来确认是否存在错误,并进行相应的修复。 2. 网络问题:解析k8s域名的过程中,可能出现网络问题,导致解析失败。这可能是由于网络延迟、故障或不稳定等原因引起的。可以通过检查网络连接、排除网络故障来解决此问题。 3. DNS缓存问题:coredns可能会在本地缓存解析结果,以提高性能并减少对外部DNS服务器的依赖。但有时候,这些缓存可能过期或损坏,导致解析失败。可以尝试清除corednsDNS缓存,并重新进行解析。 4. 资源不足:在解析域名时,coredns可能会耗尽CPU、内存或网络资源,导致解析失败。可以通过增加集群的资源配额或调整coredns的资源限制来解决此问题。 5. 其他故障:还有一些其他因素可能导致coredns解析k8s域名失败,例如coredns的版本问题、操作系统或硬件故障等。可以尝试升级coredns到最新版本,或者联系相关技术支持人员进行故障排除和解决。 总之,当coredns解析k8s域名偶尔失败时,我们需要综合考虑可能的原因,并采取相应的措施进行故障排除和解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值