Christopher Anabo
Christopher Anabo
Senior Tech Lead
Christopher Anabo

Notes

Kubernetes CoreDNS

Kubernetes CoreDNS

In Kubernetes, internal DNS is a core component that simplifies communication within the cluster by providing automatic service discovery and reliable internal addressing for services and pods. Here’s why internal DNS is so important in Kubernetes:

1. Automatic Service Discovery

  • Kubernetes automatically creates DNS records for each service in the cluster, enabling services to be easily found by other services or pods without needing to know specific IP addresses.
  • For example, if you have a service called auth-service in the default namespace, it will automatically have a DNS name like auth-service.default.svc.cluster.local. Other services or pods can use this DNS name to communicate with auth-service.

2. Stable, Predictable Names for Services

  • Service IPs in Kubernetes are virtual and can change, especially if a service is deleted and recreated. Using DNS names allows services to reference each other reliably, regardless of the underlying IPs.
  • This helps maintain connectivity without needing to hardcode IP addresses, making the system more robust and easier to manage.

3. Namespace Isolation

  • Kubernetes DNS also supports namespaces, so you can have services with the same name in different namespaces without conflicts.
  • For example, two services named auth-service in the dev and prod namespaces would have different DNS names: auth-service.dev.svc.cluster.local and auth-service.prod.svc.cluster.local.

4. Service Discovery for Scaling and Load Balancing

  • When a service scales up or down (e.g., if it’s managed by a Horizontal Pod Autoscaler), DNS automatically adjusts to route traffic to the correct set of pod IPs. This ensures load balancing and fault tolerance.
  • Kubernetes DNS uses the ClusterIP of services, which is load-balanced across the available pods, making it efficient and scalable without needing additional manual setup.

5. Enhanced Security and Internal-only Communication

  • Using internal DNS names, services within a Kubernetes cluster can communicate privately without exposing services to the outside network, adding a layer of security.
  • Only services and pods within the cluster can resolve these DNS names, which means communication happens exclusively within the internal Kubernetes network.

6. Simplifies Application Configuration

  • By using DNS names, application configuration can remain consistent across different environments (dev, staging, production), as only the DNS names change by namespace, not by IP.
  • This reduces errors and makes it easier to deploy applications without modifying networking configurations for different stages.

Conclusion

Internal DNS in Kubernetes simplifies service-to-service communication, making applications more resilient, scalable, and secure. It provides an abstraction over the underlying IPs, allowing Kubernetes to dynamically manage network routing while keeping configuration and code consistent.

Installation

  • Check DNS Is Enabled in Your Cluster 
    kubectl get pods -n kube-system
    
            
  • You should see a pod named coredns or kube-dns in the kube-system namespace.

    If you’re missing DNS services, you can install CoreDNS (the default DNS provider in Kubernetes):

    kubectl apply -f https://storage.googleapis.com/kubernetes-the-hard-way/coredns.yaml