K8S DNS解析过程和延迟问题

news2024/12/23 8:52:32

一、Linux DNS查询解析原理(对于调用glibc库函数gethostbyname的程序)

我们在浏览器访问www.baidu.com这个域名,dns怎么查询到这台主机呢?  

  1、在浏览器中输入www.baidu.com域名,操作系统会先查找本地DNS解析器缓存(nscd),是否有这个网址映射关系,如果有,直接返回,完成域名解析。

  2、如果本地DNS解析器缓存(nscd)里没有这个域名的映射或是没有安装nscd服务,则通过/etc/nsswitch.conf中的hosts配置项来决定域名查询获取顺序。

通常该配置项为"hosts: files dns myhostname",则表示先读/etc/hosts,否则就读/etc/resolv.conf向DNS服务器发出域名解析请求。

  3、如果本地DNS解析器缓存与/etc/hosts都没有相应的网址映射关系,首先会找/etc/resolv.conf中设置的第一个DNS服务器,在此我们叫它本地DNS服务器,

此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析记过给客户端,完成域名解析,此解析具有权威性。  4、如果要查询域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。  5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找baidu.com域服务器,重复上面的动作,进行查询,直至找到www.baidu.com主机。  6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。不管是本地DNS服务器用是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

二、K8S DNS解析过程

1、node节点(VM)DNS解析

(1) ping www.baidu.com -->Node上 local DNS cache(Linux nscd服务,如果有DNS缓存服务的情况,否则跳过) ->

(2) Node上/etc/hosts文件 ->

(3) DNS Server(Node上/etc/resolv.conf中记录的nameserver(一般是按顺序取第一个) ) ->

(4) DNS Server Cache ->

(5) 如果第一个上游DNS Server没查到,那么该DNS Server转发给上一级DNS Server或根DNS Server,以此循环

2、K8S Pod DNS解析

(1) pingwww.baidu.com -> Pod的容器里 local DNS cache(一般情况下容器镜像不会安装Linux nscd服务这里跳过) ->

(2) Pod的容器里/etc/hosts文件->

例如:测试Pod对应容器里的 /etc/hosts

(3) CoreDNS(Pod的容器里/etc/resolv.conf中记录的nameserver(一般这里Pod dnsPolicy策略默认设置的是ClusterFirst,所以该nameserver为CoreDNS的Cluster IP) )->

例如:测试Pod对应容器里的 /etc/resolv.conf, 这里的10.0.248.10为CoreDNS的Cluster IP

下图是对应CoreDNS的Service信息:

(4) CoreDNS Cache(CoreDNS cache插件,该插件会缓存已经查询过的DNS解析的信息,见下图的cache字段)->

(5) 如果CoreDNS没查到(一般只提供了kubernetes集群内的部域名的解析,具体是CoreDNS kubernetes插件),那么CoreDNS可以通过forward(内置,见上图中的forward字段)或proxy插件(第三方单独提供)转发给上游DNS Server。

当然,forward插件可配置查找当前容器内的/etc/resolv.conf文件的nameserver(配置可写为:forward . /etc/resolv.conf),注意CoreDNS的Pod dnsPolicy策略为Default,所以/etc/resolv.conf文件内容与node节点保持一致,如下:

三、参考文献

https://www.cnblogs.com/zhangxingeng/p/9970733.html

https://coredns.io/plugins/

https://coredns.io/manual/toc/

https://github.com/coredns/proxy

https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/#coredns


K8S DNS 5s延迟问题说明

一、问题复现环境

k8s托管集群版本:1.14

k8s node镜像系统:centos 7.4/7.6

node内核版本:3.10.xxx

二、问题描述

1.客户在k8s node上做curl请求(没有dns缓存),经常有响应时间达到5秒以上的请求。

2.客户在k8s pod上做curl请求(没有dns缓存),经常有响应达5s以上的请求。

命令行: curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_nslookup:%{time_namelookup}\ntime_total: %{time_total}\n" "https://api.weixin.qq.com"

三、问题定位

问题1:

(1)使用curl命令行做测试,问题概率性复现,10%左右。

(2)使用dig 命令行做测试, dig api.weixin.qq.com, 问题概率性复现。

(3)tcpdump在node上抓包分析,结合wireshark做分析,发现DNS客户端通过UDP协议并发查询A记录(ipv4)和AAAA记录(ipv6),并且使用了相同五元组,但是有AAAA记录未收到的情况。

