文档首页/ 云容器引擎 CCE/ 常见问题/ 域名DNS/ CCE集群内域名解析失败,如何定位处理?
更新时间:2024-11-13 GMT+08:00

CCE集群内域名解析失败,如何定位处理?

排查项一:检查是否已安装CoreDNS插件

  1. 登录CCE控制台,进入集群。
  2. 在左侧导航栏中选择“插件中心”,确认异常的集群是否已安装CoreDNS插件。
  3. 如果未安装,请安装。详情请参见为什么CCE集群的容器无法通过DNS解析?

排查项二:检查CoreDNS实例是否已到达性能瓶颈

CoreDNS所能提供的域名解析QPS与CPU消耗成正相关,如遇QPS较高的场景,需要根据QPS的量级调整CoreDNS实例规格。集群超过100节点时,推荐使用NodeLocal DNSCache提升DNS性能,详情请参见使用NodeLocal DNSCache提升DNS性能

  1. 登录CCE控制台,进入集群。
  2. 在左侧导航栏中选择“插件中心”,确认CoreDNS插件状态为“运行中”
  3. 单击CoreDNS插件名称,查看插件实例列表。
  4. 单击CoreDNS实例的“监控”按钮,查看实例CPU、内存使用率。

    如实例已达性能瓶颈,则需调整CoreDNS插件规格。
    1. 单击CoreDNS插件的“编辑”按钮,进入插件详情页。
    2. 在“规格配置”下配置CoreDNS参数规格。您可以根据业务需求选择CoreDNS所能提供的域名解析QPS。
    3. 您也可以选择自定义规格,通过选择不同的副本数、CPU配额和内存配额,来定制集群的CoreDNS参数规格。

    4. 单击“确定”,完成配置下发。

排查项三:解析外部域名很慢或超时

如果域名解析失败率低于1/10000,请参考解析外部域名很慢或超时,如何优化配置?进行参数优化,或在业务中增加重试。

排查项四:概率性出现UnknownHostException

集群中的业务请求到外部域名服务器时发生域名解析错误,概率性出现UnknownHostException。UnknownHostException是一个常见的异常,发生该异常时优先检查域名是否存在问题或键入错误。

您可根据以下步骤进行排查:

  1. 仔细检查主机名是否正确,检查域名的拼写并删除多余的空格。
  2. 检查DNS设置。在运行应用程序之前,通过ping hostname命令确保DNS服务器已启动并正在运行。如果主机名是新的,则需要等待一段时间才能访问DNS服务器。
  3. 检查CoreDNS实例的CPU、内存使用率监控,确认是否已到达性能瓶颈,具体操作步骤请参见排查项二:检查CoreDNS实例是否已到达性能瓶颈
  4. 检查CoreDNS是否有发生限流,如果触发限流可能出现部分请求处理时间延长,需要调整CoreDNS插件规格。

    登录CoreDNS Pod所在节点,查看以下文件内容:
    cat /sys/fs/cgroup/cpu/kubepods/pod<pod_uid>/<coredns容器id>/cpu.stat
    • <pod uid>为CoreDNS的Pod UID,可通过以下命令获取:
      kubectl get po <pod name> -nkube-system -ojsonpath='{.metadata.uid}{"\n"}'

      以上命令中的<pod name>需要是在当前节点上运行的CoreDNS Pod名称。

    • <coredns容器id>需要是完整的容器ID,可通过以下命令获取:

      docker节点:

      docker ps --no-trunc | grep k8s_coredns | awk '{print $1}'

      containerd节点:

      crictl ps --no-trunc | grep k8s_coredns | awk '{print $1}'

    完整的命令示例如下:

    cat /sys/fs/cgroup/cpu/kubepods/pod27f58662-3979-448e-8f57-09b62bd24ea6/6aa98c323f43d689ac47190bc84cf4fadd23bd8dd25307f773df25003ef0eef0/cpu.stat

    请关注以下指标:

    • nr_throttled:被限流次数。
    • throttled_time:被限流的总时间长度(纳秒)。

如果检查后无上述问题,可采用下方优化策略。

优化策略:

  1. 修改CoreDNS的缓存时间
  2. 配置存根域
  3. 修改ndots
  • 增加coredns的缓存时间:有利于同一个域名的第N次解析,减少级联DNS的请求数量。
  • 配置存根域:有利于减少DNS请求链路。

修改方式

  1. 修改CoreDNS缓存时间及配置存根域

    修改方法请参见为CoreDNS配置存根域

    修改完成后重启CoreDNS。

  2. 修改ndots

    修改方法请参见解析外部域名很慢或超时,如何优化配置?

    示例:

          dnsConfig:
            options:
              - name: timeout
                value: '2'
              - name: ndots
                value: '5'
              - name: single-request-reopen

    建议值修改成:2