详情页标题前

阿里云容器服务ACK使用DNSTAP Analyser诊断异常-云淘科技

详情页1

ACK集群的ACK CoreDNS DNSTAP Analyser组件,可以从CoreDNS和客户端之间,CoreDNS和上游DNS服务器之间的请求和响应过程中,对所有产生的DNS网络报文进行归类和识别。借助此工具,您可以快速定位域名无法解析的原因。本文介绍如何使用ACK CoreDNS DNSTAP Analyser诊断CoreDNS域名解析异常

前提条件

  • 创建ACK Pro版集群

  • 获取集群KubeConfig并通过kubectl工具连接集群

背景信息

DNSTAP是一种DNS报文日志格式协议,可以被用于诊断DNS服务器上异常解析问题。更多信息,请参见dnstap。

步骤一:安装ACK CoreDNS DNSTAP Analyser

  1. 登录容器服务管理控制台。

  2. 在控制台左侧导航栏,选择市场 > 应用市场

  3. 应用目录页签搜索ack-coredns-dnstap-analyser,找到并单击ack-coredns-dnstap-analyser

  4. ack-coredns-dnstap-analyser页面,单击一键部署

  5. 创建面板中选择目标集群和命名空间,然后单击下一步。在参数配置页签中根据需求设置参数,然后单击确定

步骤二:配置CoreDNS的DNSTAP插件

CoreDNS中内置了发送DNSTAP报文的DNSTAP插件,DNSTAP插件收到和发出的DNS报文可以发送至ACK CoreDNS DNSTAP Analyser。使用ACK CoreDNS DNSTAP Analyser诊断CoreDNS域名解析异常前,您需要先配置CoreDNS的DNSTAP插件。

  1. 执行以下命令,获取kube-system命名空间下ACK CoreDNS DNSTAP Analyser服务的ClusterIP地址(例如172.21.0.10)用于配置DNSTAP插件。

    kubectl -n kube-system get svc dnstap-analyser
  2. 执行以下命令,编辑CoreDNS配置文件。

    kubectl -n kube-system edit cm coredns -o yaml
  3. 参考以下注释修改CoreDNS的默认配置。

    修改配置的目的是启用DNSTAP插件,并指向地址至CoreDNS DNSTAP Analyser的ClusterIP地址,从而将DNSTAP插件收到和发出的DNS报文发送至ACK CoreDNS DNSTAP Analyser。

    Corefile: |
            .:53 {
                #省略
                ready
    
                #添加以下一行,将172.21.0.10替换成获取到的CoreDNS DNSTAP Analyser ClusterIP地址。
                dnstap tcp://172.21.0.10:6000 full
    
                kubernetes cluster.local in-addr.arpa ip6.arpa {
                #省略
                }
                #省略
                reload
                loadbalance
            }
  4. 执行以下命令,查看当前CoreDNS的所有容器组。

    kubectl -n kube-system get pod | grep coredns

    预期输出:

    coredns-7d56l         1/1     Running   0          30m
    coredns-s7m2t         1/1     Running   0          30m
  5. 执行以下命令,持续查看CoreDNS日志。

    kubectl -n kube-system logs -f --tail=500 coredns-7d56l

    说明

    替换容器组名称coredns-7d56l为上述步骤4中出现的任意一个容器组名称。

    等待约一分钟,观察日志中出现以下输出,并无其它异常时,说明配置修改成功。

    [INFO] Reloading complete

通过以上操作您已启用CoreDNS DNSTAP插件,此时CoreDNS会将接收和发送到的DNS报文转发至ACK CoreDNS DNSTAP Analyser进行自动化诊断。

步骤三:查看ACK CoreDNS DNSTAP Analyser日志

  1. 执行以下命令,查看ACK CoreDNS DNSTAP Analyser的所有容器组。

    kubectl -n kube-system get pod | grep dnstap-analyser

    预期输出:

    dnstap-analyser-bbdf879-g****         1/1     Running   0          30m
  2. 执行以下命令,查看ACK CoreDNS DNSTAP Analyser日志。

    kubectl -n kube-system logs -f dnstap-analyser-bbdf879-g****

    说明

    替换容器组名称dnstap-analyser-bbdf879-gpfkm为上述步骤1中出现的容器组名称。

