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

王柳  金牌会员 | 2024-7-29 18:36:31 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 669|帖子 669|积分 2007

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中的配置是:
  1. nameserver 10.1.0.10
  2. search default.svc.cluster.local svc.cluster.local cluster.local
  3. options ndots:5
复制代码
其中,nameserver配置的是kube-dns服务的IP地址,search配置的是集群的域名后缀,ndots设置为5,那么,这些配置从那里来的呢?
kubelet的启动的配置文件--config=/var/lib/kubelet/config.yaml中有两个参数,分别用于指定域名服务的IP和集群域名:
  1. clusterDNS:
  2. - 10.1.0.10
  3. 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中配置的域名后缀拼接后查询。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表