# 节点本地域名解析加速
#### 插件简介
节点本地域名解析加速（原名node-local-dns）是基于社区[NodeLocal DNSCache](https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/nodelocaldns/)提供的插件，通过在集群节点上作为守护程序集运行DNS缓存代理，提高集群DNS性能。
开源社区地址：<https://github.com/kubernetes/dns>
启用NodeLocal DNSCache之后，DNS查询所遵循的路径如下图所示。
图1NodeLocal DNSCache查询路径   
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001866067689.png "点击放大")
其中解析线路说明如下：
- ①：已注入DNS本地缓存的Pod，默认会通过NodeLocal DNSCache解析请求域名。
- ②：NodeLocal DNSCache本地缓存如果无法解析请求，则会请求集群CoreDNS进行解析。
- ③：对于非集群内的域名，CoreDNS会通过VPC的DNS服务器进行解析。
- ④：已注入DNS本地缓存的Pod，如果无法连通NodeLocal DNSCache，则会直接通过CoreDNS解析域名。
- ⑤：未注入DNS本地缓存的Pod，默认会通过CoreDNS解析域名。
 
#### 约束与限制
- 仅支持1.19及以上版本集群。
 
#### 安装插件
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"插件中心"，在右侧找到**节点本地域名解析加速**插件，单击"安装"。
3. 在安装插件页面，根据需求选择"规格配置"。 
   - 选择"系统预置规格"时，您可根据集群规模选择"单实例"或"高可用"，系统会根据不同的预置规格配置插件的实例数及资源配额，具体配置值请以控制台显示为准。 "单实例"为单实例部署DNSConfig自动注入控制器，资源消耗低；"高可用"为双实例部署DNSConfig自动注入控制器，提高插件可用性。
     
   
   - 选择"自定义规格"时，您可根据需求调整插件实例数和资源配额。实例数为1时插件不具备高可用能力，当插件实例所在节点异常时可能导致插件功能无法正常使用，请谨慎选择。
   
   
   
   
