Ein Ku­ber­netes Load Balancer verteilt den Netz­werk­ver­kehr au­to­ma­tisch auf mehrere Pods, um eine gleich­mä­ßi­ge Aus­las­tung und hohe Ver­füg­bar­keit si­cher­zu­stel­len. Er wird meist über einen Service vom Typ „Load­Ba­lan­cer“ rea­li­siert, der externe Anfragen an die internen Dienste wei­ter­lei­tet. So können An­wen­dun­gen zu­ver­läs­sig und ska­lier­bar er­reich­bar gemacht werden.

Managed Ku­ber­netes
Ku­ber­netes als Managed Service von IONOS Cloud

Die ideale Plattform für per­for­man­te und hoch­ska­lier­ba­re Container-An­wen­dun­gen. Umfassend ins IONOS Cloud Ökosystem in­te­griert und rund um die Uhr pro­fes­sio­nell betreut.

Was ist ein Load Balancer in Ku­ber­netes?

Load Balancer dienen dazu, die Last von Servern oder vir­tu­el­len Maschinen möglichst effizient auf­zu­tei­len. Auf diese Weise kann die Gesamt-Per­for­mance erhöht werden. Im Nor­mal­fall wird der Load Balancer den Servern vor­an­ge­schal­tet, um eine Über­las­tung einzelner Server zu ver­hin­dern und eine optimale Aus­nut­zung der zur Verfügung stehenden Res­sour­cen zu ge­währ­leis­ten. Auch dann, wenn es zu Ser­ver­aus­fäl­len kommt, ga­ran­tiert Load Balancing ein lauf­fä­hi­ges System, indem Anfragen gezielt um­ge­lei­tet werden.

Ein wenig anders – aber mit demselben Hin­ter­grund­ge­dan­ken – funk­tio­nie­ren Ku­ber­netes Load Balancer. Bei Ku­ber­netes muss dabei al­ler­dings zwischen zwei ver­schie­de­nen Load Balancer-Typen un­ter­schie­den werden:

  • Interne Ku­ber­netes Load Balancer
  • Externe Ku­ber­netes Load Balancer

Interne Ku­ber­netes Load Balancer

Einen anderen Ansatz als klas­si­sche Load Balancer verfolgen die internen Ku­ber­netes Load Balancer, die an dieser Stelle der Voll­stän­dig­keit halber erwähnt werden. Diese sorgen dafür, dass nur An­wen­dun­gen, die im selben vir­tu­el­len Netzwerk wie ihr Ku­ber­netes-Cluster aus­ge­führt werden, auf dieses Netzwerk zugreifen können.

Externe Ku­ber­netes Load Balancer

Externe Load Balancer weisen einem Service-Node eines Ku­ber­netes-Clusters eine eigene IP-Adresse oder einen DNS-Namen zu, sodass dieser externe HTTP-Requests empfangen kann. Mit „Load­Ba­lan­cer“ gibt es hierfür einen spe­zi­el­len Ku­ber­netes-Service-Typ. Dieser soll den externen Traffic zu einzelnen Ku­ber­netes-Pods des Clusters wei­ter­lei­ten, sodass eine optimale Auf­tei­lung der ein­ge­hen­den Anfragen ge­währ­leis­tet wird.

Hinweis

Es gibt ver­schie­de­ne Mög­lich­kei­ten bzw. Al­go­rith­men, Load Balancing in Ku­ber­netes zu kon­fi­gu­rie­ren. Für welchen Sie sich ent­schei­den, hängt ganz von Ihren in­di­vi­du­el­len Be­dürf­nis­sen ab. Die un­ter­schied­li­chen Al­go­rith­men bestimmen vor allem, nach welchem Prinzip der Load Balancer ein­ge­hen­den Traffic ver­ar­bei­tet.

Wie funk­tio­niert ein Load Balancer?

In Ku­ber­netes übernimmt ein Load Balancer die zentrale Aufgabe, den Netz­werk­ver­kehr effizient auf mehrere Instanzen eines Dienstes, also die Pods, zu verteilen. Ziel ist es, eine gleich­mä­ßi­ge Aus­las­tung si­cher­zu­stel­len, die Ver­füg­bar­keit zu erhöhen und Ausfälle einzelner Kom­po­nen­ten zu kom­pen­sie­ren.

Technisch be­trach­tet empfängt der Load Balancer ein­ge­hen­de Anfragen und prüft, welche Pods aktuell verfügbar und leis­tungs­fä­hig sind. Dabei greift Ku­ber­netes auf kon­ti­nu­ier­li­ches internes Mo­ni­to­ring zurück: Pods, die feh­ler­haft oder über­las­tet sind, werden au­to­ma­tisch aus dem Routing aus­ge­schlos­sen. Der Load Balancer ent­schei­det dann dynamisch, an welchen Pod die jeweilige Anfrage wei­ter­ge­lei­tet wird.

