【Kubernetes笔记】为什么DNS解析会超时?

【Kubernetes笔记】为什么DNS解析会超时?

目录

  • 1 问题背景
  • 2 产生后续的问题
  • 3 DNS 负缓存工作原理:
  • 4 如何解决和缓解 DNS 负缓存
    • 4.1 减小负缓存 TTL
    • 4.2 重试机制
    • 4.3 减少 Pod 的频繁重启或调度
    • 4.4 使用 Headless Service
    • 4.5 手动刷新 DNS 缓存
  • 5 总结

❤️ 摘要:本文是作者在Kubernetes环境中遇到的一个实际问题,即使Pod和服务正常运行,DNS解析仍可能出现超时或失败。文章分析了两种常见场景及原因,并介绍了DNS负缓存机制及其带来的问题。为解决这些问题,可以根据场景采取不同的措施,有助于提高DNS解析的实时性和准确性,保障应用的稳定运行。

1. 问题背景

❓ 思考:当部署的Pod、Service已经正常运行了, 但是为什么DNS解析有时会出现超时的情况?

/ # nslookup redis-0.redis.default.svc.cluster.local
Server:         10.245.0.254
Address:        10.245.0.254:53Server:         10.245.0.254
Address:        10.245.0.254#53** server can't find redis-0.redis.default.svc.cluster.local: NXDOMAIN

通常出现的场景有两个:

  • Pod 出现变化导致解析失败:当 Pod 被删除、重启或者调度到其他节点时,Pod 的 IP 地址会发生变化。在这种情况下需要更新服务与 Pod 之间的 IP 映射。如果 DNS 缓存未及时更新,在查询时可能会返回失败的 DNS 记录。
  • Service 创建后短时间内不可解析:在 Service 刚创建或更新时,DNS 系统需要一段时间来将新的 Service 名称解析到 ClusterIP。如果在这个时间间隙内有请求到该 Service 的域名,DNS 系统可能返回负缓存,并且影响后续的解析请求。

2. 产生后续的问题

每当解析出现失败后,DNS服务器会存在DNS 负缓存(DNS Negative Caching)。

DNS 负缓存(DNS Negative Caching):当 DNS 查询结果为失败时(即查询的域名不存在,或者请求失败),DNS 服务器会将该失败信息缓存一段时间,以避免频繁重复查询同一个不存在的域名。这种机制可以提高 DNS 查询的效率,减少不必要的网络流量。但也会产生一些问题:

  1. 影响域名恢复的实时性:如果一个域名一开始不可用,但在负缓存时间内域名恢复正常,客户端仍可能会因为负缓存的存在继续收到失败的响应,直到缓存过期。因此,负缓存可能在一定时间内影响恢复服务的及时性。。
  2. 错误的解析结果:负缓存可能会导致客户端继续收到错误的解析结果,甚至当 Pod 或 Service 已经处于健康状态时依然无法访问。
  3. 集群内不同 DNS 服务器的缓存差异:不同的 DNS 服务器对负缓存的处理策略和 TTL 设置不同的话,可能会导致查询结果在不同客户端中表现不一致。

3. DNS 负缓存工作原理

当 DNS 查询无法成功解析域名时,DNS 服务器会返回一个错误响应。通常,这种错误包括:

  1. NXDOMAIN(Non-Existent Domain):表示域名不存在。
  2. SERVFAIL:表示 DNS 服务器遇到问题或无法处理请求。
  3. REFUSED:表示查询被拒绝。

缓存的时间由错误响应中的 TTL(Time To Live) 值控制,通常会设置为较短的一段时间(例如几秒或几分钟)。

4. 如何解决和缓解 DNS 负缓存

4.1 减小负缓存 TTL

如果你使用的是 CoreDNS 作为 Kubernetes 集群的 DNS 服务,可以通过修改 CoreDNS 配置文件来减少 NXDOMAIN 负缓存的时间。

例如,修改 coredns ConfigMap,调整 cache 插件的负缓存时间:

kubectl edit configmap coredns -n kube-system

