册本来源:《Kubernetes收集权势巨子指南:根底、原理与理论》

一边进修一边整理读书条记,并与各人分享,侵权即删,谢谢撑持!

附上汇总贴:《Kubernetes收集权势巨子指南》读书条记 | 汇总_COCOgsta的博客-CSDN博客

在一个Kubernetes集群中,DNS办事长短必须的,因而无论是Kube-dns仍是CoreDNS,凡是以插件(add-on)的体例安拆,做为运行在集群上的应用。

3.7.1DNS办事根本框架

Kubernetes DNS是用来解析Kubernetes集群内的Pod和Service域名的,并且一般情况下只供集群内的容器利用,不给外人利用。

Kubernetes的DNS应用摆设好后,会对外表露一个办事,集群内的容器通过拜候该办事的Cluster IP+53端口获得域名解析办事,而那个Service的ClusterIP一般情况下都是固定的。

当Kubernetes的DNS办事Cluster IP分配后,系统(一般是指安拆法式)会给Kubelet设置装备摆设--cluster-dns=启动参数,DNS办事的IP地址将在用户容器启动时传递,并写入每个容器的/etc/resolv.conf文件。DNS办事IP即上文提到的DNS Service的Cluster IP。

Kubelet的--cluster_domain=参数撑持设置装备摆设集群域名后缀,默认是cluster.local。

翻开Kubelet设置装备摆设:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第1张

3.7.2 域名解析根本原理

关于Service,Kubernetes DNS办事器会生成三类DNS记录,别离是A记录、SRV记录和CNAME记录。

A记录

A记录(A Record)是用于将域或子域指向某个IP地址的DNS记录的最根本类型。记录包罗域名、解析它的IP地址和以秒为单元的TTL。

Kubernetes为“normal”和“headless”办事分配差别的A Record name。“headless”办事与“normal”办事的差别之处在于它们未分配Cluster IP且不施行负载平衡。

A记录与通俗Service和headless Service有区别。通俗Service的A记录的映射关系是:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第2张

headless Service的A记录的映射关系是:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第3张

SRV记录

SRV记录是通过描述某些办事协议和地址促进办事发现的。SRV记录凡是定义一个符号名称和做为域名一部门的传输协议(如TCP),并定义给定办事的优先级、权重、端口和目的:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第4张

优先级和权重凡是用于建议指定利用某些办事器。记录中的最初两个值定义了要毗连的端口和主机名,以便与办事通信。

Kubernetes DNS的SRV记录是根据一个约定俗成的规定实现了对办事端口的查询:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第5张

CNAME记录

CNAME记录用于将域或子域指向另一个主机名。为此,CNAME利用现有的A记录做为其值。相反,A记录会解析为指定的IP地址。那是一种跨集群办事发现办法。

3.7.3DNS利用

下面运行一个带nslookup号令的busybox容器,申明Kubernetes域名解析的利用。

给出带nslookup号令的busybox Pod示例yaml文件:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第6张

先来查询Kubernetes默认的API Server办事Kubernetes的IP地址:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第7张

如上所示,Kube-dns的IP地址是10.0.0.1,而API Server的Cluster IP地址是10.0.0.10。

在default namespace下又创建了一个名为whoami的办事,并做以下域名解析动做:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第8张

如上所示,倡议域名解析恳求的busybox Pod和whoami办事均在default namespace下,因而以下所有域名都能被准确解析而且返回不异的成果。

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第9张

查看busybox Pod的DNS设置装备摆设文件,能够看到如下DNS Server的地址及搜刮的domain列表:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第10张

此中,DNS Server的IP地址是10.0.0.1。options ndots:5的含义是当查询的域名字符串内的点字符数量超越ndots(5)值时,则认为是完好域名,间接解析,不然Linux系统会主动测验考试用default.pod.cluster.local、default.svc.cluster.local或svc.cluster.local补齐域名后缀。

最初,运行DNS Pod可能需要特权,即设置装备摆设Kubelet的参数:--allow-PRivileged=true。

Kubernetes域名解析战略

Kubernetes域名解析战略对应到Pod设置装备摆设中的dnsPolicy,有4种可选战略,别离是None、ClusterFirstWithHostNet、ClusterFirst和Default,此中:

None:从Kubernetes 1.9版本起引入的一个新选项值。它允许Pod忽略Kubernetes情况中的DNS设置。应利用dnsConfigPod标准中的字段供给所有DNS设置;ClusterFirstWithHostNet:关于利用hostNetwork运行的Pod,用户应该明白设置其DNS战略为ClusterFirstWithHostNet;ClusterFirst:任何与设置装备摆设的群集域后缀(例如cluster.local)不婚配的DNS查询(例如“www.kubernetes.io” )将转发到从宿主机上继承的上游域名办事器。集群办理员能够按照需要设置装备摆设上游DNS办事器;Default:Pod从宿主机上继承名称解析设置装备摆设。3.7.4 调试DNS

若是nslookup号令因为某种原因失败,则有几种调试和排除毛病的计划。若DNS失败,凡是会得到如下响应:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第11张

若是呈现此错误,则需要做的第一件事是查抄DNS设置装备摆设能否准确。

查看容器中的resolv.conf文件:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第12张

验证能否准确设置了搜刮途径和名称办事器:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第13张

若是/etc/resolve.conf的所有条目都是准确的,则需要查抄kube-dns/coredns插件能否已启用,或者查抄kubedns/coredns Pod能否正在运行。

若是Pod正在运行,则全局DNS办事可能存在问题。

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第14张

可能还需要查抄后端DNS Endpoint能否筹办好:

《Kubernetes网络权威指南》读书笔记 | 通过域名访问服务  第15张