Ein Kubernetes Load Balancer verteilt den Netzwerkverkehr automatisch auf mehrere Pods, um eine gleichmäßige Auslastung und hohe Verfügbarkeit sicherzustellen. Er wird meist über einen Service vom Typ „LoadBalancer“ realisiert, der externe Anfragen an die internen Dienste weiterleitet. So können Anwendungen zuverlässig und skalierbar erreichbar gemacht werden.

Managed Kubernetes
Kubernetes als Managed Service von IONOS Cloud

Die ideale Plattform für performante und hochskalierbare Container-Anwendungen. Umfassend ins IONOS Cloud Ökosystem integriert und rund um die Uhr professionell betreut.

Was ist ein Load Balancer in Kubernetes?

Load Balancer dienen dazu, die Last von Servern oder virtuellen Maschinen möglichst effizient aufzuteilen. Auf diese Weise kann die Gesamt-Performance erhöht werden. Im Normalfall wird der Load Balancer den Servern vorangeschaltet, um eine Überlastung einzelner Server zu verhindern und eine optimale Ausnutzung der zur Verfügung stehenden Ressourcen zu gewährleisten. Auch dann, wenn es zu Serverausfällen kommt, garantiert Load Balancing ein lauffähiges System, indem Anfragen gezielt umgeleitet werden.

Ein wenig anders – aber mit demselben Hintergrundgedanken – funktionieren Kubernetes Load Balancer. Bei Kubernetes muss dabei allerdings zwischen zwei verschiedenen Load Balancer-Typen unterschieden werden:

  • Interne Kubernetes Load Balancer
  • Externe Kubernetes Load Balancer

Interne Kubernetes Load Balancer

Einen anderen Ansatz als klassische Load Balancer verfolgen die internen Kubernetes Load Balancer, die an dieser Stelle der Vollständigkeit halber erwähnt werden. Diese sorgen dafür, dass nur Anwendungen, die im selben virtuellen Netzwerk wie ihr Kubernetes-Cluster ausgeführt werden, auf dieses Netzwerk zugreifen können.

Externe Kubernetes Load Balancer

Externe Load Balancer weisen einem Service-Node eines Kubernetes-Clusters eine eigene IP-Adresse oder einen DNS-Namen zu, sodass dieser externe HTTP-Requests empfangen kann. Mit „LoadBalancer“ gibt es hierfür einen speziellen Kubernetes-Service-Typ. Dieser soll den externen Traffic zu einzelnen Kubernetes-Pods des Clusters weiterleiten, sodass eine optimale Aufteilung der eingehenden Anfragen gewährleistet wird.

Hinweis

Es gibt verschiedene Möglichkeiten bzw. Algorithmen, Load Balancing in Kubernetes zu konfigurieren. Für welchen Sie sich entscheiden, hängt ganz von Ihren individuellen Bedürfnissen ab. Die unterschiedlichen Algorithmen bestimmen vor allem, nach welchem Prinzip der Load Balancer eingehenden Traffic verarbeitet.

Wie funktioniert ein Load Balancer?

In Kubernetes übernimmt ein Load Balancer die zentrale Aufgabe, den Netzwerkverkehr effizient auf mehrere Instanzen eines Dienstes, also die Pods, zu verteilen. Ziel ist es, eine gleichmäßige Auslastung sicherzustellen, die Verfügbarkeit zu erhöhen und Ausfälle einzelner Komponenten zu kompensieren.

Technisch betrachtet empfängt der Load Balancer eingehende Anfragen und prüft, welche Pods aktuell verfügbar und leistungsfähig sind. Dabei greift Kubernetes auf kontinuierliches internes Monitoring zurück: Pods, die fehlerhaft oder überlastet sind, werden automatisch aus dem Routing ausgeschlossen. Der Load Balancer entscheidet dann dynamisch, an welchen Pod die jeweilige Anfrage weitergeleitet wird.

Diese Verteilung erfolgt auf Basis verschiedener Kriterien. Die Nutzerinnen und Nutzer bekommen davon nichts mit. Die Anwendung bleibt erreichbar und performant, selbst wenn im Hintergrund einzelne Pods starten, neu deployt werden oder ausfallen.

