World map

 

BM: Baca dalam Bahasa Melayu

World K9: Cluster Admin

Fix CoreDNS and kube-proxy

You will learn: to tell a phone book problem (CoreDNS) from a runner problem (kube-proxy), and fix the first.

Checked with Kubernetes 1.37 on 1 Nov 2026

The problem

From the client tray, calling the shop by its Service IP works. Calling it by the name shop fails. What is broken?

Pick one answer.

Watch

You are here: cluster kind-dev namespace default
nslookup asks the server 10.96.0.10 and gets the shop Service's address. kubectl get svc -n kube-system shows the kube-dns Service at 10.96.0.10. Terminal output: $ kubectl exec client -- nslookup shop Server: 10.96.0.10 Address: 10.96.0.10:53 Name: shop.default.svc.cluster.local Address: 10.96.135.90 $ kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 5m21s

Every tray asks the phone book at 10.96.0.10. That number is the kube-dns Service. Behind it run the CoreDNS: The food court's phone book: it turns names like shop into Service IPs. trays.

Try it

Which part do you suspect? Sort each clue.

Drag a card into a box. Or tap the card, then tap the box.

      Try it

      Someone scaled CoreDNS to 0 “to save money”. Bring the phone book back: 2 ready trays. Note: this practice cluster still answers names meanwhile. A real one would not.

      You are here: cluster kind-dev namespace default
      Stalls: 3. Trays: 4 (4 ready). Waiting for a stall: 0.
      • shop3/3 ready
      dev-control-planeOpenManager

      No trays here.

      dev-workerOpen
      • shop·5pldw
      • shop·r9q8j
      dev-worker2Open
      • client
      • shop·j89pb
      Time: +0s (sped up)

      Watch

      You are here: cluster kind-dev namespace default
      Three kube-proxy pods, one on each node: dev-control-plane, dev-worker and dev-worker2. Terminal output: $ kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-proxy-5wnvx 1/1 Running 0 5m20s 172.18.0.2 dev-control-plane <none> <none> kube-proxy-xwjpx 1/1 Running 0 5m20s 172.18.0.3 dev-worker <none> <none> kube-proxy-z25tj 1/1 Running 0 5m20s 172.18.0.4 dev-worker2 <none> <none>

      kube-proxy: Runs on every stall and sends order-number (Service) traffic to the right trays. is the runner on every stall. It turns a Service IP into a real tray’s address. A DaemonSet keeps one per stall.

      Predict

      You delete the kube-proxy tray on dev-worker2. What happens next?

      Pick one answer.

      Check

      Names fail. Put the DNS ladder in order, like the official guide.

      First rung at the top. Put these in order. Use the arrows, or drag.

      • kubectl logs -n kube-system -l k8s-app=kube-dns
      • kubectl exec client -- cat /etc/resolv.conf
      • kubectl get endpointslice -l kubernetes.io/service-name=kube-dns -n kube-system
      • kubectl get pods -n kube-system -l k8s-app=kube-dns
      • kubectl exec client -- nslookup shop

      You did it!

      You can now tell a CoreDNS problem from a kube-proxy one.

      Go deeper (optional)

      CoreDNS reads its rules (the Corefile) from the ConfigMap coredns. Where the story breaks: a real food court is one building. Cluster stalls can sit in different rooms, or clouds. And this practice cluster answers names even with CoreDNS down.

      Real mission

      1. kubectl -n kube-system scale deployment coredns --replicas=0
      2. kubectl run dnstest --image=busybox:1.37 --rm -it --restart=Never -- nslookup kubernetes.default
      3. kubectl -n kube-system scale deployment coredns --replicas=2

      0 of 3 steps done · Your ticks are saved.