步骤四:分析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报文信息

  1. 登录容器服务管理控制台。

  2. 在控制台左侧导航栏,单击集群

  3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

  4. 集群信息页面,单击集群资源页签,然后单击日志服务Project右侧的日志服务Project名称链接。

  5. 在日志库页面左侧导航栏,单击仪表盘图标阿里云容器服务ACK使用DNSTAP Analyser诊断异常-云淘科技。在仪表盘列表中找到并单击Kubernetes CoreDNS DNSTAP 报文监控

    Kubernetes CoreDNS DNSTAP 报文监控页面,您可以查看报文数量和异常报文情况。阿里云容器服务ACK使用DNSTAP Analyser诊断异常-云淘科技

  6. 可选:当出现异常报文需要查看详情时,请按照如下步骤操作。

    1. 请记录报文 ID

    2. 在日志库页面左侧导航栏,单击日志存储图标阿里云容器服务ACK使用DNSTAP Analyser诊断异常-云淘科技

    3. 在左侧日志库中单击安装时设置的日志库,如果使用了默认日志库k8s-coredns-dnstap,则单击默认日志库。

    4. 在查询页面搜索报文 ID。阿里云容器服务ACK使用DNSTAP Analyser诊断异常-云淘科技

    5. 如果仍有疑问,需要工单协助时,请单击日志条目时间右侧的复制按钮阿里云容器服务ACK使用DNSTAP Analyser诊断异常-云淘科技,复制后提交工单申请协助。

(可选)步骤六:卸载 DNSTap

定位到原因后,建议您卸载DNSTap以避免不必要的日志开销,卸载流程如下。

  1. 删除CoreDNS配置文件中包含dnstap一行。

    1. 执行以下命令,编辑CoreDNS配置文件。

      kubectl -n kube-system edit cm coredns -o yaml
    2. 参考以下注释删除CoreDNS配置文件中包含dnstap一行。

      Corefile: |
              .:53 {
                  #省略
                  ready
      
                  #删除以下一行
                  dnstap tcp://10.10.10.10:6000 full
      
                  kubernetes cluster.local in-addr.arpa ip6.arpa {
                  #省略
                  }
                  #省略
                  reload
                  loadbalance
              }
    3. 执行以下命令,查看当前CoreDNS的所有容器组。

      kubectl -n kube-system get pod | grep coredns

      预期输出:

      coredns-7d56l         1/1     Running   0          30m
      coredns-s7m2t         1/1     Running   0          30m
    4. 执行以下命令,持续查看CoreDNS日志。

      kubectl -n kube-system logs -f --tail=500 coredns-7d56l

      说明

      替换容器组名称coredns-7d56l为上述步骤c中出现的任意一个容器组名称。

      等待约一分钟,观察日志中出现以下输出,并无其它异常时,说明配置修改成功。

      [INFO] Reloading complete
  2. 卸载 ack-coredns-dnstap-analyser 组件。

    1. 登录容器服务管理控制台。

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏中,单击应用 > Helm

    5. Helm页面,单击ack-coredns-dnstap-analyser操作列的删除

    6. 在弹出框中单击确定

相关文档

  • DNS概述

  • DNS原理和配置说明

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/171630.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云容器服务ACKDNS FAQ-云淘科技

    本文介绍在容器服务ACK集群中DNS相关的常见问题。 为什么通过exec无法进入CoreDNS Pod? 问题现象 使用kubectl -n kube-system exec -it {coredns pod} bash及类似命令无法进入到CoreDNS Pod。 问题原因 CoreDNS所使用的容器镜像是基于Scratch构建,不具备Shell执行环境。 …

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACKDNS FAQ-云淘科技

    本文介绍在容器服务ACK集群中DNS相关的常见问题。 为什么通过exec无法进入CoreDNS Pod? 问题现象 使用kubectl -n kube-system exec -it {coredns pod} bash及类似命令无法进入到CoreDNS Pod。 问题原因 CoreDNS所使用的容器镜像是基于Scratch构建,不具备Shell执行环境。 …

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACKDNS原理和配置说明-云淘科技

    本文介绍Kubernetes集群中集群DNS服务原理,并针对不同场景介绍如何进行DNS策略配置。 前提条件 在进行内置DNS配置前,请确保您已完成以下操作: 创建Kubernetes托管版集群 获取集群KubeConfig并通过kubectl工具连接集群 背景信息 ACK集群默认部署了一套DNS服务,通过kube-dns的服务名暴露DNS服务。您可执行以下命…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACKDNS解析异常问题排查-云淘科技

    本文介绍关于DNS解析异常的诊断流程、排查思路、常见解决方案和排查方法。 索引 类别 内容 诊断流程 基本概念 异常诊断流程 常见客户端报错 排查思路 排查思路 常见排查方法 检查业务Pod的DNS配置 检查CoreDNS Pod运行状态 检查CoreDNS运行日志 检查CoreDNS DNS查询请求日志 检查CoreDNS Pod的网络连通性 检查业务Po…

    阿里云容器服务 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACK分析和监控CoreDNS日志-云淘科技

    阿里云容器服务ACK部署了CoreDNS作为集群内的DNS服务器,您可以通过查看CoreDNS日志来分析CoreDNS解析慢、访问高危请求域名等问题。本文介绍如何开启CoreDNS日志分析与监控能力。 前提条件 已安装日志组件logtail-ds。 在创建集群时,ACK默认选中日志组件logtail-ds。如果您未安装日志组件logtail-ds,关于如何手…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。