前言
上一篇《叶工好容2-云原生网络》介绍了容器中的虚拟化网络,从底层讲解了容器中的网络是如何实现的。但虚拟化只解决了网络上寻址的问题,只能定位到IP,但成千上万个动态的IP对于我们直接使用是没有任何意义的,我们必须借助有意义的“标识”信息做一次到IP的映射才可以,而常用的“标识”就是域名。
DNS in linux
linux中影响域名转发的常用配置文件有3个,我们把它们称作etc三兄弟,首先得搞懂它们三兄弟的关系:
/etc/hosts,本地域名解析配置,域名与目的IP都维护在文件中。
/etc/resolv.conf,DNS服务器配置,定义DNS服务器的IP地址、本地域名、定义域名的搜索列表、对返回的域名进行排序
/etc/host.conf 指定主机名查询方式,也就是上面哥俩的管理员,出于性能考虑,一般是先走本地再走DNS。
所以/etc/host.conf是老大,他制定游戏规则; /etc/hosts是二哥,默认他说了算;/etc/resolv.conf是老三,话语权最小,但一般场景下干活最多的就是老三。
/etc/resolv.conf中会出现nameserver 127.0.0.1,那是因为在机器上有运行dnsmasq。
dnsmasq可以作为DNS转发器,dnsmasq接收Client的DNS查询请求,并回复DNS查询结果。查询的结果可以来自本地缓存和公共DNS服务器,如果本地缓存没有记录,dnsmasq会将请求转发到公共的DNS服务器,并将公共的DNS解析的结果回复到请求的设备。
所以在机器上引入dnsmasq,是为了提高DNS服务的稳定性,一旦网络有问题可以通过本地缓存,代价就是主机上多安装一个东西。
DNS in k8s
k8s里跑业务的容器本质还是运行在linux中的,所以k8s中的dns和linux中的dns本质上是一样的,它们只有2个区别
区别1:k8s中pod和其所在的node都有dns映射,类似个套娃;非k8s的linux只需要考虑自己的dns。
区别2:非k8s之间只需要单纯的域名调用,而k8s中还需要考虑集群内通过k8s标识的服务互通问题。
k8s的DNS策略:
1、ClusterFirst:优先使用集群内的dns服务(kubeDNS、coreDNS),找不到的话再使用宿主机的dns服务。
2、ClusterFirstWithHostNet:宿主机与集群DNS服务共存模式,两者都能用,但需要将hostNetwork打开
3、Default:让kubelet决定pod使用哪种DNS服务,默认使用宿主机的 /etc/resolv.conf 来进行解析。
4、None:不使用集群的DNS,pod只听dnsConfig文件的描述,该内容在创建pod时手动设置
在k8s中,一个Pod如果要访问相同同 Namespace 下的 Service(比如 book-service),那么只需要 curl book-service。如果 Pod 和 Service 不在同一域名下,那么就需要在 Service Name 之后添加上 Service 所在的 Namespace(比如 beijing1),curl book-service.beijing1。是因为在ClusterFirst策略下,pod的/etc/resolv.conf中配置了集群DNS service的地址。所以,在该 Pod 内请求的所有的域名解析都需要经过 DNS Service 进行解析,不管是集群内部域名还是外部域名。
k8s中/etc/resolv.conf,这里注意ndots的配置,地址中点号小于该配置被认为是相对域名,按search顺序查找,反之被认为是绝对域名。ndots的大小是性能与便捷的平衡。
我们曾经有个案例,为了加速pod向集群外部域名访问,将ndots默认值5显性的改成了2
dnsConfig:
options:
- name: ndots
value: "2"
DNS框架选择
kubeDNS和coreDNS都是k8s中DNS服务器的可选方案,coreDNS除开集群内域名解析速率稍慢与kubeDNS,其它方面都更优秀,也是k8s 1.9 版本后的默认的 dns 解析文章来源:https://www.toymoban.com/news/detail-522594.html
通常用CoreDNS,运行在master上,本质是每个service都对应一个clusterIP,pod通过service访问时会自动拼接域名${service}.svc.<cluster_domain>,master中有这个域名到clusterIP的映射。文章来源地址https://www.toymoban.com/news/detail-522594.html
到了这里,关于叶工好容3-云原生DNS解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!