4. 设置插件支持的"参数配置"。 
   - DNSConfig自动注入：启用后，会创建DNSConfig动态注入控制器，该控制器基于Admission Webhook机制拦截目标命名空间（即命名空间包含标签node-local-dns-injection=enabled）下Pod的创建请求，自动为Pod配置DNSConfig。未开启DNSConfig自动注入或Pod属于非目标命名空间，则需要手动给Pod配置DNSConfig。
     开启自动注入后，您可以为DNSConfig自定义以下配置项（插件版本为1.6.7及以上支持）：
     ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
     如果开启自动注入时Pod中已经配置了DNSConfig，则优先使用Pod中的DNSConfig。
     - 域名解析服务器地址（可选）：容器解析域名时查询的DNS服务器的IP地址列表。默认会添加NodeLocal DNSCache的地址，以及CoreDNS的地址，允许用户额外追加1个地址，重复的IP地址将被删除。
     
     - 搜索域（可选）：定义域名的搜索域列表，当访问的域名不能被DNS解析时，会把该域名与搜索域列表中的域依次进行组合，并重新向DNS发起请求，直到域名被正确解析或者尝试完搜索域列表为止。允许用户额外追加3个搜索域，重复的域名将被删除。
     
     - ndots（可选）：该参数的含义是当域名的"."个数小于ndots的值，会先把域名与search搜索域列表进行组合后进行DNS查询，如果均没有被正确解析，再以域名本身去进行DNS查询。当域名的"."个数大于或者等于ndots的值，会先对域名本身进行DNS查询，如果没有被正确解析，再把域名与search搜索域列表依次进行组合后进行DNS查询。
       
   
   - 目标命名空间：启用DNSConfig自动注入时支持设置。仅1.3.0及以上版本的插件支持。
     - 全部开启：CCE会为已创建的命名空间添加标签（node-local-dns-injection=enabled），同时会识别命名空间的创建请求并自动添加该标签，这些操作的目标不包含系统内置及部分插件预置的命名空间（包括kube-system、kube-public、kube-node-lease、istio-system、monitoring）。 1.6.77及以上版本的插件中，命名空间标签（node-local-dns-injection=enabled）不支持手动删除，您可以将标签node-local-dns-injection设置为disabled，来关闭指定命名空间的自动注入。
       
     
     - 手动配置：手动为需要注入DNSConfig的命名空间添加标签（node-local-dns-injection=enabled），操作步骤请参见[管理命名空间标签](https://support.huaweicloud.com/usermanual-cce/cce_10_0285.html#cce_10_0285__section124953014352)。
      
   
   
   
   
5. 设置插件实例的部署策略。 
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
   - 调度策略对于DaemonSet类型的插件实例不会生效。
   
   - 设置多可用区部署或节点亲和策略时，需保证集群中存在满足调度策略的节点且拥有足够的资源，否则插件实例将无法运行。
    
   表1插件调度配置 
   | 参数   | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|
   | 多可用区部署 | - 优先模式：优先将插件的Deployment实例调度到不同可用区的节点上，如集群下节点不满足多可用区，插件实例将调度到单可用区下的不同节点。  - 均分模式：插件Deployment实例均匀调度到当前集群下各可用区，增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署；均分模式限制不同可用区间插件实例数相差不超过1，单个可用区资源不足会导致后续其他实例无法调度。  - 强制模式：插件Deployment实例强制调度到不同可用区的节点上，每个可用区下最多运行一个实例。如集群下节点不满足多可用区，插件实例将无法全部运行。节点故障后，插件实例存在无法迁移风险。                                                                                                    |
   | 节点亲和 | - 不配置：插件实例不指定节点亲和调度。  - 指定节点调度：指定插件实例部署的节点。若不指定，将根据集群默认调度策略进行随机调度。  - 指定节点池调度：指定插件实例部署的节点池。若不指定，将根据集群默认调度策略进行随机调度。  - 自定义亲和策略：填写期望插件部署的节点标签实现更灵活的调度策略，若不填写将根据集群默认调度策略进行随机调度。 同时设置多条自定义亲和策略时，需要保证集群中存在同时满足所有亲和策略的节点，否则插件实例将无法运行。    |
   | 容忍策略  | 容忍策略与节点的污点能力配合使用，允许（不强制）插件的 Deployment 实例调度到带有与之匹配的污点的节点上，也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。 插件会对实例添加针对**node.kubernetes.io/not-ready** 和**node.kubernetes.io/unreachable**污点的默认容忍策略，容忍时间窗为60s。 详情请参见[设置容忍策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0728.html)。                                                                                                                                                                                                                                                                |
      
   
   
6. 完成以上配置后，单击"安装"。
 
#### 组件说明
表2node-local-dns组件 
| 容器组件                              | 说明                    | 资源类型      |
|:---|:---|:---|
| node-local-dns-admission-controller | 提供自动注入DNSConfig功能。   | Deployment |
| node-local-dns-cache               | 作为节点上DNS缓存代理提高集群DNS性能。 | DaemonSet  |
   
#### 使用NodeLocal DNSCache
默认情况下，应用的请求会通过CoreDNS代理，如果需要使用NodeLocal DNSCache进行DNS缓存代理，您有以下几种方式可以选择，详情请参见[使用NodeLocal DNSCache](https://support.huaweicloud.com/usermanual-cce/cce_10_0362.html#cce_10_0362__section454110448388)。
- 自动注入：创建Pod时自动配置Pod的dnsConfig字段。（kube-system等系统命名空间下的Pod不支持自动注入）
- 手动配置：手动配置Pod的dnsConfig字段，从而使用NodeLocal DNSCache。
 
#### 修改插件默认健康检查端口
安装节点本地域名解析加速插件时，插件组件默认会占用宿主机的8080端口，而8080端口为常用端口，可能会和节点上部署的其他业务发生冲突。本文将指导您如何修改节点本地域名解析加速插件的端口。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
1.6.66及以上版本的插件支持修改默认端口。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 选择左侧导航栏的"插件中心"，在右侧找到**节点本地域名解析加速**插件，单击"安装"。如果集群中已安装该插件，则单击"编辑"。
3. 在弹出的页签中，配置需要自定义的其他参数，然后单击插件名称上方的"YAML安装"。如果集群中已安装该插件，则单击"编辑YAML"。 
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002153920816.png "点击放大")
   
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
   由于YAML参数配置较复杂，建议您先使用控制台可视化配置其他参数，最后修改端口。其他参数说明请参见[节点本地域名解析加速](https://support.huaweicloud.com/usermanual-cce/cce_10_0404.html)。
   
   
4. 修改以下两个参数为指定端口，二者需保持一致。 
   1. 搜索healthPort参数，修改为指定端口，例如8081。 ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002189159345.png "点击放大")
      
   
   2. 搜索cluster.local参数，修改该数组中的port为指定端口，例如8081。 ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002189121333.png "点击放大")
      
   
   
   
   
5. 单击"提交"。
 
 #### 卸载插件
