Loadbalancer mit Kubernetes

Kubernetes

Loadbalancer mit Kubernetes

 
Bei Kubernetes handelt es sich um den marktführenden Container-Orchestrator. Mit ihm lässt sich der Einsatz von Anwendungen innerhalb eines Clusters automatisieren. Dabei spielt es keine Rolle, ob physische oder virtuelle Server verwendet werden.
 
 
 
 
 
 
 
 
 

Mit Kubernetes können sich Unternehmen ganz auf die Entwicklung ihrer Software konzentrieren. Außerdem werden diverse Aufgaben einfacher.

 

Icons/concept/Lines/Line Communicating Created with Sketch.

Automatisierung des Lebenszyklus von containerisierten Anwendungen

Diese Dienste müssen skaliert werden, um den jeweiligen Anforderungen zu entsprechen und ihren Ressourcenverbrauch zu optimieren. Mit Kubernetes ist es möglich, diesen Schritt zu automatisieren. Das kontinuierliche Deployment neuer Versionen (CI/CD) wird so gewährleistet, der Wartungsaufwand wiederum deutlich gesenkt.

Icons/concept/Container Created with Sketch.

Deployment von Multi-Container-Anwendungen (Multi-Container)

Einige Programme können mehrere Container gleichzeitig verwenden (Datenbanken, Frontend, Backend, Cache...). Dafür sind in manchen Fällen mehrere Instanzen erforderlich. Kubernetes sorgt bei dem Deployment für die Synchronisierung der verschiedenen Container und zugehörigen Komponenten.

Icons/concept/Component/Component Square Created with Sketch.

Startklar von jeder Umgebung aus

Public Cloud, Private Cloud, physischer oder virtueller Server: Kubernetes lässt sich problemlos integrieren, selbst in eine hybride Architektur. Genießen Sie so je nach Umgebung mehr Freiheit bei Ihren Projekten.

Was ist ein Loadbalancer?

Der Loadbalancer verteilt den Workload auf verschiedene Server oder Anwendungen. Er lässt sich sowohl auf einer physischen als auch auf einer virtuellen Infrastruktur installieren. Ein Loadbalancing-Programm funktioniert dann wie ein Anwendungsauslieferungskontroller (Application Delivery Controller, ADC). Mit dieser Software kann der Nutzer den Workload automatisch skalieren, je nach voraussichtlichem Traffic.

Der ADC ermittelt in Echtzeit, welcher Server oder welche Anwendung am besten auf eine Anfrage antworten kann um den Cluster auf einem stabilen Leistungsniveau zu halten. Fällt eine Komponente aus, hat der ADC außerdem die Aufgabe, den Traffic auf eine Ressource weiterzuleiten, die ihn übernehmen kann. Mehrere Arten von Konfigurationen sind möglich.

Betrachtet man die Abfolge, so ist der Loadbalancer zwischen dem Nutzer und dem Server aktiv. Der Loadbalancer analysiert die Anfrage, ermittelt eine verfügbare Maschine und stellt ihr dann die Anfrage zu. Bei Bedarf kann er auch Server hinzufügen.

Die Verteilung des Workloads ist also nur eine der Funktionen eines Loadbalancers. Sehr nützlich ist er beispielsweise auch, um ein SSL-Zertifikat zu entlasten oder ganze Gruppen von Anwendungen zu aktualisieren. Selbst Ihre Domainnamen können Sie mit dem Loadbalancer routen.

Es gibt zwei Arten von Loadbalancern:

  • Die „L4-Loadbalancer“ oder auch „Netzwerk-Loadbalancer“

Sie verarbeiten die Daten der 4. Schicht (layer 4 data) auf der Netzwerk- und Transportebene (TCP/UDP). Diese Loadbalancer konzentrieren sich nicht auf Anwendungsdaten wie die Art des Inhalts, Cookies, Position der Header usw. Sie leiten vielmehr den Traffic um, und dies nur auf Grundlage der Daten auf der Netzwerkebene.

  • Die „L7-Loadbalancer“ oder „Anwendungs-Loadbalancer“

Anders als die „L4-Loadbalancer“ leiten die „L7-Loadbalancer“ den Traffic basierend auf der Einstellung der Anwendungsschicht. Diese Loadbalancer verarbeiten daher mehr Daten auf Grundlage umfangreicherer Informationen. Dazu gehören beispielsweise HTTP-, HTTPS- und SSL-Protokolle.

Load Balancer OVHcloud

Wie funktioniert nun der Loadbalancer mit Kubernetes?

Der externe Traffic ist ein wichtiger Faktor, wenn Sie damit beginnen, Kubernetes für Ihre Anwendungen zu verwenden. Dieses Thema wird auf der offiziellen Website von Kubernetes kurz angesprochen. Wir gehen etwas genauer darauf ein.

Es gibt verschiedene Möglichkeiten, um externen Traffic auf Ihren Cluster zu leiten:

  • ein Proxy mit der ClusterIP
  • ein Dienst als NodePort
  • ein als Loadbalancer deklarierter Dienst, der dem externen Traffic ausgesetzt wird. Diese Methode ist am verbreitetsten.

