当前位置:首页 >> 互联网 >>

kube-dns的主要变化及实现原理

kube-dns 的主要变化及实现原理 大纲
? ? 主要变化 实现原理 ? kubedns 容器详解 ? dnsmasq 容器简介 ? exechealthz 容器简介

主要变化
●服务发现机制未变化 也就是说 kube-dns 对外的接口是基本没变的。变化主要在于 kube-dns 插件的内部组成,由 原来的四个容器变为了三个。

现在回顾一下上一期所讲的 1.2 版本 kube-dns 的组成。 Kube2sky 通过 K8S API 监视 K8S Service 资源的变化,并根据 Service 的信息生成 DNS 记录写 入到 etcd 中。 Skydns 为集群中的 Pod 提供 DNS 查询服务, DNS 记录从 etcd 中读取。 Exechealthz 提供健康检查功能。

接下来我们再看一下 1.4 版本 kube-dns 的组成。对比两张图,可以很直观的看到 kube-dns

对外接口没有发生变化。Exechealthz 是唯一保留的容器,依然提供健康检查。 不同点: 1.会检查两个容器的健康状态。 2.为集群提供 DNS 查询服务的容器由 skydns 变为了 dnsmasq。 3.Kubedns 容器替代了 kube2sky 来监视 Service 资源。 4.Etcd 容器不见了。

相信有些人会好奇 DNS 记录现在保存在哪了呢?那为了回答这个问题以及了解新版 kube-dns 的工作原理,我们就进入下一章内容来了解其实现原理。

实现原理
●kubedns 容器的实现。 本着“Talk is cheap, show me the code”原则,我们将会以源码分析的方式介绍其原理。对另 外两个容器会进行简要介绍。 先来看一下源码位置, 这里列出的是 kube-dns 插件相关的源码, 不仅仅是 kubedns 容器的。 之前的源码是集中在 cluster/addons/dns 下面的,那么 1.4 版本中分成了三个目录: ? ? ? 第一个目录会有 K8S DNS 相关的 README 以及 kubedns 容器的 Dockerfile。 第二个目录存放 kube-dns 插件的编排文件。 第三个是 kubedns 源码目录,kubedns 容器使用的命令行就是从这构建出来的。

●kubedns 容器的功能: ? ? ? ? 接入 SkyDNS,为 dnsmasq 提供查询服务 替换 etcd 容器,使用树形结构在内存中保存 DNS 记录 通过 K8S API 监视 Service 资源变化并更新 DNS 记录 服务 10053 端口

对功能有了大概了解之后,我们下面就结合源码来看看各个功能是如何实现的。 ●kubedns 实现——SkyDNS 接入 下面是 kubedns 启动的部分代码,这部分显示的是 kubedns 在启动的时候会初始化一个 SkyDNS Server,初始化的时候传入了一个 KubeDNSServer.kd。

下面是 KubeDNSServer.kd 的初始化代码,使用的是 K8S 提供的包。使用 K8S 提供的包可以初 始化一个 SkyDNS Server?相信很多人能够想到,这个 KubeDNSServer.kd 应该实现了一个接 口。

SkyDNS Server 在初始化的时候需要传入一个 Backend 接口,其定义如下。SkyDNS 基于 Etcd 实现了该接口,也会使用它初始化 Server。得益于 SkyDNS 的良好设计,K8S 只要实现该接 口便可以接入 SkyDNS 来提供 DNS 查询服务,并定制存储功能。 skydns/server/server.go

skydns/server/backend.go

●kubedns 实现——etcd 替换 在服务发现的流程中,主要用到了 Records 这个方法,下面我们就来看看 K8S 是如何实现这 个方法。 主 要步骤 是先 将域名 按“ . ”拆分 ,并 将各部 分颠 倒顺序 生成 一个 path 数组 。调 用 getRecordsForPath 方法获取 DNS 记录并返回。 kubernetes/pkg/dns/dns.go

getRecordsForPath 会调用 cache 的相关方法。 这个 cache 会被初始化为一个 TreeCache 结构, 定义如下: kubernetes/pkg/dns/dns.go

kubernetes/pkg/dns/treecache.go

如下图所示,TreeCache 的结构类似于目录树。从根节点到叶子节点的每个路径与一个域名 是相对应的,顺序是颠倒的。它的叶子节点只包含 Entries,非叶子节点只包含 ChildNodes。 叶子节点中保存的就是 SkyDNS 定义的 msg.Service 结构,可以理解为 DNS 记录。 在 Records 接口方法实现中,只需根据域名查找到对应的叶子节点,并返回叶子节点中保存 的所有 msg.Service 数据。K8S 就是通过这样的一个数据结构来保存 DNS 记录的,并替换了 Etcd。

