
# CCE集群内域名解析失败，如何定位处理？
#### 排查项一：检查是否已安装CoreDNS插件
1. 登录CCE控制台，进入集群。
2. 在左侧导航栏中选择"插件中心"，确认异常的集群是否已安装CoreDNS插件。
3. 如果未安装，请安装。详情请参见[为什么CCE集群的容器无法通过DNS解析？](https://support.huaweicloud.com/cce_faq/cce_faq_00107.html)
 
 #### 排查项二：检查CoreDNS实例是否已到达性能瓶颈
CoreDNS所能提供的域名解析QPS与CPU消耗呈正相关，如遇QPS较高的场景，需要根据QPS的量级调整CoreDNS实例规格。集群超过100节点时，推荐使用NodeLocal DNSCache提升DNS性能，详情请参见[使用NodeLocal DNSCache提升DNS性能](https://support.huaweicloud.com/usermanual-cce/cce_10_0362.html)。
1. 登录CCE控制台，进入集群。
2. 在左侧导航栏中选择"插件中心"，确认CoreDNS插件状态为"运行中"。
3. 单击CoreDNS插件名称，查看插件实例列表。
4. 单击CoreDNS实例的"监控"按钮，查看实例CPU、内存使用率。 
   如实例已达性能瓶颈，则需调整CoreDNS插件规格。
   1. 单击CoreDNS插件的"编辑"按钮，进入插件详情页。
   
   2. 在"规格配置"下配置CoreDNS参数规格。您可以根据业务需求选择CoreDNS所能提供的域名解析QPS。
   
   3. 您也可以选择自定义规格，通过选择不同的副本数、CPU配额和内存配额，来定制集群的CoreDNS参数规格。 ![](https://support.huaweicloud.com/cce_faq/zh-cn_image_0000002084090813.png "点击放大")
      
      
   
   4. 单击"确定"，完成配置下发。
    
   
   
 
#### 排查项三：解析外部域名很慢或超时
如果域名解析失败率低于1/10000，请参考[解析外部域名很慢或超时，如何优化配置？](https://support.huaweicloud.com/cce_faq/cce_faq_00195.html)进行参数优化，或在业务中增加重试。
#### 排查项四：概率性出现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 coredns | awk '{print $1}'
     ```
     containerd节点：
     ```
     crictl ps --no-trunc | grep 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
![](https://support.huaweicloud.com/cce_faq/public_sys-resources/note_3.0-zh-cn.png)
- **增加coredns的缓存时间：**有利于同一个域名的第N次解析，减少级联DNS的请求数量。
- **配置存根域：**有利于减少DNS请求链路。
 
**修改方式**：
1. 修改CoreDNS缓存时间及配置存根域 修改方法请参见[为CoreDNS配置存根域](https://support.huaweicloud.com/usermanual-cce/cce_10_0361.html#cce_10_0361__section5202157467)。
   修改完成后重启CoreDNS。
   
2. 修改ndots 修改方法请参见[解析外部域名很慢或超时，如何优化配置？](https://support.huaweicloud.com/cce_faq/cce_faq_00195.html)。
   示例：
   ```
   dnsConfig:
           options:
             - name: timeout
               value: '2'
             - name: ndots
               value: '5'
             - name: single-request-reopen
   ```
   建议值修改成：2
   
 
