- 文档首页
容器服务
容器服务 VKE
用户指南
网络
域名解析(DNS)
使用 NodeLocal DNSCache 缓存代理
域名解析(DNS)
使用 NodeLocal DNSCache 缓存代理
使用 NodeLocal DNSCache 缓存代理
NodeLocal DNSCache 缓存方案为节点提供 DNS 缓存代理功能,提升整个集群的 DNS 服务发现性能和稳定性。本文介绍如何在集群中配置 NodeLocal DNSCache 功能。
背景信息
在大规模场景下时,大量的 DNS 请求会对 CoreDNS 造成较大的压力,导致 DNS 的时延增加,从而影响业务性能。为了提高请求速度,用户需要经常提高 CoreDNS 资源规格或者扩容,增加运维复杂度,同时效果可能也不够理想。
为解决上述问题,Kubernetes 官方提供了 NodeLocal DNSCache 缓存方案,可以有效提高大规模集群 DNS 性能和稳定性。在 VKE 集群中,提供 node-local-dns 组件作为集群的 NodeLocal DNSCache 功能组件。该组件以 DaemonSet 的形态部署在集群中的每个节点上,为节点提供 DNS 缓存代理功能,提升集群的 DNS 服务发现性能和稳定性。
当您在集群中安装 node-local-dns 组件后,系统会在 Pod 中自动注入 DNS 缓存配置。此时,DNS 解析流程为:
- NodeLocal DNSCache 解析:Pod 会首先访问本节点的 DNS 缓存配置(169.254.20.10),访问不通或缓存未命中时,再访问集群的 CoreDNS 配置。
- CoreDNS 解析:如果 NodeLocal DNSCache 本地若无缓存应答解析请求,则会通过 kube-dns 服务请求 CoreDNS(10.0.0.10) 进行解析。
说明
NodeLocal DNSCache 的更多信息,请参见 官方文档。 使用限制
- VCI 类型的 Pod 使用 NodeLocal DNSCache 功能时,需首先将 node-local-dns 组件升级至 v0.3.1 及以上版本。详情请参见 组件发布记录。
- NodeLocal DNSCache 对 vpc-cni 组件版本有依赖,vpc-cni 组件的版本不低于 v1.3.0。详情请参见 组件发布记录。
- 在集群中安装 node-local-dns 组件,开启 NodeLocal DNSCache 后,仅对新创建的 Pod 生效。
前提条件
使用场景
场景一:使用自动注入
node-local-dns 组件安装完成后。当在集群中创建 Pod 时,系统会默认为 Pod 添加访问 NodeLocal DNSCache 的 dnsConfig 配置。
以下几种 Pod 除外:
- Pod 位于 kube-system 和 kube-public 命名空间。
- Pod 所在命名空间或者 Pod 的标签包含dns-config-injection=disable。
- Pod 的网络为 hostNetwork 且 DNSPolicy 为ClusterFirstWithHostNet,或 Pod 的网络不为 hostNetwork 且 DNSPolicy 为ClusterFirst。
以 default 命名空间下的 Pod 为例,创建 Pod 时,系统会添加如下 dnsConfig 配置。
为了最大程度上保证业务 DNS 请求高可用,nameservers中会额外加入 kube-dns 的 ClusterIP(10.0.10.1)地址作为备份的 DNS 服务器。
场景二:禁用自动注入
如果您不想使用 NodeLocal DNSCache 访问,可以通过如下几种方式,禁用自动注入。
执行如下命令,关闭整个命名空间下所有新建 Pod 的 dnsConfig 配置。
在 Pod 上配置如下标签,关闭单个 Pod 的 dnsConfig 配置。
场景三:手动配置
如果自动注入功能无法满足您的使用场景,也支持手动配置 NodeLocal DNSCache 功能。操作步骤如下:
- 手工为 Pod 配置 NodeLocal DNSCache 功能。以 default 命名空间下的 Pod 为例。
说明
支持使用 kubelet 通过--cluster-dns和--cluster-domain参数来全局控制 Pod dnsConfig。但不推荐此种配置方式,如有诉求,请提工单咨询。
相关文档
最近更新时间:2026.09.30 15:54:40