当AAAA记录未收到时,即产生了5s左右的延迟。通过查询文档,发现dns请求默认超时时间为5s。

(4)SDN侧定位发现没有丢包,丢包位置为内核协议栈。

(5)内核侧定位,认为丢包是由内核协议栈contrack模块bug导致的。触发条件为:UDP使用相同五元组做并发请求时。

参见:

https://cloud.tencent.com/developer/article/1449227

https://www.weave.works/blog/racy-conntrack-and-dns-lookup-timeouts

4.19以上内核合入了修复patch。

问题2:定位方式及原因同1。

四、解决方案

1.规避方案:并发dns请求使用不同的源端口来避免内核收包冲突。

对于node,在resolv.conf中增加options single-request-reopen。

对于pod,在pod yaml中添加dns配置,需要客户侧自己管理配置。

template:

spec:

dnsConfig:

options:

- name: single-request-reopen

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

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

相关文章

实例2:树莓派GPIO控制外部LED灯闪烁

实例2:树莓派GPIO控制外部LED灯闪烁 实验目的 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派。通过树莓派GPIO操作的学习,熟悉GPIO的读写控制。通过外部LED灯的亮灭控制,熟悉树莓派对外界…

vue3 + vite 使用 svg 可改变颜色

文章目录vue3 vite 使用 svg安装插件2、配置插件 vite.config.js3、根据vite配置的svg图标文件夹,建好文件夹,把svg图标放入4、在 src/main.js内引入注册脚本5、创建一个公共SvgIcon.vue组件6.1 全局注册SvgIcon.vue组件6.2、在想要引入svg的vue组件中引…

Boom 3D最新版本下载电脑音频增强应用工具

为了更好地感受音乐的魅力,Boom 3D 可以让你对音效进行个性化增强,并集成 3D 环绕立体声效果,可以让你在使用任何耳机时,都拥有纯正、优质的音乐体验。Boom 3D是一款充满神奇魅力的3D环绕音效升级版,BOOM 3D是一个全新…

MyBatis 之四(动态SQL之 if、trim、where、set、foreach 标签)

文章目录动态 SQL1. if 标签2. trim 标签3. where 标签4. set 标签5. foreach 标签回顾一下,在上一篇 MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)中,学习了针对查询操作的相关知识点…

【C++】map和set的封装

文章目录一、前情回顾二、简化源码三、仿函数四、迭代器五、set的实现六、map的实现七、红黑树代码一、前情回顾 set 参数只有 key&#xff0c;但是map除了key还有value。我们还是需要KV模型的红黑树的&#xff1a; #pragma once #include <iostream> #include <ass…

游戏服务器算法-AOI基本介绍

一、直接比较所有对象 最直观也是最效率最低的一种方法。当一个事件发生&#xff0c;我们需要获得AOI范围以内的物体时&#xff0c;直接遍历游戏中所有的对象&#xff0c;并且进行坐标判断&#xff0c;如果小于或者等于AOI的范围&#xff0c;则为需要的游戏对象。 这种方法实…

零基础小白如何学会云计算?

云计算作为新兴互联网技术&#xff0c;也是IT服务的集大成者&#xff0c;包括了基础硬件服务、平台服务、应用程序开发、系统架构等服务内容。云计算的出现承接了众多IT技术和其他行业的发展&#xff0c;比如大数据、人工智能以及工业、金融、医疗、物流等&#xff0c;是经济社…

VBA提高篇_26 Textbox多行_ListBox_ComboBox

文章目录1. 文本框多行换行2. ListBox: 列表框2.1 列表框中添加条目的三种方法:3. ComboBox 组合框: 属性方法等同于以上ListBox1. 文本框多行换行 MultiLine: 控制文本框多行自动换行() Enterkeybehevior: True 代表允许在文本框中使用回车键换行 WordWrap: True 代表自动换…

/etc/fstab文件

文件/etc/fstab存放的是系统中的文件系统信息&#xff0c;当系统启动的时候&#xff0c;系统会自动地从这个文件读取信息&#xff0c;并且会自动将此文件中指定的文件系统挂载到指定的目录。当正确的设置了该文件&#xff0c;则可以通过mount /directoryname命令来加载一个文件…

