====== 檢測 K8s 內的 DNS ====== K8s 內有自己的網路, 相同 name space 內的服務都可以透過內部網路直接溝通, 也有自己的 DNS 可以將我們建立的 service name 轉成內部的 IP, 因此內部 DNS 如果無法正常運作, 就會造成內部使用 service name 進行溝通的服務出現問題 ===== 檢查是否正常運作 ===== * DNS Pod 是否存在 kubectl -n kube-system get pods -l k8s-app=kube-dns 結果類似以下 localadmin@devops1:~$ kubectl -n kube-system get pods -l k8s-app=kube-dns NAME READY STATUS RESTARTS AGE coredns-849545576b-8l4tx 1/1 Running 0 17h * 是否 DNS 使用正確的 cluster-ip kubectl -n kube-system get svc -l k8s-app=kube-dns 結果類似以下 localadmin@devops1:~$ kubectl -n kube-system get svc -l k8s-app=kube-dns NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.43.0.10 53/UDP,53/TCP,9153/TCP 17h * 驗證 DNS 是否可以解析內部名稱 kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup kubernetes.default 結果類似以下 localadmin@devops1:~$ kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup kubernetes.default Server: 10.43.0.10 Address 1: 10.43.0.10 kube-dns.kube-system.svc.cluster.local Name: kubernetes.default Address 1: 10.43.0.1 kubernetes.default.svc.cluster.local pod "busybox" deleted * 驗證 DNS 是否可以解析外部名稱 kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup www.google.com 結果類似以下 localadmin@devops1:~$ kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup www.google.com Server: 10.43.0.10 Address 1: 10.43.0.10 kube-dns.kube-system.svc.cluster.local Name: www.google.com Address 1: 2404:6800:4008:800::2004 tsa01s07-in-x04.1e100.net Address 2: 172.217.160.100 tsa03s06-in-f4.1e100.net pod "busybox" deleted ===== 參考網址 ===== * https://rancher.com/docs/rancher/v2.x/en/troubleshooting/dns/ * https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/ {{tag>K8s kubectl}}