dns - 为什么 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 似乎已经过时了,我不知道为什么。
解决方案
自Kubernetes 1.9+
宣布以来,CoreDNS已作为默认 DNS 服务器包含在kubeadm
、工具等中,并取代了以前的(基于)。minikube
kube-dns
dnsmasq
它是作为Caddy Web 服务器和中间件链的一个分支构建的,每个中间件组件都带有一些 DNS 功能。如果您已经使用kube-dns
,则可以CoreDNS
使用此链接启动。
CoreDNS 已经配备了缓存和转发功能,假设缓存作为一个单独的组件运行,并且打破了使用dnsmasq
.
. {
proxy . 8.8.8.8:53
cache example.org
}
您可以使用许多插件来扩展 DNS 功能,例如代理请求、重写请求、对端点进行健康检查以及将指标发布到Prometheus中。
推荐阅读
- javascript - 单击 div 时,ASP.NET 调用带有参数的 C# 函数
- api - ingress 后面的两个 swagger API asp.net core
- javascript - Javascript toISOString() 不同格式
- reactjs - 如何使用 next-connect 处理 Next.js 中 getServerSideProps 中的错误
- azure-ad-b2c - Azure AD/B2C Resource Owner Password Flow does not honor the "User Assignment Required" flag
- php - 通过匹配两个数组的值来创建新数组的有效方法
- spring-boot - 非实体requestbody对象的spring boot验证
- reactjs - 如何使用 Mobx 状态树库解决 React 应用程序中 linter 和类型冲突的问题?
- c# - GroupBy, Filtering in knockout.js
- javascript - 为什么我在反应钩子中得到这个无限循环