Bild: Die Funktionsweise von Kubernetes Load Balancer im Überblick
Der Load Balancer verteilt externen Traffic auf die in Gelb dargestellten Pods eines Service im Kubernetes Cluster.
Private Cloud powered by VMware
Cloud? Aber sicher!
  • Jederzeit vollständige Datenhoheit sowie Datenkontrolle
  • Im Einklang mit allen gesetzlichen Regelungen in Deutschland
  • Ohne Vendor Lock-in für höchste Flexibilität

Wozu dient ein Kubernetes Load Balancer?

Ein Kubernetes Load Balancer definiert einen im Cluster laufenden Service, der über das öffentliche Internet erreichbar ist. Um das nachzuvollziehen, hilft ein Blick auf die Kubernetes-Architektur. Ein Cluster umfasst mehrere Nodes, die ihrerseits mehrere Pods enthalten. Jedem Pod des Clusters wird eine interne IP zugewiesen, die sich von außerhalb des Clusters nicht ansprechen lässt.

Software unter fester IP verfügbar machen

Zum Nutzbarmachen der in den Pods laufenden Software unter einer dedizierten IP-Adresse wird in der Regel ein Kubernetes-Service benötigt. Neben „LoadBalancer“ gibt es noch weitere Service-Typen, die sich für verschiedene Einsatzszenarien anbieten. Allen Service-Typen ist gemeinsam, dass sie eine Menge von Pods zu einer logischen Einheit zusammenfassen und beschreiben, wie auf diese zugegriffen wird.

Optimale Verteilung des externen Traffics

Ein Kubernetes Load Balancer soll für eine optimale Verteilung des externen Traffics auf die Pods in Ihrem Kubernetes Cluster sorgen. Deshalb eignen sich die Services für so gut wie jeden Einsatzzweck. Aufgrund der Tatsache, dass Kubernetes Load Balancer den Traffic gezielt an einzelne Pods leiten können, ist eine hohe Verfügbarkeit Ihres Clusters gewährleistet: Sobald ein Pod nicht funktionstüchtig ist oder Fehler aufweist, sorgt der Load Balancer dafür, dass die Aufgaben an die anderen Pods verteilt werden.

Skalierbarkeit optimieren

Auch die Skalierbarkeit wird durch den Einsatz von Load Balancing positiv beeinflusst. Kubernetes kann Pods je nach Bedarf automatisch anlegen oder löschen. Wird also festgestellt, dass der eingehende Traffic weniger oder mehr Ressourcen benötigt als aktuell vorhanden, kann Kubernetes automatisch auf diesen Umstand reagieren.

So erstellen Sie einen Load Balancer für Kubernetes

Um einen Kubernetes Load Balancer zu erstellen, ist es nötig, dass Ihr Cluster in einer Cloud oder einer Umgebung läuft, die die Konfiguration externer Load Balancer unterstützt.

Bei IONOS wird einem Node im Cluster bei Erzeugung eines Kubernetes Load Balancers eine statische IP zugewiesen. Unter dieser IP lässt sich der Service von außerhalb des Clusters ansprechen. Der auf dem Node laufende Kube-Proxy verteilt eingehenden Traffic intelligent auf die einzelnen Pods.

Zunächst erstellen Sie einen Service, dem Sie dann mit folgender Zeile im Service-Manifest den Service-Typ „LoadBalancer“ zuweisen:

type: LoadBalancer

Zum Beispiel könnte die Konfiguration eines Kubernetes Load Balancers wie folgt aussehen: Der Service fasst Pods unter dem Selektor „web-app“ zusammen. Unter der Load Balancer IP auf Port 8080 eingehender Traffic wird auf die einzelnen Pods verteilt. Dabei wird der auf jedem Pod auf Port 80 laufende Dienst angesprochen:

apiVersion: v1
kind: Service
metadata:
    name: web-app-service
spec:
    selector:
        app: web-app
    type: LoadBalancer
    loadBalancerIP: 203.0.113.0
    ports:
        - name: http
            port: 8080
            targetPort: 80
            protocol: TCP
yaml

Eine andere Möglichkeit, einen Kubernetes Load Balancer zu erstellen, ist die kubectl-Kommandozeile.

Mit dem Befehl

kubectl expose deployment test --target-port=9376 \
    --name=test-service --type=LoadBalancer
bash

erstellen und deployen Sie einen neuen Service namens „test-service“, der als Load Balancer fungiert.

Möchten Sie die IP-Adresse Ihres soeben erstellten Service herausfinden, hilft Ihnen folgendes Kommando:

kubectl describe services test-service
bash
War dieser Artikel hilfreich?
Zum Hauptmenü