0


【Linux】Linux中DNS配置文件/etc/resolv.conf详解

文章目录

1 DNS相关配置文件

在不安装额外组件的情况下,与域名解析相关的配置文件主要有三个:

  • /etc/hosts:本地的域名和IP的映射关系,通常用作本地测试或者临时修改域名对应的IP
  • /etc/nsswitch.conf:定义系统如何查找各种数据的方法,以及在查找时应该首先使用哪些数据库
  • /etc/resolv.conf:域名解析服务器的地址以及参数配置

2 /etc/resolv.conf配置文件中的字段解析

/etc/resolv.conf配置文件保存的是解析域名的配置,通常包含以下配置项:

  • nameserver:指定域名服务器的IP地址
  • search:进行域名查询时会和域名后缀拼接成全域名去查询
  • options:控制域名查询的选项

nameserver用于配置域名服务器的IP地址,例如,

nameserver 192.168.70.2

指定域名服务器的IP地址为192.168.70.2,并且可以指定多条nameserver配置,系统会按照顺序尝试去查询域名,常用的公共的域名服务器地址:

  • 114.114.114.114:国内三网通
  • 8.8.8.8:Google DNS

其他的可以参看非常好用的DNS服务器。

search用于指定域名后缀,可以只用提供域名前缀就可以查询域名,例如,当search配置为

search baidu.com

,可以直接使用www作为域名,在进行域名查询时,会去查询

wwww.baidu.com

,而且,search后面通常也会接多个域名,那么,是不是只要查询域名就会进行拼接操作呢?这里的策略是:

  • 如果提供的域名以点号结尾,则会认为是全域名,会直接查询该域名,且不会与search配置的域名后缀拼接
  • 如果提供的域名中的点号的数量大于或者等于options中的ndots配置,则先直接查询该域名,如果失败,再与search配置的域名后缀拼接进行查询
  • 如果提供的域名中的点号的数量小于options中的ndots配置,则直接与search配置的域名后缀拼接进行查询

例如,如果查询域名

abc.

host -a abc.

,会直接报错查询不到;如果查询域名

abc

host -a abc

,由于域名中的点号的数量等于0,小于options中的ndots配置(ndots默认值为1),会查询

abc.baidu.com

(假设search配置为

search baidu.com

);如果查询域名

abc.svc

,由于域名中的点号的数量为0,等于options中的ndots配置,则先查询

abc.svc

,如果失败,再查询

abc.svc.baidu.com

这里提到一个重要的配置项:ndots,该配置项会作为是否需要优先与search配置的域名后缀拼接还是直接查询域名的判断依据,也就是说,如果域名中的点号超过ndots,说明域名足够长,大概率是全域名,直接查询该域名,如果域名中的点号小于ndots,说明该域名比较短,大概率需要与域名后缀拼接。

options用于指定域名查询过程中的一些参数,常见的配置项有:

  • timeout:设置DNS查询的超时时间
  • attempts:每个DNS服务器发送查询的最大尝试次数
  • ndots:控制域名查询的优先策略
  • cache:控制是否使用DNS缓存

3 容器中的/etc/resolv.conf配置

主机上的/etc/resolv.conf配置文件用于提供域名查询的配置,在容器中当然也存在该配置,而且它还是实现服务查询的关键。

当创建普通Pod时,容器的/etc/resolv.conf中的配置是:

nameserver 10.1.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

其中,nameserver配置的是kube-dns服务的IP地址,search配置的是集群的域名后缀,ndots设置为5,那么,这些配置从哪里来的呢?

kubelet的启动的配置文件

--config=/var/lib/kubelet/config.yaml

中有两个参数,分别用于指定域名服务的IP和集群域名:

clusterDNS:- 10.1.0.10
clusterDomain: cluster.local

所以,kubelet在创建容器时才可以将这些配置传入进去。

容器中服务的FQDN格式为

$SERVICE.$NAMESPACE.svc.$CLUSTER

,其中,SERVICE、NAMESPACE、CLUSTER分别表示服务名、命名空间、集群域名,而search中域名的顺序也是从小范围到大:先从相同命名空间开始查询,最后再查询整个集群。

最后一个问题:为什么ndots要设置为5呢?

当然也跟服务的FQDN格式有关,可以看到如果用全的FQDN格式,其中就有4个点号,而且,根据服务名的规范,服务名中是不能包含点号的,因此,服务的FQDN中只有4个点号。如果查询的域名超过4个点号,也就是5个或者以上,要么是集群中的服务的FQDN格式加末尾的点号,要么就不是集群中的服务,此时都可以直接向域名服务器查询,且不需要拼接;如果查询的域名不超过4个点号,那么大概率是集群中的服务,就与search中配置的域名后缀拼接后查询。

标签: linux DNS 容器

本文转载自: https://blog.csdn.net/ILOVEYOUXIAOWANGZI/article/details/139985815
版权归原作者 luofengmacheng 所有, 如有侵权,请联系我们删除。

“【Linux】Linux中DNS配置文件/etc/resolv.conf详解”的评论:

还没有评论