节点本地域名解析加速
插件简介
节点本地域名解析加速(node-local-dns)是基于社区NodeLocal DNSCache提供的插件,通过在集群节点上作为守护程序集运行DNS缓存代理,提高集群DNS性能。
开源社区地址:https://github.com/kubernetes/dns
启用NodeLocal DNSCache之后,DNS查询所遵循的路径如下图所示。
- ①:已注入DNS本地缓存的Pod,默认会通过NodeLocal DNSCache解析请求域名。
- ②:NodeLocal DNSCache本地缓存如果无法解析请求,则会请求集群CoreDNS进行解析。
- ③:对于非集群内的域名,CoreDNS会通过VPC的DNS服务器进行解析。
- ④:已注入DNS本地缓存的Pod,如果无法连通NodeLocal DNSCache,则会直接通过CoreDNS解析域名。
- ⑤:未注入DNS本地缓存的Pod,默认会通过CoreDNS解析域名。
约束与限制
- 仅支持1.19及以上版本集群。
安装插件
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到节点本地域名解析加速插件,单击“安装”。
- 在安装插件页面,根据需求选择“规格配置”。
- 选择“系统预置规格”时,您可根据集群规模选择“小规格”或“大规格”,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
“小规格”为单实例部署,最大支持50节点、1000Pod集群规模;“大规格”为双实例部署,具有高可用能力,最大支持500节点、1000Pod集群规模。
- 选择“自定义规格”时,您可根据需求调整插件实例数和资源配额。实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。
- 选择“系统预置规格”时,您可根据集群规模选择“小规格”或“大规格”,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
- 设置插件支持的“参数配置”。
- DNSConfig自动注入:启用后,会创建DNSConfig动态注入控制器,该控制器基于Admission Webhook机制拦截目标命名空间(即命名空间包含标签node-local-dns-injection=enabled)下Pod的创建请求,自动为Pod配置DNSConfig。未开启DNSConfig自动注入或Pod属于非目标命名空间,则需要手动给Pod配置DNSConfig。
开启自动注入后,您可以为DNSConfig自定义以下配置项(插件版本为1.6.7及以上支持):
如果开启自动注入时Pod中已经配置了DNSConfig,则优先使用Pod中的DNSConfig。
- 域名解析服务器地址nameserver(可选):容器解析域名时查询的DNS服务器的IP地址列表。默认会添加NodeLocal DNSCache的地址,以及CoreDNS的地址,允许用户额外追加1个地址,重复的IP地址将被删除。
- 搜索域search(可选):定义域名的搜索域列表,当访问的域名不能被DNS解析时,会把该域名与搜索域列表中的域依次进行组合,并重新向DNS发起请求,直到域名被正确解析或者尝试完搜索域列表为止。允许用户额外追加3个搜索域,重复的域名将被删除。
- ndots(可选):该参数的含义是当域名的“.”个数小于ndots的值,会先把域名与search搜索域列表进行组合后进行DNS查询,如果均没有被正确解析,再以域名本身去进行DNS查询。当域名的“.”个数大于或者等于ndots的值,会先对域名本身进行DNS查询,如果没有被正确解析,再把域名与search搜索域列表依次进行组合后进行DNS查询。
- 目标命名空间:启用DNSConfig自动注入时支持设置。仅1.3.0及以上版本的插件支持。
- 全部开启:CCE会为已创建的命名空间添加标签(node-local-dns-injection=enabled),同时会识别命名空间的创建请求并自动添加标签,这些操作的目标不包含系统内置的命名空间(如kube-system)。
- 手动配置:手动为需要注入DNSConfig的命名空间添加标签(node-local-dns-injection=enabled),操作步骤请参见管理命名空间标签。
- DNSConfig自动注入:启用后,会创建DNSConfig动态注入控制器,该控制器基于Admission Webhook机制拦截目标命名空间(即命名空间包含标签node-local-dns-injection=enabled)下Pod的创建请求,自动为Pod配置DNSConfig。未开启DNSConfig自动注入或Pod属于非目标命名空间,则需要手动给Pod配置DNSConfig。
- 设置插件实例的部署策略。
- 调度策略对于DaemonSet类型的插件实例不会生效。
- 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
表1 插件调度配置 参数
参数说明
多可用区部署
- 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
- 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。
- 强制模式:插件Deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。
节点亲和
容忍策略
容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。
插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。
详情请参见设置容忍策略。
- 完成以上配置后,单击“安装”。
组件说明
容器组件 |
说明 |
资源类型 |
---|---|---|
node-local-dns-admission-controller |
提供自动注入DNSConfig功能。 |
Deployment |
node-local-dns-cache |
作为节点上DNS缓存代理提高集群DNS性能。 |
DaemonSet |
使用NodeLocal DNSCache
默认情况下,应用的请求会通过CoreDNS代理,如果需要使用NodeLocal DNSCache进行DNS缓存代理,您有以下几种方式可以选择,详情请参见使用NodeLocal DNSCache。
- 自动注入:创建Pod时自动配置Pod的dnsConfig字段。(kube-system等系统命名空间下的Pod不支持自动注入)
- 手动配置:手动配置Pod的dnsConfig字段,从而使用NodeLocal DNSCache。
卸载插件
卸载插件后将影响已经使用node-local-dns地址进行域名解析的Pod,请谨慎操作。如需卸载,请先清除命名空间上的node-local-dns-injection=enabled标签,然后删除重建带有node-local-dns-webhook.k8s.io/status: injected注解的Pod,待Pod完成重建以后再卸载插件。
- 卸载前检查。
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到node-local-dns,单击“编辑”。
- 在“参数配置”中查看是否启用DNS Config自动注入。
如果已启用DNSConfig自动注入:
- 在左侧导航栏中选择“命名空间”。
- 检查哪些命名空间存在node-local-dns-injection=enabled的标签,并删除标签,操作步骤请参见管理命名空间标签。
- 删除上述命名空间中的Pod并重建。
如果未启用DNSConfig自动注入:
- 卸载node-local-dns插件。
- 在左侧导航栏中选择“插件中心”,在右侧找到node-local-dns,单击“卸载”。
- 在弹出对话框中单击“确定”。
版本记录
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
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 |
|
1.22.20 |
1.4.6 |
v1.19 v1.21 v1.23 v1.25 v1.27 |
|
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 |
|
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 |