K8S集群中Coredns域名解析故障排查思路

举报
jiangxl 发表于 2022/08/13 00:52:33 2022/08/13
【摘要】 K8S集群中Coredns域名解析故障排查思路 文章目录 K8S集群中Coredns域名解析故障排查思路1.K8S域名解析故障2.无法解析集群外部的域名排查思路3.无法解析集群内部服务发现地址排...

K8S集群中Coredns域名解析故障排查思路

1.K8S域名解析故障

在使用K8S的过程中,可能会遇到域名解析失败的现象,主要有以下几种问题:

  • 在Pod中无法解析集群外部的域名,例如baidu.com,但是可以上网。
  • Pod与Pod之间服务调用,可以ping通Service资源的地址,但是无法使用服务发现地址进行通信。

在实际生产环境中,程序依赖的Tomcat、Nginx都是以Pod的形式部署的,Nginx需要对Tomcat进行反向代理,若Pod无法解析域名或者是无法使用服务发现的地址通信,那么Nginx只能通过Service资源的IP进行通信,IP可能会发生变化,但是域名是肯定不会变化的。

服务发现地址是K8S内部针对每个Service资源设定的域名地址,程序之间的调用都是采用的服务发现地址,当遇到域名无法解析的时候,就会影响应用程序之间的调用。

2.无法解析集群外部的域名排查思路

问题一:无法解析集群外部的域名。

当遇到Pod无法解析集群外部其他服务的域名时,大致的排查思路如下:

1)首先排查Coredns组件是否正常运行,查看Coredns的运行日志,可以从日志中读取关键信息。

2)Coredns是以Pod的形式部署在K8S集群的,会挂载调度到的Node节点上/etc/resolv.conf这个文件,可以去排查一下这个文件中配置的DNS地址,可以将地址换成114.114.114.114,到这一步问题可能会解决。

3)如果还是无法解析域名,那么就将Coredns组件删除重建。

3.无法解析集群内部服务发现地址排查思路

问题二:无法解析集群内部服务发现地址。

集群内部服务发现地址也叫做集群内部域名,服务发现地址就是一串域名地址,服务发现的地址命名格式:Service名称+NameServer名称+svc.cluster.local

例如:knowsystem-svc.prod-knowsystem:80,完整的域名地址为:knowsystem-svc.prod-knowsystem.svc.cluster.local

Pod与Pod之间就可以通过服务发现地址进行通信,服务发现地址会被Coredns解析到Pod资源所关联Service资源上,如下图所示。
在这里插入图片描述

当Coredns无法解析集群内部的服务发现地址时,可能就会应用Pod与Pod之间的调用。

当出现内部服务发现地址无法解析时,基本上都会报如下的错误,大致的意思就是Coredns解析超时。

io.netty.resolver.dns.DnsNameRes olverTimeoutException: [/10.96.0.10:53] query timed out after 1000 milliseconds (no stack trace available)

  
 
  • 1

排查思路:

1)出现域名无法解析的情况,大多数情况下都是Pod内部的resolv.conf文件配置的有问题,可以先进入容器查看resolv.conf文件配置的DNS地址。

[root@knowsystem-v1-96d57f6c-zbmgj /]# cat /etc/resolv.conf 
nameserver 10.96.0.10			#Coredns的Service地址
search prod-knowsystem.svc.cluster.local svc.cluster.local cluster.local			#搜索域,自动配置

  
 
  • 1
  • 2
  • 3

2)尝试ping搜索域中的域名,如果ping不通,可能就是搜索域指定的太多引起了DNS超时。

3)可以在资源编排文件中手动配置搜索域的地址,覆盖默认的搜索域。

    spec:
      containers:
      - image: jiangxlrepo/know-system:v1
        name: knowsystem-v1
      dnsPolicy: "None"
      dnsConfig:
        nameservers:
        - 10.96.0.10
        searches:
        - knowsystem-svc.prod-knowsystem.svc.cluster.local
        options:
        - name: test

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4)更新资源编排文件,再次进入到Pod中,查看搜索域的配置信息。

5)会发现搜索域已经是我们手动配置的搜索域地址了,并且也可以正常解析和ping通服务发现的域名地址。

在这里插入图片描述

4.K8S集群中域名无法解析排查思路总结

无论是什么原因,只要是无法解析域名,就按照下面几步进行排查:

1)排查Coredns组件的运行状态是否出现异常,查看运行日志获取关键信息。

2)查看Node节点的/etc/resolv.conf文件中DNS地址是否配置正确,再进入到Pod中查看/etc/resolv.conf文件中DNS地址是否配置正确。

3)通过K8S资源编排文件中的dnsConfig配置参数,手动配置搜索域。

文章来源: jiangxl.blog.csdn.net,作者:Jiangxl~,版权归原作者所有,如需转载,请联系作者。

原文链接:jiangxl.blog.csdn.net/article/details/126259974

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。