searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

kubernetes中Pod的DNS解析过程

2023-08-25 06:48:24
15
0

前言

在K8s当中,我们通常通过Service(svc)访问pod的服务,而svc的的ClusterIP是由K8s随机分配,虽然我们可手动配置,不过一般考虑到通用性和减少冲突甚少指定固定IP,所以我们需要通过K8s集群提供的域名来解析ClusterIP。

如在命名空间default中创建一个名为foo的svc,它对应DNS是address:foo.default.svc.cluster.local

K8s会为每个Pod中配置好如下的DNS配置(/etc/resolv.conf):

search kube-test.svc.cluster.local svc.cluster.local cluster.local example.c0nn
nameserver 这里是一个IP (your cluseter DNS svc IP)
options ndots:5

# 注意 example.c0nn 继承自宿主机search,如果没有则为空

 

上述配置具体有什么用,是否有什么使用技巧,本文会逐一分析说明。

K8s Pod DNS解析过程

nameserver是DNS解析的address,而search和options控制了Linux libc库的解析过程

Search

DNS配置中的 "search" 指令用于定义一组域名,DNS解析器在查询未完全限定的主机名时会自动将这些域名后缀添加到查询的主机名之后。这可以通过使用较短的域名来方便用户进行查询。

options ndots:5,DNS解析器将会将大于或等于五个点的主机名视为完全限定域名,而任何包含五个或更少点的主机名都被视为部分限定域名

注:dig等工具或特殊的包,会自行实现DNS解析过程,不一定遵循此规则

talk is cheap,我们通过实际的抓包结果进行展示:

  • 在kube-test命名空间下pod的DNS配置如下
# /etc/resolv.conf 
search kube-test.svc.cluster.local svc.cluster.local cluster.local
nameserver 169.254.20.10
options ndots:5
  • ping -c 1 请自行脑补度娘
# 通过search去组合依次查询
09:50:23.817857 IP 172.28.140.101.53371 > 169.254.20.10.53: 50666+ A? 请自行脑补度娘.kube-test.svc.cluster.local. (59)
09:50:23.818686 IP 169.254.20.10.53 > 172.28.140.101.53371: 50666 NXDomain*- 0/1/0 (152)

09:50:23.818796 IP 172.28.140.101.35471 > 169.254.20.10.53: 15706+ A?请自行脑补度娘.svc.cluster.local. (49)
09:50:23.819179 IP 169.254.20.10.53 > 172.28.140.101.35471: 15706 NXDomain*- 0/1/0 (142)

09:50:23.819236 IP 172.28.140.101.43266 > 169.254.20.10.53: 56162+ A? 请自行脑补度娘.cluster.local. (45)
09:50:23.819557 IP 169.254.20.10.53 > 172.28.140.101.43266: 56162 NXDomain*- 0/1/0 (138)

# 上述都查不到情况下,最后使用aaa.bbb.ccc. (后面有一个点—,补全根节点)
09:50:23.819607 IP 172.28.140.101.60959 > 169.254.20.10.53: 25063+ A? 请自行脑补度娘. (31)
09:50:23.866505 IP 169.254.20.10.53 > 172.28.140.101.60959: 25063 3/0/0 CNAME cname.请自行脑补度娘., A 220.181.38.149, A 220.181.38.150 (138)
09:50:23.879706 IP 172.28.140.101.50841 > 169.254.20.10.53: 21774+ PTR? 149.38.181.220.in-addr.arpa. (45)
09:50:23.973060 IP 169.254.20.10.53 > 172.28.140.101.50841: 21774 NXDomain 0/1/0 (143)

 

0条评论
作者已关闭评论
Mr. 油
89文章数
0粉丝数
Mr. 油
89 文章 | 0 粉丝
原创

kubernetes中Pod的DNS解析过程

2023-08-25 06:48:24
15
0

前言

在K8s当中,我们通常通过Service(svc)访问pod的服务,而svc的的ClusterIP是由K8s随机分配,虽然我们可手动配置,不过一般考虑到通用性和减少冲突甚少指定固定IP,所以我们需要通过K8s集群提供的域名来解析ClusterIP。

如在命名空间default中创建一个名为foo的svc,它对应DNS是address:foo.default.svc.cluster.local

K8s会为每个Pod中配置好如下的DNS配置(/etc/resolv.conf):

search kube-test.svc.cluster.local svc.cluster.local cluster.local example.c0nn
nameserver 这里是一个IP (your cluseter DNS svc IP)
options ndots:5

# 注意 example.c0nn 继承自宿主机search,如果没有则为空

 

上述配置具体有什么用,是否有什么使用技巧,本文会逐一分析说明。

K8s Pod DNS解析过程

nameserver是DNS解析的address,而search和options控制了Linux libc库的解析过程

Search

DNS配置中的 "search" 指令用于定义一组域名,DNS解析器在查询未完全限定的主机名时会自动将这些域名后缀添加到查询的主机名之后。这可以通过使用较短的域名来方便用户进行查询。

options ndots:5,DNS解析器将会将大于或等于五个点的主机名视为完全限定域名,而任何包含五个或更少点的主机名都被视为部分限定域名

注:dig等工具或特殊的包,会自行实现DNS解析过程,不一定遵循此规则

talk is cheap,我们通过实际的抓包结果进行展示:

  • 在kube-test命名空间下pod的DNS配置如下
# /etc/resolv.conf 
search kube-test.svc.cluster.local svc.cluster.local cluster.local
nameserver 169.254.20.10
options ndots:5
  • ping -c 1 请自行脑补度娘
# 通过search去组合依次查询
09:50:23.817857 IP 172.28.140.101.53371 > 169.254.20.10.53: 50666+ A? 请自行脑补度娘.kube-test.svc.cluster.local. (59)
09:50:23.818686 IP 169.254.20.10.53 > 172.28.140.101.53371: 50666 NXDomain*- 0/1/0 (152)

09:50:23.818796 IP 172.28.140.101.35471 > 169.254.20.10.53: 15706+ A?请自行脑补度娘.svc.cluster.local. (49)
09:50:23.819179 IP 169.254.20.10.53 > 172.28.140.101.35471: 15706 NXDomain*- 0/1/0 (142)

09:50:23.819236 IP 172.28.140.101.43266 > 169.254.20.10.53: 56162+ A? 请自行脑补度娘.cluster.local. (45)
09:50:23.819557 IP 169.254.20.10.53 > 172.28.140.101.43266: 56162 NXDomain*- 0/1/0 (138)

# 上述都查不到情况下,最后使用aaa.bbb.ccc. (后面有一个点—,补全根节点)
09:50:23.819607 IP 172.28.140.101.60959 > 169.254.20.10.53: 25063+ A? 请自行脑补度娘. (31)
09:50:23.866505 IP 169.254.20.10.53 > 172.28.140.101.60959: 25063 3/0/0 CNAME cname.请自行脑补度娘., A 220.181.38.149, A 220.181.38.150 (138)
09:50:23.879706 IP 172.28.140.101.50841 > 169.254.20.10.53: 21774+ PTR? 149.38.181.220.in-addr.arpa. (45)
09:50:23.973060 IP 169.254.20.10.53 > 172.28.140.101.50841: 21774 NXDomain 0/1/0 (143)

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
1
0