ClusterIP über einen Proxy verwenden

Diese Methode wird allgemein für die Entwicklung angewandt und ist standardmäßig über Kubernetes verfügbar. Ein Proxy zwischen Ihrer externen Quelle und Ihrer ClusterIP leitet den Traffic weiter. Diesen Proxy erstellen Sie durch den Befehl „kubectl“. Sobald der Proxy bereit ist, werden Sie direkt mit der IP Ihres Clusters für diesen bestimmten Dienst verbunden.

Einen Dienst als NodePort kennzeichnen

Hierbei markieren Sie die Adressen Ihrer Nodes individuell auf den betreffenden Ports (ein fester Port des Dienstes von 30000 bis 32767). Dadurch haben Sie über dessen eigenen Port auf jedem Node externen Zugriff auf Ihren Dienst. Verwenden Sie dazu diesen Befehl: <NodeIp>:<NodePort>

Diese Methode ist jedoch eher kompliziert im Falle von Diensten für die Produktion. Da Sie hierbei keine standardmäßigen Ports verwenden, müssen Sie häufig einen externen Loadbalancer konfigurieren. Dieser Loadbalancer verarbeitet die Standard-Ports und leitet den Traffic zu der Anfrage „<NodeIp>:<NodePort>“ weiter.

Einen Loadbalancer hinzufügen

Hierbei wird ein Dienst als Loadbalancer für Ihren Cluster deklariert. Dadurch trifft der externe Traffic auf diesen Dienst. Diese Methode erfordert eine Loadbalancing-Lösung eines Cloud-Anbieters, wie zum Beispiel unseren Loadbalancer. Diese Lösung stellt den Dienst für Ihren Cluster bereit, indem sie ihm automatisch seinen NodePort zuweist.

Haben Sie eine Produktionsumgebung? Dann empfehlen wir Ihnen den Loadbalancer. Zwei Dinge sind dabei besonders wichtig:

  • Jeder Dienst, den Sie als Loadbalancer definieren und einsetzen, hat seine eigene IP-Adresse.
  • Ausschließlich Nutzer des Managed Kubernetes Service können den OVHcloud Loadbalancer verwenden.

Er dient also als Filter zwischen dem externen eingehenden Traffic und Ihrem Kubernetes-Cluster. Bis zu 16 Loadbalancer pro Cluster können Sie einsetzen und direkt über Ihr K8s-Interface verwalten. Nutzen Sie auch unsere Anleitungen zur Konfiguration Ihres Loadbalancers.

Ihrem Loadbalancer einen Ingress hinzufügen

Der Ingress ist ein Kubernetes-Objekt und verwaltet von außen den Zugang zu den Diensten Ihres Clusters, wie ein HTTP-Protokoll. Was unterscheidet ihn vom Loadbalancer?

Der Ingress ist der einzige Zugangspunkt zu Ihrem Cluster und funktioniert wie ein Reverse Proxy. Der Ingress leitet die über ihn laufenden Anfragen an die verschiedenen Dienste. Dies erfolgt nach konfigurierten Regeln. Der externe Traffic per ClusterIP, NodePort oder einen Loadbalancer läuft über den Ingress. Der bekannteste Ingress ist der NGINX Ingress Controller.

Was bringt es, einen Ingress mit Ihrem Loadbalancer zu verwenden? Ganz einfach: So senken Sie Ihre Kosten. Der Loadbalancer wird nach der Anzahl der Dienste abgerechnet, die er orchestriert. Die Kapazität dafür ist begrenzt. Verbinden Sie mit einem Ingress mehr Dienste mit demselben Loadbalancer und sparen Sie.

Was ist die optimale Verwendung?

Hierzu ist es zunächst erforderlich, festzustellen, wie Sie Kubernetes verwenden.

Der Loadbalancer eignet sich für fast alle Einsatzzwecke. Für jeden Ihrer Kubernetes-Dienste können Sie individuell einen Loadbalancer einstellen. Eine spätere Konfiguration ist nicht notwendig. Dieser Ansatz lässt sich nicht mit allen Budgets verfolgen. Hierzu gehört nämlich eine komplexe Verwaltung einer großen Anzahl von IP-Adressen.

Es geht auch einfacher: Nutzen Sie einen Loadbalancer mit einem nachgeschalteten Ingress. Alle Ihre Services werden dadurch unter derselben IP-Adresse gespeichert und Sie zahlen nur einen Loadbalancer.

Auf diese Weise orchestrierte Dienste müssen jedoch in einem logischen Zusammenhang zueinander stehen. Ist dies nicht gewährleistet, kann es zu Fehlfunktionen oder Ausfällen kommen.

 

Eine optimale Konfiguration besteht zum Beispiel für jede Gruppe von Services oder Microservices aus einem Loadbalancer, der mit einem Ingress gekoppelt ist. Der Aufbau hängt von der Komplexität Ihrer Architekturen ab.