在 Kubernetes 集群中,通常是先通过 NodeLocal DNS Cache 进行域名解析,如果 NodeLocal DNS Cache 没有找到对应的域名解析结果,才会向 CoreDNS 发起请求。在部署层面上看nodelocaldns会在每个节点上运行一个 DNS 缓存服务,而CoreDNS则不需要每个k8s节点上都部署一个,可以根据需求设置CoreDNS服务数量。
具体的解析流程如下:
1. 当 Pod 需要进行域名解析时,首先会查询 NodeLocal DNS Cache。NodeLocal DNS Cache 会在节点上缓存一部分 DNS 解析结果,如果能够命中缓存,则直接返回结果。
2. 如果 NodeLocal DNS Cache 没有找到对应的域名解析结果,它会将请求转发给 CoreDNS。CoreDNS 是 Kubernetes 集群中的默认 DNS 服务器,负责为整个集群中的 Pod 提供 DNS 解析服务。
3. CoreDNS 收到请求后,会根据配置和插件实现对请求的处理,最终返回对应的域名解析结果给 NodeLocal DNS Cache,然后由 NodeLocal DNS Cache 返回给发起解析请求的 Pod。
通过这样的两级解析机制,可以在节点级别和集群级别提高 DNS 解析的性能和可靠性。NodeLocal DNS Cache 主要用于提高节点级别的 DNS 解析效率,而 CoreDNS 则负责集群级别的 DNS 解析服务。这种结合使用的方式可以有效减少 DNS 解析的延迟并提高整个集群的性能。
注:
1、宿主机修改了域名服务器,想要pod按照新的域名服务器解析,可以重启coredns、nodelocaldns服务,注意顺序!