Kubernetes Load Balancer

Um möglichst effizient mit der Containerverwaltungssoftware Kubernetes zu arbeiten, ist es unerlässlich, dass der anfallende Workload sinnvoll auf verschiedene Pods verteilt wird. Hierfür nutzt man einen Load Balancer.

Managed Kubernetes von IONOS

Der einfache Weg zur Verwaltung von Container-Workloads. Vollautomatisiertes Setup von Kubernetes Clustern und maximale Transparenz und Kontrolle der K8s Cluster.

Persistent Storage
K8s 24/7 voll supportet
Automatisiertes Cluster Setup

Was ist ein Load Balancer in Kubernetes?

Ein Load Balancer dient dazu, die Last, die Server oder virtuelle Maschinen verarbeiten müssen, möglichst effizient aufzuteilen. Auf diese Weise kann die Gesamtperformance 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 der Load Balancer 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 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. Bei dem Load Balancer handelt es sich um einen speziellen Kubernetes-Service-Typ. Dieser soll den externen Traffic zu einzelnen Pods Ihres Clusters weiterleiten, sodass eine optimale Aufteilung der eingehenden Anfragen gewährleistet wird. Dieser Artikel beschäftigt sich hauptsächlich mit externen Load Balancern.

Es gibt verschiedene Möglichkeiten bzw. Algorithmen, Load Balancer 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.

Tipp

Sie nutzen bisher kein Kubernetes? Mit IONOS Managed Kubernetes können Sie Ihre Container-Anwendungen spielend leicht bei Kubernetes bereitstellen und von den umfangreichen Vorteilen der Containerverwaltungssoftware profitieren! Unser Kubernetes-Tutorial hilft Ihnen außerdem bei den ersten Schritten im Umgang mit Kubernetes.

Wozu dient ein Kubernetes Load Balancer?

Ein Kubernetes Load Balancer definiert einen im Cluster laufenden Service, welcher über das öffentliche Internet erreichbar ist. Um das nachzuvollziehen, hilft ein Blick auf die Kubernetes-Architektur. Ein Cluster umfasst mehrere Nodes, welche ihrerseits mehrere Pods enthalten. Jedem Pod des Clusters wird eine interne IP zugewiesen, die sich von außerhalb des Clusters nicht ansprechen lässt. Das macht Sinn, denn Pods werden automatisch erzeugt und entfernt, wobei die IPs neu vergeben werden.

Zum Nutzbarmachen der in den Pods laufenden Software unter einer festen Adresse wird in der Regel ein Kubernetes-Service benötigt. Neben dem Load Balancer gibt es noch weitere Service-Typen, welche 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:

Zitat

„A Service is an abstraction which defines a logical set of Pods and a policy by which to access them“ — Quelle: https://kubernetes.io/docs/concepts/services-networking/service/
Übersetzung: „Ein Service ist eine Abstraktion, welche eine Menge von Pods logisch gruppiert und ein Verfahren festlegt, sie anzusprechen.“ (übersetzt von IONOS)

Ein Kubernetes Load Balancer soll für eine optimale Verteilung des externen Traffic 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 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.

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 bei Erzeugung eines Kubernetes Load Balancers einem Node im Cluster 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 an die einzelnen Pods.

Zunächst erstellen Sie einen Service, dem Sie dann mit folgender Zeile im Service-Manifest den Service-Typ Load Balancer 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
spec:
  selector:
    app: web-app
  type: LoadBalancer
  loadBalancerIP: 203.0.113.0
  ports:
    - name: http
      port: 8080
      targetPort: 80
      protocol: TCP
php

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

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