卸载插件后将影响已经使用node-local-dns地址进行域名解析的Pod，请谨慎操作。如需卸载，请先清除命名空间上的node-local-dns-injection=enabled标签，然后删除重建带有node-local-dns-webhook.k8s.io/status: injected注解的Pod，待Pod完成重建以后再卸载插件。
1. 卸载前检查。 
   1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
   
   2. 在左侧导航栏中选择"插件中心"，在右侧找到**节点本地域名解析加速**，单击"编辑"。
   
   3. 在"参数配置"中查看是否启用DNS Config自动注入。
      如果已启用DNSConfig自动注入：
      1. 在左侧导航栏中选择"命名空间"。
      
      2. 检查哪些命名空间存在node-local-dns-injection=enabled的标签，并删除标签，操作步骤请参见[管理命名空间标签](https://support.huaweicloud.com/usermanual-cce/cce_10_0285.html#cce_10_0285__section124953014352)。
      
      3. 删除上述命名空间中的Pod并重建。
       
      如果未启用DNSConfig自动注入：
      1. 使用kubectl连接集群。
      
      2. 检查哪些业务Pod被手动注入DNSConfig。如果在多个命名空间下创建Pod，所有命名空间下的Pod均需要进行检查。 例如，检查default命名空间下的Pod，您可以执行以下命令：
         ```
         kubectl get pod -n default -o yaml
         ```
         
      
      3. 手动清除DNSConfig，并重建Pod。
       
   
   
   
   
2. 卸载插件。 
   1. 在左侧导航栏中选择"插件中心"，在右侧找到**节点本地域名解析加速**，单击"卸载"。
   
   2. 在弹出对话框中单击"确定"。
   
   
   
   
 
#### 相关文档
- 如果您需要了解工作负载DNS相关配置选项的原理及详细说明，请参见[工作负载DNS配置说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0365.html)。
- 安装插件后，您可以在工作负载中注入本地域名的DNSConfig保证DNS性能，详情请参见[使用节点本地域名解析加速（NodeLocal DNSCache）提升DNS性能](https://support.huaweicloud.com/usermanual-cce/cce_10_0362.html)。
 
 #### 版本记录
表3节点本地域名解析加速插件版本记录 
| 插件版本    | 支持的集群版本                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 更新特性                                                                                                                                                                                                                                                                                                                                                                                                                                   | 社区版本     |
|:---|:---|:---|:---|
| 1.7.100 | v1.29 v1.30 v1.31 v1.32 v1.33 v1.34 v1.35 v1.36                | 修复部分问题                                                                                                                                                                                                                                                                                                                                                                                                                                 | 1.26.0      |
| 1.7.94    | v1.29 v1.30 v1.31 v1.32 v1.33 v1.34 v1.35 v1.36 | 支持CCE v1.36集群                                                                                                                                                                                                                                                                                                                                                                                                                          | 1.26.0   |
| 1.7.93    | v1.29 v1.30 v1.31 v1.32 v1.33 v1.34 v1.35                                                                         | 修复部分问题                                                                                                                                                                                                                                                                                                                                                                                                                                | 1.26.0     |
| 1.7.71 | v1.29 v1.30 v1.31 v1.32 v1.33 v1.34 v1.35                                                                     | 支持CCE v1.35集群                                                                                                                                                                                                                                                                                                                                                                                                                          | 1.26.0    |
| 1.7.66   | v1.28 v1.29 v1.30 v1.31 v1.32 v1.33 v1.34                                                               | 修复部分问题                                                                                                                                                                                                                                                                                                                                                                                                                                 | 1.26.0   |
| 1.7.62   | v1.28 v1.29 v1.30 v1.31 v1.32 v1.33 v1.34                                                                 | 支持CCE v1.34集群                                                                                                                                                                                                                                                                                                                                                                                                                          | 1.26.0     |
| 1.7.2     | v1.27 v1.28 v1.29 v1.30 v1.31 v1.32 v1.33                                                                     | 升级社区版本为1.26.0                                                                                                                                                                                                                                                                                                                                                                                                                           | 1.26.0    |
| 1.6.88    | v1.27 v1.28 v1.29 v1.30 v1.31 v1.32 v1.33                                                                | 支持CCE v1.33集群                                                                                                                                                                                                                                                                                                                                                                                                                          | 1.22.20   |
| 1.6.80     | v1.25 v1.27 v1.28 v1.29 v1.30 v1.31 v1.32                                                                       | 支持CCE v1.32集群                                                                                                                                                                                                                                                                                                                                                                                                                            | 1.22.20    |
| 1.6.66  | v1.25 v1.27 v1.28 v1.29 v1.30 v1.31                                                                                                                                 | 支持修改健康检查端口                                                                                                                                                                                                                                                                                                                                                                                                                             | 1.22.20    |
| 1.6.62   | v1.25 v1.27 v1.28 v1.29 v1.30 v1.31                                                                                                                              | 支持CCE v1.31集群                                                                                                                                                                                                                                                                                                                                                                                                                        | 1.22.20    |
| 1.6.37   | v1.23 v1.25 v1.27 v1.28 v1.29 v1.30                                                                                                                               | 更新admission-controller组件日志输出为容器标准输出                                                                                                                                                                                                                                                                                                                                                                                                   | 1.22.20 |
| 1.6.36   | v1.23 v1.25 v1.27 v1.28 v1.29 v1.30                                                                                                                                           | 适配CCE v1.30集群                                                                                                                                                                                                                                                                                                                                                                                                                         | 1.22.20    |
| 1.6.8      | v1.23 v1.25 v1.27 v1.28 v1.29                                                                                                                                                                                                       | 优化自定义注入配置体验                                                                                                                                                                                                                                                                                                                                                                                                                            | 1.22.20   |
| 1.6.7    | v1.23 v1.25 v1.27 v1.28 v1.29                                                                                                                                                                                                          | 新增自定义注入配置                                                                                                                                                                                                                                                                                                                                                                                                                               | 1.22.20   |
| 1.6.2   | v1.21 v1.23 v1.25 v1.27 v1.28 v1.29                                                                                                                                             | 适配CCE v1.29集群                                                                                                                                                                                                                                                                                                                                                                                                                            | 1.22.20  |
| 1.5.2    | v1.21 v1.23 v1.25 v1.27 v1.28                                                                                                                                                                                                      | 修复部分问题                                                                                                                                                                                                                                                                                                                                                                                                                                  | 1.22.20    |
| 1.5.1     | v1.21 v1.23 v1.25 v1.27 v1.28                                                                                                                                                                                                   | 修复部分问题                                                                                                                                                                                                                                                                                                                                                                                                                                  | 1.22.20   |
| 1.5.0   | v1.21 v1.23 v1.25 v1.27 v1.28                                                                                                                                                                                               | - 适配CCE v1.28集群  - 插件多可用区部署模式支持选择均匀分布  - 插件容器基础镜像切HCE20   | 1.22.20    |
| 1.4.6  | v1.19 v1.21 v1.23 v1.25 v1.27                                                                                                                                                                                                   | - 修复golang bug导致的admission-controller实例出现高CPU问题  - 修复插件升级admission-controller实例不会自动重启问题                                                                                              | 1.22.20    |
| 1.4.0  | v1.19 v1.21 v1.23 v1.25 v1.27                                                                                                                                                                                                  | 修复插件在CCI场景下pod请求耗时长问题                                                                                                                                                                                                                                                                                                                                                                                                                    | 1.22.20   |
| 1.3.7     | v1.19 v1.21 v1.23 v1.25 v1.27                                                                                                                                                                                                 | -                                                                                                                                                                                                                                                                                                                                                                                                                                      | 1.22.20  |
| 1.3.5   | v1.19 v1.21 v1.23 v1.25 v1.27                                                                                                                                                                                                     | 适配CCE v1.27集群                                                                                                                                                                                                                                                                                                                                                                                                                          | 1.22.20    |
| 1.3.1     | v1.19 v1.21 v1.23 v1.25                                                                                                                                                                                                                                                                      | - 支持为命名空间自动开启DNS Config自动注入  - 插件与节点时区一致                                                                                                                                                 | 1.22.20   |
| 1.2.7    | v1.19 v1.21 v1.23 v1.25                                                                                                                                                                                                                                                                      | 支持插件实例AZ反亲和配置                                                                                                                                                                                                                                                                                                                                                                                                                           | 1.21.1      |
| 1.2.4       | v1.19 v1.21 v1.23 v1.25                                                                                                                                                                                                                                                                    | 适配CCE v1.25集群                                                                                                                                                                                                                                                                                                                                                                                                                          | 1.21.1      |
| 1.2.2   | v1.19 v1.21 v1.23                                                                                                                                                                                                                                                                                                                                    | 支持自定义NodeLocal DNSCache规格                                                                                                                                                                                                                                                                                                                                                                                                              | 1.21.1   |
   
