In Kubernetes (einer Container-Orchestrierungsplattform) definiert der Begriff „Dienst“ die Offenlegung einer Netzwerkanwendung, die als eine oder mehrere bereitstellbare Recheneinheiten (Pod) fungiert.
Hier besprechen wir in diesem Artikel Kubernetes-Dienste, ihre Typen und zugehörige Details.
Kubernetes-Dienste erklärt
Kubernetes-Dienste werden als Abstraktion definiert und stellen eine Reihe logischer Pods oder eine bereitgestellte Gruppe kurzlebiger Pods in einem Cluster dar. Es stellt die Verfügbarkeit von Pods sicher, die bestimmte Funktionen bereitstellen. Zum Beispiel Bildverarbeitung oder Webdienste mit zugewiesenem Namen und eindeutiger IP-Adresse namens ClusterIP.
Auf Pods kann über diese IP-Adresse und diesen DNS-Namen zugegriffen werden. Der Dienst bleibt unveränderlich, solange er die IP-Adresse nutzt. Alle dienstbezogenen Anfragen werden an die entsprechenden Pods umgeleitet, wodurch der Dienst zum Endpunkt für die Anwendungskommunikation wird. Es erleichtert die Skalierung von Pods.
Wie unterscheidet sich ein Dienst von einer Bereitstellung in Kubernetes?
Eine Bereitstellung stellt die kontinuierliche Funktion von Pods sicher. Anders ausgedrückt: Es sorgt dafür, dass eine Gruppe von Pods funktionsfähig bleibt.
Sie könnten einen Dienst ausschließen, wenn Sie eine Bereitstellung verwenden, um eine Reihe identischer Pods im Cluster laufen zu lassen. Darüber hinaus können Entwickler die Bereitstellung auch vergrößern und verkleinern.
Ein Dienst wird verwendet, um den Zugriff auf ein Netzwerk für eine Reihe von Pods zu ermöglichen. Um einen Dienst ohne Bereitstellung nutzen zu können, müsste jeder Pod einzeln erstellt werden, um Netzwerkanforderungen an die Pods weiterzuleiten, indem diese anhand ihrer Bezeichnungen ausgewählt werden.
Technisch gesehen hilft eine Bereitstellung dabei, einen Pod mit containerisierten Anwendungen zu starten und so die kontinuierliche Funktion von Replikaten im Cluster sicherzustellen.
Ein Dienst stellt den Pods eine Schnittstelle zur Verfügung, die den Netzwerkzugriff innerhalb des Clusters oder den Netzwerkzugriff zwischen externen Prozessen und Diensten ermöglicht.
Arten von Kubernetes-Diensten
Kubernetes-Dienste enthalten vier verschiedene Typen, die jeweils für die Ausführung bestimmter Aufgaben geeignet sind. Wir haben jede Art von Service wie folgt detailliert beschrieben.
ClusterIP
ClusterIP soll als eine Art Dienst fungieren, der Instanzen von Pods (jeder mit einer eindeutigen ID-Adresse) verfügbar macht, die auf dem Cluster ausgeführt werden. Die jedem Pod eindeutig zugewiesene IP-Adresse wird vom ClusterIP-Dienst verwendet und ermöglicht die Weiterleitung des Datenverkehrs zum und vom Pod. Interessanterweise kann Kubernetes automatisch einen ClusterIP-Dienst erstellen, wenn ein bestimmtes Attribut in der YAML-Datei nicht angegeben ist.
Der ClusterIP-Service in Kürze –
- Eine gleichmäßige Verteilung des Netzwerkverkehrs (auch Lastausgleich genannt) auf eine Gruppe identischer Pods
- Verfügbarmachen von Pod-Instanzen, die auf dem Kubernetes-Cluster ausgeführt werden
- Zuweisen einer eindeutigen IP-Adresse und eines DNS-Namens zu einer Reihe von Pods, die von anderen Diensten innerhalb des Clusters genutzt werden sollen
NodePort
NodePort ist identisch mit einem ClusterIP-Dienst und wird als Erweiterung des ClusterIP-Diensttyps definiert.
Man kann auch sagen, dass es auf dem ClusterIP-Dienst aufbaut und eine Gruppe von Pods über einen statischen Port auf der IP jedes Knotens der Außenwelt zugänglich macht und so die Kommunikation untereinander ermöglicht. Jeder Pod enthält einen oder mehrere Ports, die als externe IP-Adresse von Clients verwendet werden, die eine Verbindung zu ihm herstellen.
Die Sicherheit wird zu einem Problempunkt, wenn NodePort zum Offenlegen von Ports verwendet wird. Grund? Jeder, der mit der IP-Adresse eines Knotens im Cluster vertraut ist, kann auf die auf dem Knoten ausgeführten Ressourcen zugreifen.
Infolgedessen kann es kontraproduktiv sein, wie etwa die Manipulation der Dienste und der damit verbundenen Daten durch unbefugte Benutzer.
Lastenausgleicher
Der Load Balancer gewährleistet die Zuverlässigkeit und Skalierbarkeit der Netzwerkleistung, indem er den Netzwerkverkehr auf Server oder Knoten in einem Cluster verteilt. Je nach Bedarf können Sie den Load Balancer zum Hinzufügen oder Entfernen von Knoten verwenden.
Darüber hinaus gibt es viele Möglichkeiten, den externen Datenverkehr auf Pods zu verteilen.
Außerdem stellen LoadBalancer-Dienste in Kubernetes sicher, dass der Datenverkehr automatisch von fehlerhaften Pods weggeleitet wird, wodurch die Verfügbarkeit und Reaktionsfähigkeit des Dienstes jederzeit gewährleistet ist.
Load Balancer ist eine Erweiterung des NodePort-Dienstes, der eine Ressource auf einem bestimmten Pod auf jedem Knoten im Cluster verfügbar macht.
Headless-Server
Der Headless-Dienst in Kubernetes stellt keine Anfragen nach dem Zufallsprinzip und benötigt keinen Lastausgleich. Es stellt vielmehr die direkte Kommunikation zwischen einem bestimmten Pod und anderen Pods sicher. Diese Aufgabe wird dadurch erreicht, dass die ClusterIP des Pods auf „none“ festgelegt wird und eine DNS-Suche ausgeführt wird, um die IP des Pods zu ermitteln.
Was Headless-Dienste ausmacht, sind Selektoren, die es ihnen ermöglichen, Endpunktdatensätze zu erstellen. Der Anwendungsfall des Headless-Dienstes liegt beim Zugriff auf Datenbanken oder ähnliche zustandsbehaftete Anwendungen.
ExternerName
Der ExternalName-Dienst in Kubernetes ist nützlich, wenn Sie einen Dienst außerhalb oder innerhalb des Clusters ausführen und den Zugriff darauf aus dem Cluster heraus ermöglichen. Es fungiert als Proxy, ordnet einen bestimmten Dienst einem DNS-Namen zu und ermöglicht die Umleitung der Anforderungen an einen Dienst, der außerhalb oder innerhalb des Clusters ausgeführt wird.
Der ExternalName-Dienst in Kubernetes hat seine große Bedeutung. Denn wenn es um die Migration von Anwendungen zu Kubernetes geht, geht es darum, eine externe Datenbank beizubehalten, damit Sie diese zum Abrufen von Daten mit neuen Kubernetes verwenden können.
Allerdings können Ihre Pods die Datenbank, die sich außerhalb des Clusters befindet, nicht erkennen. Hier hilft der ExternalName-Dienst, indem er Entwicklern hilft, die externe Datenbank beizubehalten.
Mehr lesen – Detaillierte Überprüfung der Cloud-Automatisierungstools
Warum ist es notwendig, Kubernetes-Dienste zu konfigurieren?
Dienste in Kubernetes müssen ordnungsgemäß konfiguriert sein.
Wenn nicht, können die folgenden Probleme auftreten:
- Es wäre für die Behälter innerhalb der Kapsel schwierig, ordnungsgemäß miteinander zu kommunizieren
- Der erforderliche Zugriff auf die Ressourcen wäre für Pods schwierig. Beispielsweise würden sie wahrscheinlich nicht auf Arbeitsspeicher, CPU oder Massenspeicher zugreifen
- Dies würde zu einer Leistungslähmung führen, wenn Ihre Anwendung die Außenwelt erreicht. Beispielsweise wäre der Zugriff auf externe Dienste mit der App schwierig.
- Es besteht die Möglichkeit einer schlechten Leistung des Kubernetes-Clusters auf der ganzen Linie, wodurch die Zuverlässigkeit und Skalierbarkeit der darauf ausgeführten Apps beeinträchtigt wird.
Achten Sie daher darauf, wie Sie Dienste in Kubernetes einrichten. Sie tragen wesentlich dazu bei, eine konsistente Leistung Ihrer Anwendung sicherzustellen. Falsch konfigurierte Dienste in Kubernetes können zu einer gestörten Kommunikation zwischen Produkten führen und dadurch die Leistung Ihrer Anwendungen beeinträchtigen.
Auflösung
Die Rolle von Diensten in Kubernetes ist wichtig. Sie gewährleisten die kontinuierliche Bereitstellung eines Netzwerkendpunkts für eine Reihe von Pods, was zu einer vereinfachten Kommunikation zwischen Apps führt. Dieser Artikel gibt Ihnen einen exklusiven Einblick in die Erstellung und Nutzung von Diensten in Kubernetes und umfasst die gängigsten Kubernetes-Dienste, wie zum Beispiel:
- ClusterIP
- NodePort
- Lastenausgleicher
- Kopflos
- ExternerName
Das Verständnis dieser Kubernetes-Dienste ist unerlässlich und kann Ihnen von großem Nutzen sein, wenn Sie wissen, wie Sie sie für eine effektive Cluster-Kommunikation richtig konfigurieren.