前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊 resolv.conf 中 search 和 ndots 配置

聊聊 resolv.conf 中 search 和 ndots 配置

作者头像
YP小站
发布2020-07-28 15:42:27
7.9K0
发布2020-07-28 15:42:27
举报
文章被收录于专栏:YP小站

背景

Kubernetes 集群中,域名解析离不开 DNS 服务,在 Kubernetes v1.10 以前集群使用 kube-dns dns服务,后来在 Kubernetes v1.10+ 使用 Coredns 做为集群dns服务。

使用 Kubernetes 集群时,会发现 Pod /etc/resolv.conf 配置。具体如下:

代码语言:javascript
复制
nameserver 10.10.0.2
search production.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

小伙伴们会好奇,search 或者 ndots 这是干嘛呀!想知道是干嘛的,接着看下文。

名词解释

  • search:搜索主机名查找列表。搜索列表目前仅限于6个域名,共计256个字符。
  • ndots:通俗一点说,如果你的域名请求参数中,点的个数比配置的ndots小,则会按照配置的search内容,依次添加相应的后缀直到获取到域名解析后的地址。如果通过添加了search之后还是找不到域名,则会按照一开始请求的域名进行解析。

抓包分析DNS请求

Kubernetes Pod 内抓包,请参考 K8S Pod 内抓包快速定位网络问题

解析集群内部域名

下面例子解析同一个 namespace 中 service 名称为 blog 域名。

代码语言:javascript
复制
# 进入 piwik 容器网络
$ e_net piwik-654dc7b97b-g44kn production

 Entering pod netns for production/piwik-654dc7b97b-g44kn

 Execute the command: nsenter -n -t 16519

# 使用 tcpdump 抓 dns 53 端口包
$ tcpdump -nt -i eth0 port 53

# 再打开另一个窗口,进入 piwik 容器
$ kubectl exec -it piwik-654dc7b97b-g44kn -n production  sh

# 解析 blog 域名
$ nslookup blog

Server:  10.10.0.2
Address: 10.10.0.2#53

Name: blog.production.svc.cluster.local
Address: 10.10.72.218

下面是抓 blog 域名 DNS 包结果:

从上面看,解析 blog 域名时,点的个数比配置中 ndots 值小,会按照配置 search 参数填补域名后缀。在第一次填补后缀 production.svc.cluster.local 就解析出 A记录,这时就会终止dns查询返回A记录结果。

解析集群外部域名

下面例子解析集群外部域名 www.jd.com 京东网站。

代码语言:javascript
复制
# 进入 piwik 容器
$ kubectl exec -it piwik-654dc7b97b-g44kn -n production  sh

# dns 解析京东域名
$ nslookup www.jd.com

Server:  10.10.0.2
Address: 10.10.0.2#53

Non-authoritative answer:
www.jd.com canonical name = www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com canonical name = www.jdcdn.com.
www.jdcdn.com canonical name = img2x-v6-sched.jcloudedge.com.
Name: img2x-v6-sched.jcloudedge.com
Address: 222.186.184.3

下面是抓 www.jd.com域名 DNS 包结果:

从上图抓包来看,京东域名点的个数比配置中 ndots 值小,会按照配置 search 参数填补域名后缀。依次填补 production.svc.cluster.local.svc.cluster.local.cluster.local.都没有查询出结果,后面直接解析 www.jd.com 域名,查询出A记录并返回结果。

解析域名点数大于或者等于ndots配置

解析域名点数大于或者等于ndots配置,又会发生什么事情?

下面来看看结果:

代码语言:javascript
复制
# 点数等于 ndots 配置
$ nslookup a.b.c.e.yp14.cn

Server:  10.10.0.2
Address: 10.10.0.2#53

Non-authoritative answer:
Name: a.b.c.e.yp14.cn
Address: 39.106.191.105

点数等于 ndots 配置结果

代码语言:javascript
复制
# 点数大于 ndots 配置
$ nslookup a.b.c.e.f.yp14.cn

Server:  10.10.0.2
Address: 10.10.0.2#53

Non-authoritative answer:
Name: a.b.c.e.f.yp14.cn
Address: 39.106.191.105

点数等于 ndots 大于配置结果

从上面我们可以得出结论,不管是点数大于或者等于 ndots 配置,都不会填补 search 声明的配置。

优化建议

通过上面案例可以发现ndots的值和请求息息相关,在使用中为了避免过多的DNS查询请求,可以适当优化相应的值或者请求域名。

  • 条件允许的情况下,尽量将请求体中的点都带上,并且要大于或者等于配置中的ndots的值。
  • 由于自动填补域名后缀是按照配置中的参数依次添加,所以在同一个namespace下,可以直接解析Service名即可。如 nslookup blog,会自动补全 production.svc.cluster.local 后缀,且是第一个配置的,因此查询也只有一条。提高DNS解析速度。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 YP小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 名词解释
  • 抓包分析DNS请求
    • 解析集群内部域名
      • 解析集群外部域名
        • 解析域名点数大于或者等于ndots配置
        • 优化建议
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档