首页 > 解决方案 > 为什么 Kubernetes 上没有开箱即用地启用 dns 本地缓存?

问题描述

我记得过去 DNS 记录在各种 linux 发行版上本地缓存,但这似乎多年来发生了变化(Linux 中的 DNS 缓存)。

在我们的环境(非 K8S)中,由于 DNS 查找,我们发现每个请求都有明显的延迟(1-2 毫秒)。

我还注意到默认情况下 K8S 中没有本地 DNS 缓存(https://github.com/kubernetes/kubernetes/issues/45363),CoreOS中的 DNS 缓存也默认禁用(https://coreos.com/ os/docs/latest/configuring-dns.html)。

鉴于我们正在考虑迁移到 K8S,我想知道;为什么没有特别为 Kubernetes 启用此功能?

我唯一的理论是在 kube-dns 内记录被抢先更新以确保高可用性;但我不确定K8S是否真的这样做?

作为一种解决方法,如果我要在每个节点上运行 dnsmasq,我会破坏吗?我注意到有人尝试将该设置设置为 K8S 中的默认设置,但这些尝试/PR 似乎已经过时了,我不知道为什么。

标签: dnskubernetes

解决方案


Kubernetes 1.9+宣布以来,CoreDNS已作为默认 DNS 服务器包含在kubeadm、工具等中,并取代了以前的(基于)。minikubekube-dnsdnsmasq

它是作为Caddy Web 服务器和中间件链的一个分支构建的,每个中间件组件都带有一些 DNS 功能。如果您已经使用kube-dns,则可以CoreDNS使用此链接启动。

CoreDNS 已经配备了缓存和转发功能,假设缓存作为一个单独的组件运行,并且打破了使用dnsmasq.

. {
    proxy . 8.8.8.8:53
    cache example.org
}

您可以使用许多插件来扩展 DNS 功能,例如代理请求、重写请求、对端点进行健康检查以及将指标发布到Prometheus中。


推荐阅读