●kubedns 实现——监视 Service 最 后 我 们 来 看 一 下 监 视 Service 资 源 的 相 关 代 码 。 如 下 图 所 示 , 这 里 使 用 了 k8s.io/kubernetes/pkg/client/cache 包的 NewInformer 方法,这个方法在 K8S 源码里会经常看 到。其参数为: ? ? ? 第一个参数需要传入 ListWatch 结构, 它定义了 List 和 Watch 操作步骤。 kd.kubeClient 结构可以用来访问 K8S API,从代码中可以看出分别访问了 List 和 Watch API 第二个参数为监视的资源类型,代码中指定了 Service 资源 第三个参数为 List 操作的执行间隔。Watch 操作是通知机制,只要监视的资源发送 变化就会调用对应的回调函数。List 操作会获取最新的全量资源与本地状态进行比 较来产生通知,可以避免网络原因导致的 Watch 丢失通知的情况。List 操作代价较 高,因此需要通过第三个参数来设置其执行间隔。 最后一个参数用来设置处理事件的回调。

?

kubernetes/pkg/dns/dns.go

下面我们以新增 Service 事件的处理流程为例来简单了解一下事件处理的代码。 在创建一个 K8S Service 资源后,newService 方法最终会调用 newPortalService 方法,其代码 如下。getSkyMsg 函数会将 Service 的 ClusterIP 保存到 msg.Service 结构中并返回,对应 recordValue。recordLabel 可以理解为一个摘要值,与 ClusterIP 是一一对应的,它将作为 TreeCache 叶子节点的 key。最后根据 Service 信息找到对应的树枝(如不存在会构建) ,并设 置叶子节点。这样一个新建的 Service 对应的 DNS 记录就保存到 kubedns 中了。 kubernetes/pkg/dns/dns.go

Kubedns 容器的主要原理已经讲解完了,下面我们简要介绍一下其他两个容器。 ●dnsmasq 简介

? ?

? ?

Dnsmasq 是一款小巧的 DNS 配置工具 在 kube-dns 插件中的作用是 ? 通过 kubedns 容器获取 DNS 规则,在集群中提供 DNS 查询服务 ? 提供 DNS 缓存,提高查询性能 ? 降低 kubedns 容器的压力、提高稳定性 Dockerfile 在 GitHub 上 Kubernetes 组织的 contrib 仓库中,位于 dnsmasq 目录下。 在 kube-dns 插 件 的 编 排 文 件 中 可 以 看 到 , dnsmasq 通 过 参 数 --server=127.0.0.1#10053 指定 upstream 为 kubedns。

●exechealthz 简介 ? ? ? 在 kube-dns 插件中提供健康检查功能 源码同样在 contrib 仓库中,位于 exec-healthz 目录下。 新版中会对两个容器都进行健康检查,更加完善。

●总结
1.4 版本 kube-dns 插件的三个容器的功能如下: ? kubedns 容器 ? 监视 k8s Service 资源并更新 DNS 记录 ? 替换 etcd, 使用 TreeCache 数据结构保存 DNS 记录并实现 SkyDNS 的 Backend 接口 ? 接入 SkyDNS,对 dnsmasq 提供 DNS 查询服务 dnsmasq 容器 ? 对集群提供 DNS 查询服务 ? 设置 kubedns 为 upstream ? 提供 DNS 缓存,降低 kubedns 负载,提高性能 exechealthz 容器 ? 定期检查 kubedns 和 dnsmasq 的健康状态 ? 为 k8s 活性检测提供 HTTP API

?

?

相比于 1.2 版本,个人认为有了如下改进: ? 无状态服务。1.2 版本中,需要将 Etcd 的数据 Volume 出来才能保证 Etcd 容器重启之后 数据不会丢失,服务可以快速恢复。新版本中作为无状态服务出现,通过增加冗余来提 高可靠性。即使 kubedns 容器重启,dnsmasq 缓存机制也可以保证服务的可用性。 优化查询效率。SkyDNS 直接从内存中获取 DNS 记录。 完善健康检查。1.2 版本中只对 kube2sky 设置了健康检查。

? ?

除了改进之外,还有一点不足,也是大家比较担心的内存占用。目前在 kube-dns 编排 文件中默认设置了内存限制为 170M, 在注释中可以看出这一数字并未在大规模集群中验证。 不过相信不久的将来我们就能看到这一验证结果。


