[Solved]  Kubernetes DNS Error: curl: (6) Could not resolve host

[Solved] Kubernetes DNS Error: curl: (6) Could not resolve host
[Solved] Kubernetes DNS Error: curl: (6) Could not resolve host

Recently, I encountered a particularly pesky issue that had me scratching my head. But don’t worry, fellow K8s enthusiasts! Today, I’m going to walk you through the troubleshooting process I used to solve this problem and share some valuable insights along the way.

Problem

It started with a simple yet ominous error message: “curl: (6) Could not resolve host”. Sounds familiar, right? This usually means our trusty DNS resolver is having a bad day. But why?

Investigation

Let’s Break It Down

  1. First Things First: Check That Config File

I always start by peeking at the /etc/resolv.conf file. It’s like checking the oil in your car – you gotta make sure the basics are right. Here’s what I did:

kubectl exec -ti dnsutils -- cat /etc/resolv.conf

What am I looking for? Well, I want to see something like this:

search default.svc.cluster.local svc.cluster.local cluster.local google.internal c.gce_project_id.internal
nameserver 10.0.0.10
options ndots:5

Anything off here, and we know we’ve got a problem brewing.

  1. Time to Get Chatty with Our DNS Server

Next, I tried to strike up a conversation with our DNS server. I fired up nslookup:

kubectl exec -i -t dnsutils -- nslookup kubernetes.default

If I see something like this, I know we’re in trouble:

Server:    10.0.0.10
Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.local

nslookup: can't resolve 'kubernetes.default'
  1. Let’s Check Our CoreDNS Pods

CoreDNS is the heart of Kubernetes DNS. If it’s not beating properly, nothing else will work. Here’s what I did:

kubectl get pods -n kube-system -l k8s-app=kube-dns

If those pods aren’t running, it’s time to restart them:

kubectl -n kube-system rollout restart deployment coredns

And then I checked the logs for any signs of distress:

kubectl logs -n kube-system -l k8s-app=kube-dns
  1. Is Our Network Playing Nice?

Sometimes, it’s not DNS itself but network issues causing problems. I verified that security groups weren’t blocking communication:

kubectl get service kube-dns -n kube-system
kubectl -n kube-system get endpoints kube-dns
  1. Time for Some Advanced Sleuthing

If everything above looks good, it’s time to dig deeper. I started tailing the CoreDNS logs:

kubectl logs --follow -n kube-system --selector 'k8s-app=kube-dns'

Solution

After all this detective work, I finally found the culprit. It turned out that our CoreDNS configuration had been accidentally modified during a recent update. The fix was simple but not immediately obvious:

We needed to update the CoreDNS ConfigMap to ensure it was correctly configured for our cluster environment.

Key Takeaways

  1. Always start with the basics. That /etc/resolv.conf file is crucial.
  2. Don’t assume CoreDNS is working just because it’s deployed. Verify those pods!
  3. Network issues can masquerade as DNS problems. Always check your security groups.
  4. Sometimes, the solution lies in the details of your CoreDNS configuration.

Conclusion

Troubleshooting DNS in Kubernetes can be a wild ride, but with the right tools and mindset, you’ll be resolving those hosts in no time. Remember, every issue is an opportunity to deepen your understanding of how Kubernetes works under the hood. Happy troubleshooting, and may your clusters always resolve smoothly!

Author

  • Mohamed BEN HASSINE

    Mohamed BEN HASSINE is a Hands-On Cloud Solution Architect based out of France. he has been working on Java, Web , API and Cloud technologies for over 12 years and still going strong for learning new things. Actually , he plays the role of Cloud / Application Architect in Paris ,while he is designing cloud native solutions and APIs ( REST , gRPC). using cutting edge technologies ( GCP / Kubernetes / APIGEE / Java / Python )

    View all posts
0 Shares:
Leave a Reply
You May Also Like
What is Cilium CNI
Read More

What is Cilium CNI

Table of Contents Hide What is Cilium Cilium Installation PrerequisitesCreating a Kubernetes ClusterInstallationCilium CLIHubble – observability according to…