DNS 问题排查指南

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
所有文档
menu
没有找到结果,请重新输入

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
  • 文档中心
  • arrow
  • 容器引擎CCE
  • arrow
  • 操作指南
  • arrow
  • 网络管理
  • arrow
  • DNS
  • arrow
  • DNS 问题排查指南
本页目录
  • DNS 问题排查流程
  • 排查流程
  • 客户端常见报错分类
  • DNS 问题排查思路
  • 按解析异常的域名类型排查
  • 按解析异常出现频次排查
  • 问题排查方法
  • Pod DNS 配置检查
  • 连通性异常排查
  • CoreDNS pod 运行状态排查
  • CoreDNS pod 日志排查
  • 域名解析失败排查
  • 节点 DNS 问题排查
  • NodeLocal DNS 问题排查
  • 常见 DNS 问题和解决方案
  • 容器网络不通
  • 集群外部域名解析异常
  • Headless 类型服务域名无法解析
  • CoreDNS Pod 负载高
  • 节点 Conntrack 表满
  • A 记录和 AAAA 记录并发解析异常
  • IPVS 缺陷导致解析异常

DNS 问题排查指南

更新时间:2025-08-21

本文档介绍 DNS 相关的常见问题和错误,以及对应的排查和解决方案。

DNS 问题排查流程

排查流程

当发生 DNS 解析失败时,可按照如下流程进行排查

  1. 首先,我们可以根据解析失败报错,判断问题类型,判断方法参见 客户端常见报错分类

    1. 如果是因为网络不连通,参见 问题排查思路 的 按解析异常的域名类型排查
    2. 如果是因为域名解析失败,参见 问题排查思路 的 按解析异常出现频次排查
  2. 如上述排查未解决问题,请按如下步骤排查

    1. 检查 Pod 配置的 DNSPolicy 字段,确认是否使用了 CoreDNS,具体参见 Pod DNS 配置检查

      1. 如果没有使用 CoreDNS,则默认会继承节点 DNS 配置,参见 节点 DNS 问题排查
      2. 如果使用了 CoreDNS,按如下步骤排查

        1. 排查 CoreDNS 负载运行情况,参见 CoreDNS pod 运行状态排查
        2. 排查 CoreDNS 日志,参见 CoreDNS pod 日志排查
    2. 如果使用的是 NodeLocal DNS,参见 NodeLocal DNS 问题排查
  3. 如以上流程都未解决问题,可提交工单
客户端常见报错分类
分类 错误
网络连通性问题 network unreachable
connection timeout
connection reset by peer
no route to host
域名解析失败 no such host
could not resolve host
name or service not known
NXDOMAIN

注意:不同的 SKD 有不同的报错,上述报错关键字可能并不全面,可以结合报错信息进行判断。

DNS 问题排查思路

按解析异常的域名类型排查
异常类型 解决方案
集群内外域名都异常 容器网络不通
CoreDNS Pod 负载高
节点 Conntrack 表满
IPVS 缺陷导致解析异常
仅集群外部域名异常 集群外部域名解析异常
仅 Headless 类型服务域名异常 Headless 类型服务域名无法解析
按解析异常出现频次排查
出现频次 解决方案
异常仅出现在业务高峰时期 CoreDNS Pod 负载高
节点 Conntrack 表满
异常出现频次高 IPVS 缺陷导致解析异常
异常出现频次低 A 记录和 AAAA 记录并发解析异常
异常仅出现在节点扩缩容或CoreDNS缩容时 IPVS 缺陷导致解析异常

问题排查方法

Pod DNS 配置检查

查看业务 pod 的 dnsPolicy 字段,命令如下:

Plain Text
1kubectl -n <ns> get pod <pod-name> -o yaml | grep dnsPolicy

该字段取值如下 :

  • "Default": Pod 从运行所在的节点继承名称解析配置,即使用云上 DNS 服务器进行域名解析服务
  • "ClusterFirst": 使用 CoreDNS 进行域名解析服务,pod 内 /etc/resolv.conf 中 nameserver 将指向 kube-dns 服务的 ClusterIP
  • "ClusterFirstWithHostNet": 对于以 hostNetwork 方式运行的 Pod,应将其 DNS 策略显式设置为 "ClusterFirstWithHostNet"。否则,以 hostNetwork 方式和 "ClusterFirst" 策略运行的 Pod 将会做出回退至 "Default" 策略的行为
  • "None": 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置,Pod 会使用其 dnsConfig 字段所提供的 DNS 设置

之后可以进一步进入业务 pod,查看业务 pod 内 dns 配置文件是否符合预期。

首先进入容器:

