Zurück zum Blog

Kubernetes DNS-Dienst: Ein Leitfaden für Anfänger

Kubernetes DNS-Dienst: Ein Leitfaden für Anfänger

Kubernetes, auch bekannt als K8s, ist ein Open-Source-Orchestrierungssystem zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Seine Portabilität, Flexibilität und automatischen Skalierungsfunktionen machen es zu einem weit verbreiteten System. Vor allem die herausragende Funktion, DNS-Einträge für Dienste und Pods zu erstellen, macht es gegenüber anderen Softwaresystemen unschlagbar. Der Kubernetes-DNS-Dienst ermöglicht es Ihnen, Dienste mit konsistenten DNS-Namen anstelle von IP-Adressen zu kontaktieren.

Voraussetzungen

Um das Beste aus diesem Tutorial herauszuholen und den Kubernetes-DNS-Dienst besser zu verstehen, sollten Sie Ihr Wissen über die Grundlagen von Kubernetes auffrischen. Es ist auch hilfreich, die Übersicht über DNS-Terminologien, -Komponenten und -Konzepte zu lesen, um ein besseres Verständnis der DNS-Konzepte zu erlangen. Darüber hinaus bieten eine Übersicht über das Docker-Ökosystem und die Grundlagen der Containerisierungstechnologie einen großen Vorteil.

Was ist ein DNS-System?

Das Domain Name System (DNS) ist ein Mechanismus zur Verknüpfung verschiedener Arten von Informationen mit leicht zu merkenden Namen, wie z. B. IP-Adressen. Die Verwendung eines DNS-Systems zur Übersetzung von Anfragenamen in IP-Adressen macht es für Endbenutzer einfach, ihren Zieldomänennamen mühelos zu erreichen. Die meisten Kubernetes-Cluster enthalten einen standardmäßig konfigurierten internen DNS-Dienst, der einen leichtgewichtigen Ansatz für die Dienstermittlung (Service Discovery) bietet. Selbst wenn Pods und Dienste erstellt, gelöscht oder zwischen Knoten verschoben werden, vereinfacht die integrierte Dienstermittlung es Anwendungen, Kubernetes-Cluster zu identifizieren und mit ihnen zu kommunizieren.

In jüngeren Versionen von Kubernetes, haben sich die technischen Details des Kubernetes-DNS-Dienstes geändert. Dieses Tutorial soll sowohl die kube-dns- als auch die CoreDNS-Implementierung des Kubernetes-DNS-Dienstes vorstellen. Wir werden die Kubernetes-DNS-Einträge im Detail verstehen und demonstrieren, wie Kubernetes-DNS funktioniert.

Was ist im Kubernetes-DNS-Dienst enthalten?

Zuvor basierte der Kubernetes-DNS-Dienst vor dem Release der Version 1.11 auf kube-dns. Sicherheit und Datenschutz waren jedoch weiterhin ein ernstes Problem. Später führte die Kubernetes-Community CoreDNS in der neuen Version 1.11 ein, um die Sicherheits- und Stabilitätsprobleme von kube-dns zu beheben.

Unabhängig davon, welche Softwareversion Sie zur Verwaltung von DNS-Einträgen verwenden, funktionieren kube-dns und CoreDNS auf ähnliche Weise:

  • Ein kube-dns -Dienst und ein oder mehrere Pods werden erstellt.
  • Der kube-dns -Dienst überwacht die Kubernetes-API auf Dienst- und Endpunktereignisse und ändert seine DNS-Einträge entsprechend. Wenn Sie diese Kubernetes-Dienste und die zugehörigen Pods durch Erstellungs-, Bearbeitungs- oder Löschvorgänge ändern, werden diese Ereignisse automatisch ausgelöst.
  • Kubelet weist die Cluster-IP des kube-dns -Dienstes jedem neuen Pod als etc/resolv.conf nameserver -Option zu, zusammen mit geeigneten search -Einstellungen, um kürzere Hostnamen zu ermöglichen:
  • Containerisierte Anwendungen können dann Hostnamen wie example-service.namespace in die entsprechende Cluster-IP-Adresse auflösen.

Eine Übersicht über die Kubernetes-DNS-Einträge

Lassen Sie uns die Kubernetes-DNS-Einträge anhand eines Beispiels besser verstehen. Der vollständige DNS-A-Eintrag für einen Kubernetes-Dienst sieht wie folgt aus:

service.namespace.svc.cluster.local

Ein Pod hätte einen Eintrag in diesem Format, der die tatsächliche IP-Adresse des Pods darstellen würde:

10.32.0.125.namespace.pod.cluster.local

Zudem werden SRV -Einträge für die angegebenen Ports eines Kubernetes-Dienstes erstellt:

Als Ergebnis kann Ihre Anwendung oder Ihr Microservice einen einfachen und konsistenten Hostnamen aufrufen, um andere Dienste oder Pods im Cluster zu erreichen, dank des integrierten DNS-basierten Dienstermittlungsmechanismus.

Auflösen kürzerer Hostnamen und Suchen von Domänen

Sie werden nicht immer den gesamten Hostnamen verwenden müssen, um auf einen anderen Dienst zuzugreifen, da die Suchdomänen-Suffixe in der resolv.conf -Datei festgelegt sind. Wenn Sie einen Dienst im selben Namespace kontaktieren, können Sie ihn einfach beim Namen rufen:

Fügen Sie other-service zur Abfrage hinzu, wenn sich der Dienst in einem anderen Namespace befindet:

