在安装完Kubernetes cluster环境后,如何验证coreDNS是否在正常工作?这是一项很重要的工作,将会影响将来在容器中部署的服务能否被正常调用。
我们可以通过创建一个busybox 的pod,再在busybox里去解析服务名的方式来验证coreDNS是否正常工作。
具体可参考kubernetes官方文档《Debugging DNS Resolution》
busybox的yaml 文件
svw@master:~$ cat busybox.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
创建Busybox pod
svw@master:~$ kubectl create -f busybox.yaml
pod/busybox created
svw@master:~$ kubectl get pods busybox
NAME READY STATUS RESTARTS AGE
busybox 0/1 ContainerCreating 0 12s
svw@master:~$ kubectl get pods busybox
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 31s
busybox的resolv.conf内容
svw@master:~$ kubectl exec busybox cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local csvw.com
options ndots:5
svw@master:~$ kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
coredns-576cbf47c7-6b6dj 1/1 Running 143 16d
coredns-576cbf47c7-vgr5g 1/1 Running 144 16d
etcd-master 1/1 Running 10 16d
kube-apiserver-master 1/1 Running 11 16d
kube-controller-manager-master 1/1 Running 12 16d
kube-flannel-ds-amd64-24tsk 1/1 Running 12 16d
kube-flannel-ds-amd64-lxsr7 1/1 Running 8 14d
kube-proxy-ck8x6 1/1 Running 10 16d
kube-proxy-slp66 1/1 Running 5 14d
kube-scheduler-master 1/1 Running 10 16d
在busybox 的pod里解析kubernetes.default 的IP地址
svw@master:~$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
在busybox 的pod里解析外部IP地址 ,按照前文coreDNS的配置,是通过pod所在node上的/etc/resolv.conf 来代理解析的
参见我的博客《用kubeadm安装Kubernetes 1.12.3 cluster 详解》 3(6)
svw@master:~$ kubectl exec -ti busybox -- nslookup www.sina.com.cn
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: www.sina.com.cn
Address 1: 202.102.94.124
在busybox 的pod里解析php guestbook application 中创建的服务
svw@master:~$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16d
redis-master ClusterIP 10.100.206.174 <none> 6379/TCP 17h
redis-slave ClusterIP 10.98.90.234 <none> 6379/TCP 17h
svw@master:~$ kubectl exec -ti busybox -- nslookup redis-master
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: redis-master
Address 1: 10.100.206.174 redis-master.default.svc.cluster.local
svw@master:~$ kubectl exec -ti busybox -- nslookup redis-slave
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: redis-slave
Address 1: 10.98.90.234 redis-slave.default.svc.cluster.local
通过以上例子可见,coredns工作正常。在我们创建的Kubernetes 1.12.3 cluster中,coredns既可以管理新生成的service的域名,又可以解析出外部域名。