如何验证coreDNS是否正常工作?

在安装完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                443/TCP    16d
redis-master   ClusterIP   10.100.206.174           6379/TCP   17h
redis-slave    ClusterIP   10.98.90.234             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的域名,又可以解析出外部域名。

你可能感兴趣的:(IT技术)