Diese Ver­tei­lung erfolgt auf Basis ver­schie­de­ner Kriterien. Die Nut­ze­rin­nen und Nutzer bekommen davon nichts mit. Die Anwendung bleibt er­reich­bar und per­for­mant, selbst wenn im Hin­ter­grund 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 dar­ge­stell­ten Pods eines Service im Ku­ber­netes Cluster.

Wozu dient ein Ku­ber­netes Load Balancer?

Ein Ku­ber­netes Load Balancer definiert einen im Cluster laufenden Service, der über das öf­fent­li­che Internet er­reich­bar ist. Um das nach­zu­voll­zie­hen, hilft ein Blick auf die Ku­ber­netes-Ar­chi­tek­tur. Ein Cluster umfasst mehrere Nodes, die ih­rer­seits mehrere Pods enthalten. Jedem Pod des Clusters wird eine interne IP zu­ge­wie­sen, die sich von außerhalb des Clusters nicht an­spre­chen lässt.

Software unter fester IP verfügbar machen

Zum Nutz­bar­ma­chen der in den Pods laufenden Software unter einer de­di­zier­ten IP-Adresse wird in der Regel ein Ku­ber­netes-Service benötigt. Neben „Load­Ba­lan­cer“ gibt es noch weitere Service-Typen, die sich für ver­schie­de­ne Ein­satz­sze­na­ri­en anbieten. Allen Service-Typen ist gemeinsam, dass sie eine Menge von Pods zu einer logischen Einheit zu­sam­men­fas­sen und be­schrei­ben, wie auf diese zu­ge­grif­fen wird.

Optimale Ver­tei­lung des externen Traffics

Ein Ku­ber­netes Load Balancer soll für eine optimale Ver­tei­lung des externen Traffics auf die Pods in Ihrem Ku­ber­netes Cluster sorgen. Deshalb eignen sich die Services für so gut wie jeden Ein­satz­zweck. Aufgrund der Tatsache, dass Ku­ber­netes Load Balancer den Traffic gezielt an einzelne Pods leiten können, ist eine hohe Ver­füg­bar­keit Ihres Clusters ge­währ­leis­tet: Sobald ein Pod nicht funk­ti­ons­tüch­tig ist oder Fehler aufweist, sorgt der Load Balancer dafür, dass die Aufgaben an die anderen Pods verteilt werden.

Ska­lier­bar­keit op­ti­mie­ren

Auch die Ska­lier­bar­keit wird durch den Einsatz von Load Balancing positiv be­ein­flusst. Ku­ber­netes kann Pods je nach Bedarf au­to­ma­tisch anlegen oder löschen. Wird also fest­ge­stellt, dass der ein­ge­hen­de Traffic weniger oder mehr Res­sour­cen benötigt als aktuell vorhanden, kann Ku­ber­netes au­to­ma­tisch auf diesen Umstand reagieren.

So erstellen Sie einen Load Balancer für Ku­ber­netes

Um einen Ku­ber­netes Load Balancer zu erstellen, ist es nötig, dass Ihr Cluster in einer Cloud oder einer Umgebung läuft, die die Kon­fi­gu­ra­ti­on externer Load Balancer un­ter­stützt.

Bei IONOS wird einem Node im Cluster bei Erzeugung eines Ku­ber­netes Load Balancers eine statische IP zu­ge­wie­sen. Unter dieser IP lässt sich der Service von außerhalb des Clusters an­spre­chen. Der auf dem Node laufende Kube-Proxy verteilt ein­ge­hen­den Traffic in­tel­li­gent auf die einzelnen Pods.

Zunächst erstellen Sie einen Service, dem Sie dann mit folgender Zeile im Service-Manifest den Service-Typ „Load­Ba­lan­cer“ zuweisen:

type: LoadBalancer

Zum Beispiel könnte die Kon­fi­gu­ra­ti­on eines Ku­ber­netes Load Balancers wie folgt aussehen: Der Service fasst Pods unter dem Selektor „web-app“ zusammen. Unter der Load Balancer IP auf Port 8080 ein­ge­hen­der Traffic wird auf die einzelnen Pods verteilt. Dabei wird der auf jedem Pod auf Port 80 laufende Dienst an­ge­spro­chen:

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ög­lich­keit, einen Ku­ber­netes Load Balancer zu erstellen, ist die kubectl-Kom­man­do­zei­le.

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 er­stell­ten Service her­aus­fin­den, hilft Ihnen folgendes Kommando:

kubectl describe services test-service
bash
Zum Hauptmenü