Plain Text
1kubectl -n <ns> exec -it <pod-name> -- bash

如 bash 命令不存在,可尝试 sh

然后查看 dns 配置文件:

Plain Text
1cat /etc/resolv.conf

如果 dnsPolicy 字段值为 ClusterFirst 或 ClusterFirstWithHostNet,则 resolv.conf 中 nameserver 应为集群中 kube-dns 的 ClusterIP。
如果 dnsPolicy 字段值为 Default,则 resolv.conf 中 nameserver 应和节点上 /etc/resolv.conf 相同。
如果 dnsPolicy 字段值为 None,则 resolv.conf 中配置应和用户自己再 pod yaml 中 dnsConfig 字段配置相同。

连通性异常排查

首先,我们可以检查 pod 到 CoreDNS 的 ClusterIP 的连通性。

可以通过如下命令进入 pod:

Plain Text
1kubectl -n <ns> exec -it <pod-name> -- bash

如 bash 命令不存在,可尝试 sh

如 pod 无法通过 bash 或者 sh 登录,可以先登录节点,然后在节点上执行如下命令拿到 container-id:

Plain Text
1docker ps | grep <容器名>

然后执行如下命令拿到 pid:

Plain Text
1docker inspect <container-id> | grep -i pid

最后通过如下命令进入 pod 网络命名空间:

Plain Text
1nsenter -t <pid> -n bash

注意如容器运行时为 containerd,可将上述 docker 命令换为 crictl。

先通过如下命令拿到 coredns 的 ClusterIP:

Plain Text
1kubectl -n kube-system get svc kube-dns

然后通过如下命令依次测试到 ClusteIP 和 pod-ip 的连通性:

Plain Text
1telnet <ClusterIP> 53
2telnet <pod-ip> 53

如果发现到 ClusterIP 无法连通,但到 CoreDNS 的 pod ip 可以联通,这说明集群的 Service 连通性存在问题,可以去排查 kube-proxy 等提供 Service 负载均衡相关功能的模块。

如果检测发现 pod 到 CoreDNS pod ip 无法连通,那先确认集群 pod 网络是否联通,如果 pod 网络存在问题,需要先解决该问题,常见的问题包括节点网络不通、安全组配置错误等。

如果集群 pod 网络没有问题,那说明可能是 CoreDNS pod 存在问题。 可以通过如下命令测试解析:

Plain Text
1dig <domain> @<ClusterIP>

根据解析结果,参考本文其他部分进行相关排查。

CoreDNS pod 运行状态排查

首先确认 coredns pod 运行状态,可以执行如下命令:

Plain Text
1kubectl -n kube-system get pod -o wide | grep coredns

预期所有 pod 都应该处于 Running 状态,有有非 Running 的,可以执行如下命令查看原因:

Plain Text
1kubectl -n kube-system describe pod <pod-name>

也可以使用如下命令查看 coredns pod 资源使用情况,看是否资源超限:

Plain Text
1kubectl -n kube-system top pod -l k8s-app=kube-dns

如过发现 CoreDNS pod 负载过高,可以增加 CoreDNS 的副本数。

如过 coredns pod 状态正常,则可以进一步排查 coredns pod 的日志。

CoreDNS pod 日志排查

命令如下:

Plain Text
1kubectl -n kube-system logs <pod-name>

这里,因为集群中服务通过 ClusterIP 负载均衡到多个 pod,可以抽查 coredns pod 日志。

如果想准确将 dns 请求打到某一个 coredns pod,可以通过 dig 命令指定 dns 服务器来实现,命令如下:

Plain Text
1dig baidu.com @<pod-ip>

之后再查看对应 pod-ip 的 coredns pod 日志
coredns 日志示例如下:

Plain Text
1[INFO] 192.168.2.90:30639 - 8870 "A IN nfd-master.kube-system.svc.cluster.local. udp 69 false 1232" NOERROR qr,aa,rd 114 0.00010245s

其中的关键字 NOERROR 是表示解析成功返回码,常见的返回码如下:

  • NOERROR:解析成功
  • NXDOMAIN:域名不存在
  • SERVFAIL:从上游 DNS 服务器解析错误等

此外,还需要关注日志中是否存在其他错误,一些常见的错误有:

  • 无法连接 API Server,请检查 API Server 的状态
  • K8S API 兼容性错误,一般是由于 CoreDNS 和 K8S 版本不兼容,通常需要升级 CoreDNS 或 K8S 版本
域名解析失败排查

场景1:集群内 svc 解析成功,公网域名解析失败。这种情况,一般在 coredns pod 日志中会出现 NXDOMAIN 或 SERVFAIL 等返回码,此时可以联系云上 DNS 团队处理。

