1. 同一个Node上的pod网段相同
- kube-node1
- pod1: 172.16.30.8
- pod2: 172.16.30.9
- pod3: 172.16.30.23
- kube-node2
- pod4: 172.18.0.5
- pod5: 172.18.0.6
2. pod中service name dns解析
使用nslookup命令去查询service name
- 第2行 DNS服务器名
- 第3行 DNS服务器地址
- 第5行 目标主机的名称
- 第6行 目标主机的IP地址
bash-5.0# nslookup security
Server: 10.254.10.20
Address: 10.254.10.20#53
Name: security.test.svc.cluster.local
Address: 10.254.63.136
2.1. 问题1:
那么问题来了,为什么我要解析的域名是security, 但是返回的主机名是security.test.svc.cluster.local呢?
bash-5.0# cat /etc/resolv.conf
nameserver 10.254.10.20
search test.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
在/etc/resolve.conf中,search选项后有几个值,它的作用是,如果你搜索的主机名中没有点, 那么你输入的名字就会和search选中的名字组合,也就是说。
你输入的是abc, 那么就会按照如何下的顺序去解析域名
- abc.test.svc.cluster.local
- abc.svc.cluster.local
- cluster.local
所以我们看到的dns解析的名字就是abc.test.svc.cluster.local。
2.2. 问题2:
在resolve.conf中,dns服务器的地址是10.254.10.20,那么这个地址运行的是什么呢?
我们用dns反向解析,将IP解析为域名,可以看到主机的名称为kube-dns.kube-system.svc.cluster.local.
bash-5.0# nslookup 10.254.10.20
20.10.254.10.in-addr.arpa name = kube-dns.kube-system.svc.cluster.local.
而实际上,这个IP地址就是kube-dns的地址。
[root@kube-m ~]# kubectl get service -n kube-system -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kube-dns ClusterIP 10.254.10.20 <none> 53/UDP,53/TCP 15d k8s-app=kube-dns
而k8s-app=kube-dns这个label可以选中coredns
[root@kube-m ~]# kubectl get pod -l k8s-app=kube-dns -nkube-system
NAME READY STATUS RESTARTS AGE
coredns-79f9c855c5-nrk88 1/1 Running 0 15d
coredns-79f9c855c5-x75rq 1/1 Running 0 5h45m