kube-dns ist der ursprüngliche DNS-Dienst von Kubernetes. Er löst seit den frühen Cluster-Versionen die Dienstnamen innerhalb des Clusters auf – bis ihn 2018 CoreDNS als Standard ablöste. Heute ist kube-dns ein Altbestand, der aus Kubernetes entfernt wird.

Aufbau von kube-dns

kube-dns bestand aus drei eng verzahnten Komponenten:

  • kubedns: beobachtet über die Kubernetes-API die Services und Endpoints und pflegt daraus die DNS-Einträge.
  • SkyDNS: übernahm die eigentliche DNS-Auflösung auf den internen Ports 10053 (TCP/UDP); SkyDNS stammt aus dem CoreOS-Umfeld.
  • dnsmasq: diente als lokaler Cache und Forwarder (dnsmasq-nanny), ergänzt um einen Sidecar-Container für Metriken und Health-Checks.

Der Dienst war über eine feste Cluster-IP (üblicherweise 10.96.0.10) erreichbar und wurde den Pods über die nameserver-Zeile ihrer /etc/resolv.conf bekannt gemacht. Aufgelöst wurden Namen wie <dienst>.<namespace>.svc.cluster.local.

Ablösung und Ausblick

Seit Kubernetes 1.13 läuft als Cluster-DNS standardmäßig CoreDNS, das mit seinem kubernetes-Plugin dieselbe Service-Discovery-Spezifikation implementiert, aber schlanker, wartbarer und erweiterbar ist. Das Kubernetes-Projekt entfernt kube-dns nun vollständig: Wer den klassischen DNS-Dienst noch betreibt, muss seine Cluster vor Kubernetes 1.40 umstellen. Auch andere klassische Netzwerk-Bausteine werden dabei abgelöst – moderne Cluster ersetzen Komponenten wie iptables-basiertes kube-proxy zunehmend durch eBPF-basierte Lösungen, etwa Cilium.

Verwandte Grundlagen: Kubernetes, DNS, kube-proxy, kubelet.