Dieses Dokument ist eine Übersicht über die Diensterkennung (Service Discovery) von Kubernetes DNS und die Verwendung mit Kf.
Wann sollte die Kubernetes-Diensterkennung mit Kf verwendet werden?
Die Kubernetes-Service Discovery kann von Anwendungen verwendet werden, die Backend-Dienste auf einheitliche Weise ermitteln sollen, unabhängig davon, wo die Anwendung bereitgestellt wird. Ein Beispiel dafür ist ein Team, das für die Konfiguration einen allgemeinen URI verwenden möchte, der immer auf das lokale SMTP-Gateway verweist, um den Code von der Umgebung zu trennen, in der er ausgeführt wurde.
Die Diensterkennung unterstützt Anwendungsteams bei folgenden Aufgaben:
- Die Umgebungskonfiguration reduzieren.
- Client- und Serveranwendungen entkoppeln.
- Anwendungen gestatten, in neue Umgebungen übertragbar zu sein.
Sie können die Kubernetes-Diensterkennung in folgenden Fällen verwenden:
- Wenn Anwendungen die DNS-Konfigurationen ihres Containers nutzen, um Hosts aufzulösen
- Wenn Anwendungen mit ihren Sicherungsdiensten im selben Kubernetes-Cluster oder Namespace bereitgestellt werden
- Wenn Sicherungsdienste mit einem Kubernetes-Dienst verknüpft sind; Kf erstellt diese für jede Anwendung
- Wenn Kubernetes-Netzwerkrichtlinien Traffic zwischen einer Anwendung und dem Kubernetes-Dienst zulassen, mit dem sie kommunizieren muss; Kf erstellt diese Richtlinien in jedem Kf-Bereich
In den folgenden Fällen sollten Sie die Kubernetes-Diensterkennung nicht verwenden:
- Wenn Anwendungen für mehrere Cluster ein Failover ausführen müssen
- Wenn Sie den von Ihrer Anwendung verwendeten DNS-Resolver ändern
- Wenn Anwendungen bestimmte Load-Balancing-Typen benötigen
Funktionsweise der Diensterkennung mit Kubernetes
Die Diensterkennung in Kubernetes funktioniert durch Änderung der DNS-Konfiguration von Containern, die auf einem Kubernetes-Knoten ausgeführt werden. Wenn eine Anwendung nach einem nicht qualifizierten Domainnamen sucht, versucht der lokale DNS-Resolver zuerst, den Namen im lokalen Cluster aufzulösen.
Domains, die nicht aus mehreren Elementen bestehen, werden für die Namen von Kubernetes-Diensten im Namespace des Containers aufgelöst. Jede Kf-Anwendung erstellt einen Kubernetes-Dienst mit dem gleichen Namen. Wenn die beiden Kf-Anwendungen ping
und pong
im selben Kf-Bereich bereitgestellt wurden, kann ping
mit der URL http://pong
Traffic an den anderen Dienst senden.
Domains mit einem einzelnen Punkt werden für die Kubernetes-Dienste im Kubernetes-Namespace aufgelöst, der den gleichen Namen wie das Label nach dem Punkt hat. Wenn beispielsweise eine PostgreSQL-Datenbank mit einem customers
-Dienst im Namespace database
vorhanden ist, kann eine Anwendung in einem anderen Namespace sie mithilfe von postgres://customers.database
auflösen.
Diensterkennung für Kf verwenden
Die DNS-basierte Diensterkennung in Kubernetes kann für jede Kf-Anwendung verwendet werden. Jede Kf-Anwendung erstellt einen Kubernetes-Dienst mit dem gleichen Namen und jeder Kf-Bereich legt einen Kubernetes-Namespace mit dem gleichen Namen an.
- Verweisen Sie mit
protocol://app-name
auf eine Kf-Anwendung im aktuellen Bereich. - Verweisen Sie mit
protocol://app-name.space-name
auf eine Kf-Anwendung an einem anderen Bereich. - Verweisen Sie auf eine Kf-Anwendung im aktuellen Bereich, um einen benutzerdefinierten Port mit
protocol://app-name:port
zu überwachen. - Verweisen Sie auf eine Kf-Anwendung in einem anderen Bereich, um einen benutzerdefinierten Port mit
protocol://app-name.space-name:port
zu überwachen. .
Best Practices
Für Anwendungen, die als Ziel der DNS-basierten Diensterkennung verwendet werden, sollten häufig Systemdiagnosen festgelegt werden. Dadurch wird sichergestellt, dass diese schnell hinzugefügt und aus dem Pool von Hosts entfernt werden, die Verbindungen akzeptieren.
Anwendungen, die eine DNS-basierte Diensterkennung verwenden, sollten die IP-Adressen der aufgelösten Dienste nicht im Cache speichern, da dann nicht gewährleistet ist, dass sie zuverlässig funktionieren.
Wenn umgebungsspezifische Dienste außerhalb des Clusters vorhanden sind, können sie mit Kubernetes DNS aufgelöst werden, wenn Sie Kubernetes-Dienste vom Typ ExternalName einrichten. Diese Kubernetes-Dienste bieten die gleichen Auflösungsfunktionen, geben aber einen CNAME-Eintrag zurück, um Anfragen an eine externe Stelle weiterzuleiten.
Vergleich mit Eureka
Eureka ist ein clientseitiger Open-Source-Load-Balancer von Netflix. Dieser wird häufig im Rahmen des Service Brokers von Spring-Cloud-Diensten verwendet. Eureka wurde als regionales Verfahren für Load-Balancing und Diensterkennung entwickelt. Es ist für Dienste geeignet, die in einer Umgebung ausgeführt werden, in denen häufig Störungen von Arbeitslasten auftreten, die zu instabilen IP-Adressen führen.
Eureka wurde als Client-Server-Modell konzipiert. Clients registrieren sich dabei selbst beim Server, um anzugeben, mit welchen Namen sie verbunden werden sollen, und senden regelmäßig Server-Heartbeats. Der Server ermöglicht allen verbundenen Clients, Namen aufzulösen.
Im Allgemeinen sollten Sie in Kubernetes in folgenden Fällen statt Eureka Kubernetes DNS verwenden:
- DNS funktioniert mit allen Programmiersprachen und Anwendungen, ohne dass Bibliotheken erforderlich sind.
- Die vorhandene Systemdiagnose Ihrer Anwendung wird wiederverwendet, um Fehlerkombinationen zu reduzieren.
- Kubernetes verwaltet den DNS-Server, sodass weniger Abhängigkeiten vorhanden sind.
- Kubernetes DNS folgt den gleichen Richtlinien und RBAC-Einschränkungen wie Kubernetes.
Das Bereitstellen eines Eureka-Servers hat aber in folgenden Fällen Vorteile:
- Sie benötigen die Diensterkennung in Kubernetes- und VM-basierten Anwendungen.
- Sie benötigen clientbasiertes Load-Balancing.
- Sie benötigen unabhängige Systemdiagnosen.
Nächste Schritte
- Mehr über Service Discovery in GKE lesen.
- Erfahren Sie mehr über Service Directory, ein verwaltetes Angebot ähnlich wie Eureka