Sie müssen mindestens Folgendes verwenden, wenn Sie einen Pod ansprechen möchten:

Nur die .svc-Suffixe werden in der Standard- resolv.conf-Datei automatisch vervollständigt. Daher ist es wichtig, die Einstellungen bis zu .pod anzugeben. Als Nächstes wollen wir uns mit den Feinheiten der beiden alternativen Kubernetes-DNS-Implementierungen befassen, die wir bisher kennengelernt haben.

Kubernetes-DNS-Implementierung

Kubernetes-Version 1.11 stellte eine neue Software zur Verwaltung des kube-dns-Dienstes bereit, wie im vorherigen Abschnitt erwähnt. Der Hauptgrund für das neue Update war die Verbesserung der Leistung und Sicherheit des Dienstes. Beginnen wir mit der kube-dns-Integration von Anfang an.

  1. kube-dns

In der vorherigen Kubernetes-Version 1.11 hatte der kube-dns-Dienst drei Container, die in einem kube-dns-Pod im kube-system-Namespace betrieben wurden. Werfen Sie einen Blick auf die drei folgenden Container:

  • kube-dns: ein Container, auf dem SkyDNS läuft und der als DNS-Abfrage-Auflösungsdienst fungiert.
  • dnsmasq: SkyDNS-Antworten werden von dnsmasq, einem gängigen, leichtgewichtigen DNS-Resolver und Cache, zwischengespeichert.
  • sidecar: ein Container an der Seite des Dienstes, der Metriken meldet und auf Health-Checks reagiert.

CoreDNS wurde als Reaktion auf Sicherheitslücken in Dnsmasq und Skalierbarkeits- und Leistungsprobleme bei SkyDNS entwickelt.

  1. CoreDNS

Als neuer Kubernetes-DNS-Dienst wurde CoreDNS in Kubernetes 1.11 auf General Availability hochgestuft. Dies bedeutet, dass er produktionsbereit ist und von vielen Installationswerkzeugen und Managed-Kubernetes-Anbietern als Standard-Cluster-DNS-Dienst verwendet wird.

CoreDNS ist ein flexibler und erweiterbarer DNS-Server, der als Kubernetes-DNS-Cluster fungiert. Er übernimmt alle Funktionen des vorherigen Systems. Ein DNS-Container ist für das Auflösen und Zwischenspeichern von DNS-Abfragen verantwortlich. CoreDNS reagiert auf Health-Checks und stellt Metriken in einem einzigen Container bereit. Darüber hinaus behebt er einige kleinere Mängel und bietet neue Funktionen zur Lösung von Leistungs- und Sicherheitsproblemen:

  • Einige Konflikte zwischen der Verwendung von stubDomains und externen Diensten wurden behoben.
  • Durch die Randomisierung der Reihenfolge, in der einige Einträge zurückgegeben werden, kann CoreDNS das DNS-basierte Round-Robin-Load-Balancing.
  • Durch eine bessere Iteration über alle in resolv.conf definierten Suchdomänen-Suffixe kann eine Funktion namens autopath die DNS-Antwortzeiten bei der Auflösung externer Hostnamen verbessern.
  • Selbst wenn der Pod nicht existiert, wird kube-dns 10.32.0.125.namespace.pod.cluster.local immer aufgelöst zu 10.32.0.125. CoreDNS bietet einen validierten Pod-Modus, der nur dann aufgelöst wird, wenn ein Pod mit der korrekten IP-Adresse und dem korrekten Namespace existiert.

Um Ihr Wissen über Kubernetes- endpoints, autopaths, und wildcards zu vertiefen, lesen Sie ein Tutorial darüber, wie Kubernetes das Lesen von Zonendaten ermöglicht aus seinem Cluster.

Anpassungsfunktionen

Kubernetes ermöglicht es Ihnen, DNS-Pods zu konfigurieren und die DNS-Auflösung des Clusters anzupassen, dank des Kubernetes-DNS-Anpassungsdienstes. Administratoren können diese Dienste nutzen, um die in resolv.conf definierten Upstream-Nameserver oder Suchdomänen-Suffixe zu ändern. Vor allem gibt es eine Zusatzfunktion zur Personalisierung von Pods und Containern mithilfe der Option dnsConfig :

Kubernetes DNS Demo Pod Yaml

Das Aktualisieren dieser Konfiguration erzwingt ein Umschreiben der resolv.conf eines Pods, sodass die Änderungen wirksam werden. Das obige Setup erstellt eine Datei, die die Zeilen nameserver 203.0.113.44 und search custom.dns.local enthält, was direkt in die normalen resolv.conf -Optionen übernommen wird.

Fazit

In dieser Anleitung haben wir Sie durch die Grundlagen des Kubernetes-DNS-Dienstes und seine Implementierung in verschiedenen Versionen geführt. Kubernetes-DNS-Einträge wurden ebenfalls anhand eines Beispiels besprochen. Darüber hinaus haben wir einige zusätzliche Konfigurationsoptionen zur Anpassung von Pods und zur Auflösung von DNS-Abfragen hervorgehoben. Dies deckt die Grundlagen des Kubernetes-DNS-Dienstes ab, aber Ihr Lernen sollte hier nicht enden. Werfen Sie einen Blick auf die offizielle Kubernetes-Dokumentation, um mehr über das Thema zu erfahren.

Um Ihr DevOps-Wissen zu vertiefen und in die Grundlagen von Kubernetes einzutauchen, werfen Sie einen Blick auf die folgenden Anleitungen auf unserem Blog:

Viel Spaß beim Computing!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.