檢測 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   <none>        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

  • tech/k8s-dns.txt
  • 上一次變更: 2021/05/10 17:33
  • jonathan