场景2:私有域名解析失败。需要确认私有域名是否已注册到云上 DNS 中,如果希望 CoreDNS 完成私有域名解析,需要在 CoreDNS 配置文件中添加私有域名解析服务器相关的配置。

场景3:Headless 类型 svc 无法解析。Headless 类型服务,解析结果会直接返回所有 pod ip,请检查服务对应的 pod 是否处于 Running 状态。

节点 DNS 问题排查

如用户负载 dnsPolicy 为 default 或使用 hostNetwork,则会使用节点 DNS 配置。
可在节点上使用 dig 命令进行复现和排查,示例如下:

Plain Text
1dig baidu.com

检查节点内核日志,执行如下命令:

Plain Text
1dmesg

检查其中是否有网络相关报错,如:

  • queue failue
  • conntract full

如节点内核日志未发现异常,因节点上 /etc/resolv.conf 中默认配置使用公有云 DNS 服务器,可进一步联系云上 DNS 团队进行处理。

NodeLocal DNS 问题排查

请先阅读 CCE Node Local DNS 说明 ,了解 NodeLocal DNS 的工作原理。
然后根据文档先检查 NodeLocal DNS 相关配置均已生效,其它各环节问题排查,可参考本文档。

常见 DNS 问题和解决方案

容器网络不通

问题现象:
业务 pod DNS 解析持续失败

问题原因:
业务 pod 到 CoreDNS pod 容器网络不通

解决方案:
排查并确保容器网络的连通性正常,可参见问题排查方法中的 连通性异常排查

集群外部域名解析异常

问题现象:
业务 pod 可以正常解析集群内部域名,但无法解析某些集群外部域名

问题原因:
上游服务器域名解析返回异常

解决方案:
查看 CoreDNS pod 的请求日志,确定错误码,日志示例如下:

Plain Text
1[INFO] 192.168.2.90:30639 - 8870 "A x.y.com. udp 69 false 1232" NOERROR qr,aa,rd 114 0.00010245s

如返回码不为 NOERROR,说明上游服务器返回错误,常见错误如下:

  • NXDOMAIN:域名不存在
  • SERVFAIL:一般是上游服务器故障或无法连接到上游服务器

如确定是上游服务器问题,可提交工单处理

Headless 类型服务域名无法解析

问题现象: Headless 类型 svc 无法解析

问题原因:
Headless 类型服务,解析结果会直接返回所有 pod ip,如业务 pod 是没有处于 Running 状态,则无法解析

解决方案:
请检查并确保服务对应的 pod 处于 Running 状态

CoreDNS Pod 负载高

问题现象: 业务 Pod DNS 请求延迟大、概率失败或持续失败

问题原因:
CoreDNS pod 负载高,处理能力不足,导致请求延迟增加或失败

解决方案:
增加 CoreDNS 副本数,或调大 CoreDNS 资源

节点 Conntrack 表满

问题现象: 业务 Pod DNS 在请求高峰时,出现请求概率失败或持续失败 再节点上运行 dmesg -T,在对应时段的日志中,发现有 conntrack full 关键字的错误

问题原因:
业务高峰时,内核 Conntrack 表打满,导致无法进行新的 TCP 或者 UDP 请求

解决方案:
调大节点上的内核 Conntrack 表限制,可提交工单处理

A 记录和 AAAA 记录并发解析异常

问题现象: 业务 Pod 解析域名概率性失败

问题原因:
并发 A 和 AAAA 的 DNS 请求触发 Linux 内核 Conntrack 模块缺陷,导致 UDP 报文丢失

解决方案:

  • 如果容器镜像是以Alpine制作的,建议更换基础镜像
  • 考虑采用 NodeLocal DNS 缓存方案,提升 DNS 解析性能,降低 CoreDNS 负载
  • CentOS、Ubuntu 等基础镜像,可以通过 options timeout:2 attempts:3 rotate single-request-reopen 等参数优化
IPVS 缺陷导致解析异常

问题现象: 集群节点扩缩容、CoreDNS 缩容时,业务出现概率性解析失败,通常时长在五分钟左右

问题原因:
若集群的 kube-proxy 负载均衡模式为 IPVS,在 CentOS 等内核版本小于 4.19 的节点上,摘除 IPVS UDP 类型后端后,一段时间内若新发起的 UDP 报文源端口冲突,该报文会被丢弃

解决方案:
可以考虑采用 NodeLocal DNS 方案,由于 NodeLocal DNS pod 和 CoreDNS pod 间使用 TCP,可以容忍该 IPVS 缺陷导致的丢包问题

上一篇
DNS 原理概述
下一篇
CoreDNS 组件手动升级指南