You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
域名解析(DNS)
使用 NodeLocal DNSCache 缓存代理
复制全文
下载 pdf
使用 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 解析流程为:​
  1. NodeLocal DNSCache 解析:Pod 会首先访问本节点的 DNS 缓存配置(169.254.20.10),访问不通或缓存未命中时,再访问集群的 CoreDNS 配置。​
  1. CoreDNS 解析:如果 NodeLocal DNSCache 本地若无缓存应答解析请求,则会通过 kube-dns 服务请求 CoreDNS(10.0.0.10) 进行解析。​
​alt​​
说明​
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 组件,详情请参见 node-local-dns。​
使用场景​
场景一:使用自动注入​
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 配置。​
​
...​
dnsConfig:​
nameservers:​
- 169.254.20.10 ​
- 10.0.10.1 ​
options:​
- name: ndots​
value: "3"​
- name: attempts​
value: "2"​
- name: timeout​
value: "1"​
searches:​
- default.svc.cluster.local​
- svc.cluster.local​
- cluster.local​
dnsPolicy: None​
...​
​
为了最大程度上保证业务 DNS 请求高可用,nameservers中会额外加入 kube-dns 的 ClusterIP(10.0.10.1)地址作为备份的 DNS 服务器。​
场景二:禁用自动注入​
如果您不想使用 NodeLocal DNSCache 访问,可以通过如下几种方式,禁用自动注入。​
​
命名空间维度
Pod 维度
​
执行如下命令,关闭整个命名空间下所有新建 Pod 的 dnsConfig 配置。​
​
kubectl label namespace <namespace name> dns-config-injection=disable​
​
​
​
场景三:手动配置​
如果自动注入功能无法满足您的使用场景,也支持手动配置 NodeLocal DNSCache 功能。操作步骤如下:​
  1. 请参考 禁用自动注入,关闭 Pod 自动注入功能。​
  1. 手工为 Pod 配置 NodeLocal DNSCache 功能。以 default 命名空间下的 Pod 为例。​
  • ​
    apiVersion: v1​
    kind: Pod​
    metadata:​
    name: nginx​
    spec:​
    containers:​
    - image: nginx:latest​
    name: container-0​
    dnsPolicy: None​
    dnsConfig:​
    nameservers: ["169.254.20.10","172.21.0.10"] # DNS 服务器 IP 地址​
    searches: # 请求域名不完整时的拼接字段​
    - default.svc.cluster.local​
    - svc.cluster.local​
    - cluster.local​
    options:​
    - name: ndots # 完整域名度量值。当域名中的点字符数超过该值时,直接解析。当域名中的点字符数少于该值时,会加上 searches 拼接字段再解析​
    value: "3"​
    - name: attempts # 域名解析请求失败时的重试次数​
    value: "2"​
    - name: timeout # 单个域名解析请求的超时时间,单位为秒​
    value: "1"​
    imagePullSecrets:​
    - name: default-secret​
    ...​
    ​
说明​
支持使用 kubelet 通过--cluster-dns和--cluster-domain参数来全局控制 Pod dnsConfig。但不推荐此种配置方式,如有诉求,请提工单咨询。​
相关文档​
最近更新时间:2026.09.30 15:54:40
这个页面对您有帮助吗?
有用
有用
无用
无用