Corefile 中找到 cache 的配置部分:

  data:Corefile: |-.:53 {errorshealth {lameduck 5s}readykubernetes cluster.local in-addr.arpa ip6.arpa {pods insecurefallthrough in-addr.arpa ip6.arpattl 30}prometheus 0.0.0.0:9153forward . /etc/resolv.confcache 30 {denial 5  # 将负缓存时间设置为 5 秒}loopreloadloadbalance}

这里的 denial 表示缓存 NXDOMAIN 结果的时间,单位是秒。通过将其设置为较小的值(如 5 秒),可以减少负缓存对解析的影响。

4.2 重试机制

应用程序在对 Pod 或 Service 进行 DNS 查询时,可以实现重试机制。由于 DNS 负缓存的时间通常很短(几秒钟),简单的重试策略可以避免因临时 DNS 解析失败导致的应用程序中断。

4.3 减少 Pod 的频繁重启或调度

  • 确保 Liveness 和 Readiness 探针设置合理,避免因过于敏感的探针配置导致 Pod 频繁重启。
  • 检查 Pod 的资源限制,确保为每个 Pod 分配了足够的 CPU 和内存资源,避免因资源不足导致 Pod 宕机或调度失败。

4.4 使用 Headless Service

  • 在使用 Headless Service 时,DNS 直接解析为 Pod 的 IP 地址,因此 Pod 之间可以直接通过 DNS 名称通信,不会受到 Service 的负缓存影响。
  • 适用于有状态应用(如 StatefulSet),可以直接通过 Pod 的 DNS 名称(如 redis-0.redis.default.svc.cluster.local)进行访问。

4.5 手动刷新 DNS 缓存

在一些情况下,如果负缓存对应用产生了严重影响,你可以尝试手动刷新 DNS 缓存,确保新的 DNS 解析结果生效。

  • 删除并重启 CoreDNS Pod:
    kubectl delete pod -n kube-system -l k8s-app=kube-dns
    
    Kubernetes 会自动重启 CoreDNS Pod,从而清除 DNS 缓存。

5. 总结

Kubernetes 中的 DNS 负缓存问题,通常发生在 Pod 动态变化或 Service 创建的瞬间,导致 DNS 查询失败并被缓存。如果你在实际的业务场景也遇到这种情况,可以通过以上的方式尝试缓解或处理负缓存的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1536741.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 🍸前言 🍻一、台式电脑基本组成 🍺二、组装 🍹三、安装系统 👋四、系统设置 👀五、章末 🍸前言 小伙伴们大家好,上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

15. 三数之和(实际是双指针类型的题目)

15. 三数之和 15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以…

支持升降压型、升压、降压、60V的1.2MHz频率LED恒流驱动器LGS63040、LGS63042

前言: 一款支持升降压的LED驱动器。适合单节锂电池使用。当然不仅于此。SOT23-5封装的外形和丝印 特性 宽输入电压、宽输出电压范围:3.0V-60V 支持 PWM 调光及模拟调光 内置 60V/350mΩ低侧金属氧化物半导体场效应晶体管 1.2MHz固定工作频率 逐周期峰值…

面试官问:你在团队中的角色是什么?

面试官问你在团队中的角色是什么,其目的是了解你如何在团队环境中工作,以及你如何看待自己在团队中的定位。他们希望听到你如何与他人协作、你的领导能力或团队合作精神,以及你是否能适应不同的团队角色。 回答这类问题时,你可以…

(南京观海微电子)——GH7006+Boe_6.8_AV068WVU-N10原理介绍

​​​​​​​​​​​​​​​​​​​​​​​​​​​​

07_Python数据类型_集合

Python的基础数据类型 数值类型:整数、浮点数、复数、布尔字符串容器类型:列表、元祖、字典、集合 集合 集合(set)是Python中一个非常强大的数据类型,它存储的是一组无序且不重复的元素,集合中的元素必须…

Python 课程12-Python 自动化应用

前言 Python 自动化应用 可以帮助开发者节省时间和精力,将重复性、手动操作变为自动化脚本。例如,Python 可以用于自动化处理文件、邮件、生成报表,甚至可以控制浏览器执行复杂的网页操作任务。借助 Python 的强大库和工具,可以轻…

Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

目录 一、Linux软件包管理器 - yum(ubuntu用apt代替yum)1、Linux下安装软件的方式2、认识 yum3、查找软件包4、安装软件5、如何实现本地机器和云服务器之间的文件互传 二、Linux编辑器 - vim1、vim 的基本概念2、vim 下各模式的切换3、vim 命令模式各命令…

开题报告的流程

开题报告是学术研究或工程项目开始前的一个重要环节,它标志着项目正式启动。开题报告的流程通常包括以下几个步骤: 1. **选题与立项**: - 确定研究或项目的主题。 - 进行初步的文献调研和市场调查。 - 提出研究或项目的意义、目标和…

Mysql连接不上的问题?

Mysql服务器本地能访问,但是外部连接报错如下:显然我也知道这就是一个权限问题,但是在网上百度的方法要么就是不生效,要么就是执行命令报错,很抓狂~这里提供精准的解决方案:SELECT User, Host F…

OJ在线评测系统 后端项目初始化 Springboot项目通用模版讲解

后端项目初始化 重要 先把通用的后端框架跑起来 准备好文件 用idea打开 先去把项目名替换了 全局替换 第二步是改包名 包名也改一下 查看配置文件 启动 访问端口 接口文档 就是一个加强版的postman 创建数据库 执行 创建 进行测试 使用接口文档 后端初始化模版讲解 讲…

【JAVA干货店】带你玩转数组与递归

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 递归利用递归求斐波那契数列数组入门 递归 自己调用自己 StackOverflowError:栈溢出错误,出现的原…

AR技术在电商行业中有哪些应用场景?有何优势?

AR(增强现实)技术在电商行业中的应用场景广泛且多样,为消费者带来了全新的购物体验,同时也为商家提供了诸多优势。51建模网为电商行业AR技术应用提供解决方案,以下是AR技术在电商行业中的主要应用场景及其优势&#xf…

PhotoZoom Pro / Classic 9.0.2激活版安装激活图文教程

图像格式中,位图格式的图像是由点阵像素组成的数据文件,所以呢在把位图图像放大的时候,就会发现看到它是由于许多点构成,这就是为什么数码照片在使用普通的工具放大时会失真的原因。不过呢由于一些日常需求,我们经常需…

TalkSphere项目介绍

TalkSphere项目介绍 文章目录 TalkSphere项目介绍一、前言二、技术栈及开发环境三、主要功能(一)用户登录与注册(二)用户历史消息展示(三)在线用户实时聊天 四、结语 一、前言 在线聊天室作为一个虚拟社交…

关于安卓App自动化的一些想法

安卓App自动化一般使用PythonAppium。页面元素通常是使用AndroidStudio中的UI Automator Viewer工具来进行页面元素的追踪。但是这里涉及到一个问题就是,安卓apk在每次打包的时候,会进行页面的混淆以及加固,所以导致每次apk打包之后会出现页面…

猫头虎分享:Python库 PyMongo 的简介、安装、用法详解入门教程

🐯猫头虎分享:Python库 PyMongo 的简介、安装、用法详解入门教程 今天有粉丝问猫哥:MongoDB如何与Python连接? 我第一时间就想到了一个简单又强大的解决方案——PyMongo!这个库帮助我们在 Python 中高效地与 MongoDB 进…

20240916 每日AI必读资讯

超强o1模型智商已超120!1小时写出NASA博士1年代码,最新编程赛超越99.8%选手 - 一位UCI物理学博士实测o1,发现自己用时1年完成的博士论文代码,竟被AI在1个小时之内实现了。 - o1在最新门萨智商测试中,IQ水平竟超过了1…

揭开谜底:用 C 语言打造你的扫雷游戏!

目录 1. 功能概述 用户界面 2. 游戏分析与设计 2.1 数据结构分析 地雷存储: 玩家视图: 2.2 文件结构设计 3. 代码实现 game.h game.c test.c 亮点功能与创新 智慧的较量:核心游戏循环 进阶功能:让游戏更加与众不同 还…

MySQL 中的 GROUP BY 和 HAVING 子句:特性、用法与注意事项

在 MySQL 数据库的查询操作中,GROUP BY 和 HAVING 子句是非常强大的工具,它们能够帮助我们对数据进行分组和筛选,从而更好地分析和处理数据。今天,我们就来深入了解一下 GROUP BY 和 HAVING 子句的特性、用法及注意事项。 一、GR…