ACK集群的ACK CoreDNS DNSTAP Analyser组件,可以从CoreDNS和客户端之间,CoreDNS和上游DNS服务器之间的请求和响应过程中,对所有产生的DNS网络报文进行归类和识别。借助此工具,您可以快速定位域名无法解析的原因。本文介绍如何使用ACK CoreDNS DNSTAP Analyser诊断CoreDNS域名解析异常。
背景信息
步骤一:安装ACK CoreDNS DNSTAP Analyser
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,选择 。
- 在应用目录页签搜索ack-coredns-dnstap-analyser,找到并单击ack-coredns-dnstap-analyser。
- 在ack-coredns-dnstap-analyser页面,单击一键部署。
- 在创建面板中选择目标集群和命名空间,然后单击下一步。在参数配置页签中根据需求设置参数,然后单击确定。
步骤二:配置CoreDNS的DNSTAP插件
CoreDNS中内置了发送DNSTAP报文的DNSTAP插件,DNSTAP插件收到和发出的DNS报文可以发送至ACK CoreDNS DNSTAP Analyser。使用ACK CoreDNS DNSTAP Analyser诊断CoreDNS域名解析异常前,您需要先配置CoreDNS的DNSTAP插件。
通过以上操作您已启用CoreDNS DNSTAP插件,此时CoreDNS会将接收和发送到的DNS报文转发至ACK CoreDNS DNSTAP Analyser进行自动化诊断。
步骤三:查看ACK CoreDNS DNSTAP Analyser日志
步骤四:分析ACK CoreDNS DNSTAP Analyser日志
在ACK CoreDNS DNSTAP Analyser日志中,每一行是一个经过聚合的DNS请求上下文(Session),包含了从客户端、CoreDNS、上游DNS服务器之间的所有请求和响应的报文。DNS请求上下文(Session)包括:
- Status字段:不同的Status代表不同的场景。
上下文状态 描述 Succeeded 完整的域名查询请求,域名的响应是正常的(状态为NXDOMAIN、NOERROR)。 Failed 有问题的域名查询请求,域名响应中状态码异常或上游服务器连接超时等情况。 SampleLoss CoreDNS或Analyser负载较高,导致DNSTAP报文丢失,出现这类状态时,应调整CoreDNS或Analyser副本数,使单个容器的负载下降,提高诊断可信度。 - BitMap字段:BitMap的值代表了该请求上下文中截取到的DNSTAP报文的种类,根据截取到的不同种类,得到可能的异常原因。
上下文Session BitMap值 含义 1 CoreDNS接收到了客户端的查询请求,但未返回结果给客户端。 3 一次完整的内部域名查询,从客户端发起了请求,CoreDNS本地缓存中或Kubernetes中存在命中该域名的解析结果,将结果返回给了客户端。 5 无法连接到上游服务器,从客户端发起了请求,CoreDNS将请求转发给上游服务器进行查询,上游服务器未返回结果。 15 一次完整的外部域名查询,从客户端发起了请求,CoreDNS将请求转发给上游服务器进行查询,上游服务器完成了查询并返回,CoreDNS又将结果返回给了客户端。 - Messages字段:DNS请求上下文Session中Messages字段记录了DNS请求、响应的原始报文的JSON输出,可以根据dns-parameters-6对报文内容进行问题诊断。
(可选)步骤五:通过SLS仪表盘查看异常DNS报文信息
(可选)步骤六:卸载 DNSTap
定位到原因后,建议您卸载DNSTap以避免不必要的日志开销,卸载流程如下。
- 删除CoreDNS配置文件中包含dnstap一行。
- 卸载 ack-coredns-dnstap-analyser 组件。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击 。
- 在Helm页面,单击ack-coredns-dnstap-analyser操作列的删除。
- 在弹出框中单击确定。