相关文章:
kube-dns的主要变化及实现原理.doc
kube-dns的主要变化及实现原理 - 本文主要讲述了在时速云平台操作的kub
Kubernetes如何使用kube-dns实现服务发现.doc
Kubernetes如何使用kube-dns实现服务发现_计算机软件及应用_IT/计算机_专业资料。...下面就进入下一部分,了解一下 kube-dns 的工作原理。 Kube-dns 原理 Kube-...
k8s笔记009-kube-dns部署.doc
k8s笔记009-kube-dns部署_计算机硬件及网络_IT/计算机_专业资料。k8s k8s 笔记 009-kube-dns 部署 1. 准备镜像 1.1 下载镜像 [root@harbor ~]# docker pull...
项目8-4DNS的基本概念与工作原理(精)_图文.ppt
查询本机文件 Host file 3.查询区域文件 5.查询 其它 DNS 服 务器 4.查询高度缓存 8.1.2 DNS的基本概念与工作原理 1.DNS的基本概念 DNS是由解析器和域名...
DNS解析过程及原理.doc
DNS解析过程及原理 - DNS 解析过程及原理 DNS 的角色 在互联网上,最
Kubernetes DNS部署.pdf
Kubernetes DNS部署_计算机硬件及网络_IT/计算机_专业资料。Kubernetes DNS部署 -...DNS服务的工作原理解析 (1)kube2sky容器应用通过调用Kubernetes Master的API获得...
闲谈Kubernetes 的主要特性和经验分享.pdf
2) 服务发现及负载均衡 kube-proxy和DNS, 在v1之...etcd实现master 选举,从多个Master中得到一个kube-...问:roollback的具体机制是? 答:感觉应该通过lablel...
简述dns进行域名解析的原理及过程.doc
简述dns进行域名解析的原理及过程 - 简述 dns 进行域名解析的原理及过程 <1> Dns 客户机提出域名解析请求,并将请求发送给本地的域名服务器。 <2> 当本地的...
DNS的工作原理.doc
DNS的工作原理_计算机软件及应用_IT/计算机_专业资料。随着网络的逐步普及,网络安全已成为INTERNET路上事实上的焦点,它关系着INTERNET的进一步发展普及,甚至关系着...
浅析DNS的基本原理及工作流程_论文.pdf
浅析DNS的基本原理及工作流程 - INTELLIGENT CITY 智能城市 浅析 DNS 的基本原理及工作流程 罗炜 王来志 重庆城市管理职业学院 重庆市沙坪坝区大学城, 重庆 40133...
DNS工作原理是什么.doc
一.DNS 工作原理是什么? DNS 是域名系统 (Domain Name System) 的缩写,该...二.要实现 DNS 服务,服务器和客户端各自应如何配置? 1、 安装 DNS 服务 ...
DNS工作原理.doc
DNS 工作原理域名解析有正向解析反向解析之说, 正向解析就是将域名转换成对应
DNS工作原理(精)_图文.ppt
南京信息职业技术学院 《数据网组建》课程 DNS工作原理主讲:丁秀锋 目录 01 02 03 因特网域名机制 域名服务器、域名解析器 域名解析 域名域名解析 1.域名 ? ...
实验五、DNS及HTTP工作原理.doc
工作原理验证: 1)保证所有DNS服务器的高速缓存为空(可以通过重新加载文件来实现...源物理地址没变,目的物理地址发生了变化,源IP地址和目的IP地址在DHCP 服务器...
例详解dns递归和迭代查询原理及过程_图文.doc
例详解dns递归和迭代查询原理及过程 - 例详解 dns 递归和迭代查询原理及过
DNS域名系统工作过程及原理.doc
DNS域名系统工作过程及原理 - DNS 域名系统工作过程及原理 DNS 是域名系统(Domain Name System)的缩写,是一种组织域层次结构的计 算机和网络服务命名系统。 DNS ...
CDN及其工作原理_图文.pdf
CDN及其工作原理_计算机硬件及网络_IT/计算机_专业资料。这是初步了解cdn的最好...层,如何将用户 的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现...
域名解析过程及原理.doc
域名解析过程及原理 域名解析过程及原理域名解析过程: 域名解析过程: 第一步:...同时给 出 dns.linejet.com 的地址,并将结果返回给域名服务器 dns.company....
DNS新告警原理介绍_图文.ppt
DNS新告警原理介绍 - 详细介绍了DNS解析流程,DNS攻击行为以及牙木DNS的安全监控方案及原理
实验五、DNS及HTTP工作原理.doc
工作原理验证: 1)保证所有DNS服务器的高速缓存为空(可以通过重新加载文件来实现...2)观察并记录TCP连接的三个步骤,特别注意其中SYN、ACK、序号及确认序号的变化...
更多相关标签: