域名解析失败,如何定位处理?
问题现象:域名解析失败。
可能原因:域名解析失败可能有如下4种情况:sce集群内是否已经安装了coreDNS插件、coreDNS服务是否正常、集群使用的安全组是否已经放开udp规则、pod容器到coreDNS网络是否连通。
解决方法:
- 判断当前的异常原因。
- 检查业务Pod的DNS配置,是否已经接入CoreDNS。
- 检查CoreDNS Pod运行状态进行诊断。
- 检查CoreDNS运行日志进行诊断。
- 检查pod是否能访问CoreDNS。
- 检查安全组是否已经放开UDP协议的53端口。
CoreDNS插件已安装但是在pod内部无法解析kubernetes等service域名
问题现象:在容器内部是可以ping通coredns pod的ip,查看容器内部的/etc/resolv.conf也是正常的,但是nslookup kubernetes就是不能解析出ip。
可能原因:在nslookup kubernetes的时候,容器先通过/etc/resolv.conf中的nameserver写的coredns的serviceIP找到dns服务器,再通过dns服务器解析内部service域名。首先得确保coredns的service正常工作,使用curl 10.96.0.10:9153测试coredns的service明显不通。
解决方法:需要排查kube-proxy是否正常。
安装CoreDNS插件后并没有修改容器内部的/etc/resolv.conf
问题现象:查看随便一个pod,进入容器内部查看cat /etc/resolv.conf,发现并没有被coredns修改。
可能原因:可能是CoreDNS工作不正常。检查coredns pod是否有事件报错健康检查失败。
解决方法:检查coredns日志是否正常,重启coreDNS。
安全组配置错误
问题现象:随便进入一个pod容器内部,使用service ip:端口可以正常访问,但是使用service域名:端口就不通。
可能原因:查看dns日志一直没有变化,说明没有请求到达dns。可能是修改了容器使用的安全组,拦截了UDP协议下53端口的通信。
解决方法:修改集群安全组,放开UDP协议的53端口规则。