Tapdata Connector 实用指南:数据入仓场景之数据实时同步到 BigQuery

【前言】作为中国的 “Fivetran/Airbyte”, Tapdata 是一个以低延迟数据移动为核心优势构建的现代数据平台&#xff0c;内置 60 数据连接器&#xff0c;拥有稳定的实时采集和传输能力、秒级响应的数据实时计算能力、稳定易用的数据实时服务能力&#xff0c;以及低代码可视化操作…

恢复 iPhone 和 iPad 数据的 10 种简单工具

它发生了.. 有时您需要从您的手机或平板设备恢复重要数据。 许多人已经开始将重要文件存储在手机上&#xff0c;因为他们几乎可以在任何情况下随时随地轻松访问数据。 从技术上讲&#xff0c;您会在几分之一秒内丢失所有存储的信息、照片、视频、音乐、文档等。因此&#xff…

一文3000字用Postman从0到1实现UI自动化测试

“阅读本文大概需要4分钟。Postman不是做接口测试的吗&#xff1f;为什么还能做UI自动化测试呢&#xff1f; 其实&#xff0c;只要你了解Selenium的运行原理&#xff0c;就可以理解为什么Postman也能实现UI自动化测试了。 Selenium底层原理 运行代码&#xff0c;启动浏览器后…

笔试题(十六):计算矩阵面积

# 我们给出了一个&#xff08;轴对齐的&#xff09;二维矩形列表 rectangles。 # 对于 rectangle[i] [xi1, yi1, xi2, yi2]&#xff0c;表示第i个矩形的坐标&#xff0c; # (xi1, yi1)是该矩形左下角的坐标&#xff0c; (xi2, yi2)是该矩形右上角的坐标。 # 计算平面中所有 r…

CAJ论文怎么批量免费转换成Word

大家都知道CAJ文件吗&#xff1f;这是中国学术期刊数据库中的文件&#xff0c;这种文件类型比较特殊。如果想要提取其中的内容使用&#xff0c;该如何操作呢&#xff1f;大家可以试试下面这种免费的caj转word的方法,多个文档也可以一起批量转换。准备材料&#xff1a;CAJ文档、…

信息系统项目管理师知识点汇总(2023最新)

信息系统项目管理师 信息系统项目管理师简介如何应对考试考试细节与学习 十大管理 十大管理四十七过程 信息化和信息系统 项目管理基础 项目整体管理 项目范围管理 项目进度管理 项目成本管理 项目质量管理 项目人力资源管理 项目沟通管理 项目干系人管理 项目风险…

pytest数据驱动

文章目录一、数据驱动概念二、数据驱动yaml1、yaml的基本语法&#xff1a;2、yaml支持的数据格式&#xff1a;3、安装4、使用5、读取方法a、目录结构b、yaml文件c、测试方法d、测试用例e、测试结果三、数据驱动excel1、安装导入2、操作3、读取方法a、目录结构b、excel文件c、测…

(考研湖科大教书匠计算机网络)第五章传输层-第七节:TCP可靠传输

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;TCP可靠传输二&#xff1a;补充说明本节对应视频如下 【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】&#xff1a;TCP可靠传输 …

Navicat Premium 安装 注册

Navicat Premium 一.Navicat Premium的安装 1.暂时关闭windows的病毒与威胁防护弄完再开&#xff0c;之后安装打开过程中弹窗所有警告全部允许,不然会被拦住 2.下载安装包&#xff0c;解压 链接&#xff1a;https://pan.baidu.com/s/1X24VPC4xq586YdsnasE5JA?pwdu4vi 提取码…

Qt 线程

Qt中线程的解释&#xff1a; QThread(线程)&#xff0c;代表一个在应用程序中可以独立控制的线程&#xff0c;可以和进程中的其他线程分享数据。QThread 对象管理程序中的一个控制线程。QThreads 在 run&#xff08;&#xff09; 中开始执行。默认情况下&#xff0c;run&#…

DDFN: Decoupled Dynamic Filter Networks解耦的动态卷积

一、论文信息 论文名称&#xff1a;Decoupled Dynamic Filter Networks 论文&#xff1a;https://thefoxofsky.github.io/files/ddf.pdf 代码&#xff1a;https://github.com/theFoxofSky/ddfnet 主页&#xff1a;https://thefoxofsky.github.io/project_pages/ddf 作者团…