问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

09-kubernetes中的域名解析流程

发布网友 发布时间:2022-12-07 04:19

我来回答

1个回答

热心网友 时间:2023-08-23 10:48

从Kubernetes 1.11版本开始,Kubernetes集群的DNS服务由CoreDNS提供。CoreDNS是CNCF基金会的一个项目,是用Go语言实现的高性能、插件式、易扩展的DNS服务端。CoreDNS解决了KubeDNS的一些问题,例如dnsmasq的安全漏洞、externalName不能使用stubDomains设置,等等。

CoreDNS支持自定义DNS记录及配置upstream DNS Server,可以统一管理Kubernetes基于服务的内部DNS和数据中心的物理DNS。

CoreDNS没有使用多个容器的架构,只用一个容器便实现了KubeDNS内3个容器的全部功能。

从kubernetes官方提供的 coredns.yml 文件中,不难看出coredns服务配置至少需要一个ConfigMap、一个Deployment和一个Service共3个资源对象。ConfigMap coredns 主要配置文件Corefile的内容:

其中主要有二个地方来解析配置
1、这段配置的意思是cluster.local后缀的域名都是kubernetes内部域名,coredns会监控service的变化来修改域名的记录

2、如果coredns没有找到dns记录,则去找 /etc/resolv.conf 中的 nameserver 解析

接下来使用一个带有nslookup工具的Pod来验证DNS服务能否正常工作:

通过nslookup进行测试。
查找defaul命名空间存在的ng-deploy-80服务

如果某个Service属于不同的命名空间,那么在进行Service查找时,需要补充Namespace的名称,组合成完整的域名。下面以查找kubernetes-dashboard服务为例,

众所周知, DNS 服务器用于将域名转换为 IP (具体为啥要转换建议复习下 7 层网络模型). Linux 服务器中 DNS 解析配置位于 /etc/resolv.conf , 在 Pod 中也不例外,

DNS 策略可以逐个 Pod 来设定。当前kubernetes支持这4中DNS 策略

如果我们不填dnsPolicy, 默认策略就是 ClusterFirst 。
kubelet 在起 pause 容器的时候,会将其 DNS 解析配置初始化成集群内的配置。配置: 它的 nameserver 就是指向 coredns 的

k8s里面有4种DNS策略, 而coredns使用的DNS策略就是Default, 这个策略的意思就是继承宿主机上的/etc/resolve.conf, 所以coredns Pod 里面的/etc/resolve.conf 的内容就是宿主机上的内容。

在集群中 pod 之间互相用 svc name 访问的时候,会根据 resolv.conf 文件的 DNS 配置来解析域名,下面来分析具体的过程。

pod 的 resolv.conf 文件主要有三个部分,分别为 nameserver、search 和 option。而这三个部分可以由 K8s 指定,也可以通过 pod.spec.dnsConfig 字段自定义。
nameserver
resolv.conf 文件的第一行 nameserver 指定的是 DNS 服务的 IP,这里就是 coreDNS 的
clusterIP:

也就是说所有域名的解析,都要经过coreDNS的虚拟IP 10.100.0.2 进行解析, 不论是内部域还是外部域名。

search 域

resolv.conf 文件的第二行指定的是 DNS search 域。解析域名的时候,将要访问的域名依次带入 search 域,进行 DNS 查询。

比如我要在刚才那个 pod 中访问一个域名为 ng-deploy-80的服务,其进行的 DNS 域名查询的顺序是:

options

resolv.conf 文件的第三行指定的是其他项,最常见的是 dnots。dnots 指的是如果查询的域名包含的点 “.” 小于 5,则先走 search 域,再用绝对域名;如果查询的域名包含点数大于或等于 5,则先用绝对域名,再走 search 域。K8s 中默认的配置是 5。

也就是说,如果我访问的是 a.b.c.e.f.g ,那么域名查找的顺序如下:

通过 svc 访问

在 K8s 中,Pod 之间通过 svc 访问的时候,会经过 DNS 域名解析,再拿到 ip 通信。而 K8s 的域名全称为 "<service-name>.<namespace>.svc.cluster.local",而我们通常只需将 svc name 当成域名就能访问到 pod,这一点通过上面的域名解析过程并不难理解。

参考
(1)K8S落地实践 之 服务发现(CoreDNS)
https://blog.51cto.com/u_12965094/2641238
(2)自定义 DNS 服务
https://kubernetes.io/zh/docs/tasks/administer-cluster/dns-custom-nameservers/
(3)Kubernetes 服务发现之 coreDNS
https://juejin.cn/post/6844903965520297991
(4)Kubernetes 集群 DNS 服务发现原理
https://developer.aliyun.com/article/779121
(5)Kubernetes之服务发现和域名解析过程分析
https://www.jianshu.com/p/80ad7ff37744

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么起点中文网上传小说怎么也分不了段?ji 我在手机起点网写小说,请问大家怎样换行? “千古兴亡泰伯国”的出处是哪里 ...登京口北固亭有怀古》原文赏析及翻译(千古兴亡多少事) “千古兴亡一梦惊”的出处是哪里 千古兴亡多少事的翻译是什么 《千古兴亡多少事,悠悠。不尽长江滚滚流。 (宋·辛弃》古诗原文及翻译... 办理蚂蚁宝卡后可以转换成使用原联通号码 蚂蚁宝卡可以变更成其他4G套餐吗 状态空间模型状态空间模型的建立和预测的步骤 kubet怎么注册 现在大学生当兵两年有20万吗 哪款8848手机比较有特色? 苹果手机app删除时怎么才能不乱跳 学校发的信访工作条例知识测试题网太卡有的题没给分会怎么样 各级党校行政学院应当将信访工作作为什么内容纳入教学培训 你好我朋友尿酸高痛风引起脚痛吃什么药好... 尿酸过高,脚痛风怎么办,一冷就好痛,骨头痛 数字媒体艺术在环境艺术设计中的应用 四十岁女人下眼袋大的化妆视频教程 怎样化妆隐藏眼袋的技巧? 详细03 如何化妆使眼袋变小视频 透明瓦算违法建筑吗怎么处理 贝壳胶是什么 通信工程师考试主观题怎么阅卷 不知道三七粉、田七粉·阿胶粉还有龟甲胶粉能一起吃吗 吃着阿胶呢,能在吃三七粉吗, 枇杷可以和梨一起吃吗?桃子和梨不要一起吃 陶令不知何处去,桃花源里可耕田,如果比喻成感情是什么意思?谢谢了... ...帝子乘风下翠微……陶令不知何处去,桃花园里可耕田?(详答)_百度... 简述kube-proxy iptables的原理? 新沂二手车过户带哪些材料? 江苏省新沂市亿吨粮库是国有的吗? 苏州西站到新沂的车有吗? 新沂有iPhone售后服务店吗?有的话把地址给我 吃饭不买单会受到什么刑罚? 做了两个恐怖的梦,唯一一次醒来几乎记得全程的梦,求解梦解答,我这是什... 安徽播音统考考考几天 传祺gs4是国产汽车吗? 传祺gs4汽车是国产还是合资的? 房子卖了户口没地方迁应该怎么办 房子卖了,户口还在原地怎么办? 中外合办学校是怎么回事 如何采用域管理公司电脑 我想用域管理计算机怎么实现 车学堂可以不听课吗 车学堂可以卸载吗 车学堂可以在电脑上刷学时吗 创城手抄报内容文字 万圣节南瓜怎么做手工