Manuelles Load-Balancing konfigurieren

Auf dieser Seite werden die Anforderungen an das Load-Balancing bei Verwendung des manuellen Load-Balancings erläutert. Im Gegensatz zum gebündelten Load Balancing, bei dem Google Distributed Cloud Load Balancer auf Clusterknoten für Traffic auf der Steuerungs- und Datenebene bereitstellt, konfigurieren Sie beim manuellen Load Balancing eigene Load Balancing-Lösungen für Traffic auf der Steuerungs- und Datenebene.

Sie müssen einen externen Load-Balancer für die Steuerungsebene einrichten, bevor Sie einen Bare-Metal-Cluster erstellen. Der Load-Balancer der externen Steuerungsebene kann auch für den Traffic der Datenebene verwendet werden oder Sie richten einen separaten Load-Balancer für die Datenebene ein. Sie können beispielsweise einen Load-Balancer für den Cluster wie MetalLB für den Traffic auf Datenebene verwenden.

Auf dieser Seite werden nicht nur die Anforderungen an das Load-Balancing erläutert, sondern auch beschrieben, wie das manuelle Load-Balancing mithilfe von F5 BIG-IP konfiguriert wird.

Vorbereitung

In den folgenden Abschnitten werden die Voraussetzungen für die Konfiguration des manuellen Load Balancing beschrieben.

Erforderliche IP-Adresse

Sie müssen Ihre VIPs planen, bevor Sie einen Cluster erstellen. Alle Cluster benötigen eine VIP für die Steuerungsebene. Alle Nutzercluster benötigen eine zweite VIP für den Ingress-Dienst.

Diese VIPs können sich in jedem beliebigen IPv4-Subnetz des Load-Balancers befinden. Die VIP der Steuerungsebene muss von allen Clusterknoten und von der Administrator-Workstation aus erreichbar sein, auf der bmctl ausgeführt wird.

Wenn Sie den Cluster erstellen, wird der Ingress-Dienst mit der VIP bereitgestellt, die Sie in der Cluster-Konfigurationsdatei angeben. Sie können das Load-Balancing für diese IP-Adresse nach der Clustererstellung konfigurieren.

Sie müssen die IP-Adressen kennen, die Sie für die Knoten verwenden, die als Knoten der Steuerungsebene verwendet werden.

Anforderungen an den Load-Balancer der externen Steuerungsebene

Der Load-Balancer-Load-Balancer muss konfiguriert werden, bevor der Cluster erstellt wird. Der Load-Balancer-Load-Balancer muss die folgenden Anforderungen erfüllen:

  • Ein virtueller Dienst (Frontend) für die VIP der Steuerungsebene. Der Standard-Überwachungsport der Steuerungsebene ist 443. Wenn Sie jedoch einen anderen Port angeben, verwenden Sie das Feld loadBalancer.ports.controlPlaneLBPort der Clusterkonfigurationsdatei diesen Port für den virtuellen Dienst.
  • Eine Back-End-Gruppe mit allen IP-Adressen der Steuerungsebenenknoten des Clusters. Der Back-End-Port, den die Steuerungsebene überwacht, ist 6444.
  • Eine Systemdiagnose, die die Back-End-Knoten überwacht. Die Systemdiagnose muss HTTPS verwenden und den /readyz-Endpunkt auf Port 6444 prüfen. Die Systemdiagnose muss überprüfen, ob dieser Endpunkt den Statuscode 200 zurückgibt, um den Knoten als fehlerfrei zu betrachten.

Wenn der externe Load-Balancer nicht richtig konfiguriert ist, schlägt das Bootstrapping von Clustern wahrscheinlich fehl. Mit einer Preflight-Prüfung wird überprüft, ob der externe Load-Balancer richtig konfiguriert ist. Außerdem wird geprüft, ob der Load-Balancer den Endpunkt /readyz prüft.

Verbindungen zu fehlgeschlagenen Knoten zurücksetzen (empfohlen)

Zusätzlich zu den oben genannten Anforderungen empfehlen wir Ihnen, den Load-Balancer so zu konfigurieren, dass Clientverbindungen zurückgesetzt werden, wenn ein Backend-Knotenfehler auftritt. Ohne diese Konfiguration können Clients des Kubernetes API-Servers nicht mehr auf mehrere Minuten reagieren, wenn eine Serverinstanz ausfällt. Dies kann zu einer Instabilität auf der Kubernetes-Steuerungsebene führen.

  • Bei F5 BIG-IP wird diese Einstellung auf der Konfigurationsseite des Backend-Pools "Action On Service Down" genannt.
  • Bei HAProxy wird diese Einstellung in der Backend-Serverkonfiguration mit "Mark-down"-Shutdown-Sitzungen bezeichnet.
  • Wenn Sie einen anderen Load-Balancer verwenden, finden Sie in der Dokumentation die entsprechende Einstellung.

Cluster konfigurieren

Bevor Sie einen Google Distributed Cloud-Cluster erstellen, müssen Sie mit bmctl eine Cluster-Konfigurationsdatei erstellen. Bearbeiten Sie diese Datei, um das manuelle Load Balancing im Cluster zu aktivieren:

  1. Setzen Sie das Feld loadBalancer.mode auf manual.
  2. Geben Sie im Feld loadBalancer.vips.controlPlaneVIP die VIP an, die Sie für den Load-Balancer konfiguriert haben.
  3. Abschnitt "loadBalancer.addressPools" entfernen oder kommentieren

Nachdem Sie die Konfiguration der Konfigurationsdatei bearbeitet haben (einschließlich Felder, die nicht mit dem Load-Balancing zusammenhängen), überprüfen Sie, ob die VIP der Steuerungsebene auf dem Load-Balancer richtig konfiguriert ist. Führen Sie dazu die Preflight-Prüfungen aus:

bmctl check preflight -c CLUSTER_NAME

Ersetzen Sie CLUSTER_NAME durch den Namen des Clusters.

LoadBalancer-Dienste in Nutzerclustern unterstützen

Sie müssen das Load Balancing so konfigurieren, dass es Load Balancer von Kubernetes unterstützt. Im manuellen Load Balancing-Modus stellt Google Distributed Cloud Load Balancer nicht automatisch bereit. Load Balancer-Dienste funktionieren nur, wenn Sie Load Balancer bereitstellen und so konfigurieren, dass sie auf die Dienste verweisen.

Darüber hinaus stellt Google Distributed Cloud in allen Nutzerclustern automatisch einen Ingress-Dienst bereit. Für einen externen Zugriff erfordert dieser LoadBalancer-Dienst einen Load-Balancer, der auf den Dienst verweist.

Sie haben verschiedene Möglichkeiten, LoadBalancer-Dienste zu unterstützen:

  • Konfigurieren Sie den Load-Balancer für jeden Load-Balancer-Dienst im Cluster manuell. Ein Beispiel für die Verwendung von F5 BIG-IP finden Sie unter Unterstützung von LoadBalancer-Diensten konfigurieren.
  • Installieren Sie einen Load-Balancer-Controller im Cluster, der den externen Load-Balancer beim Erstellen von LoadBalancer-Diensten konfiguriert.
  • Installieren Sie eine clusterinterne Load-Balancing-Lösung wie MetalLB.

Manuelles Load-Balancing mit F5 BIG-IP

In diesem Abschnitt wird beschrieben, wie Sie das manuelle Load-Balancing mit F5 BIG-IP als externen Load-Balancer konfigurieren. Wenn Sie einen anderen Load-Balancer verwenden, lesen Sie in der Dokumentation zum Load-Balancer nach und verwenden Sie diese Schritte als Modell.

Load-Balancer der Steuerungsebene konfigurieren

Sie müssen den Load-Balancer der Steuerungsebene konfigurieren, bevor Sie einen Cluster erstellen. Anschließend können Sie Ihren Cluster konfigurieren und erstellen.

Partition für den Cluster erstellen

Jeder Cluster sollte eine eigene Partition haben. Verwenden Sie das BIG-IP-Konfigurationsdienstprogramm, um eine Partition zu erstellen:

  1. Klicken Sie auf System > Nutzer > Partitionsliste.
  2. Klicken Sie auf Erstellen.
  3. Geben Sie einen Namen für die Partition ein.
  4. Klicken Sie auf Fertig.

In den folgenden Schritten erstellen Sie Objekte in dieser Partition. Achten Sie darauf, dass diese Partition im Drop-down-Menü rechts oben in der UI für jede der folgenden Aufgaben ausgewählt ist, damit jedes Objekt in dieser Partition erstellt wird.

Monitor erstellen

Erstellen Sie einen Monitor, um Systemdiagnosen auf den Knoten der Steuerungsebene durchzuführen:

  1. Gehen Sie zu Lokaler Traffic > Monitore.
  2. Klicken Sie auf Erstellen.
  3. Geben Sie einen Namen für den Monitor ein, z. B. https_readyz.
  4. Legen Sie für Typ HTTPS fest.
  5. Geben Sie für Send String (String senden) GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close ein.
  6. Geben Sie für Receive String den Wert HTTP/1.1 200 ein.
  7. Klicken Sie auf Fertig.

Knoten erstellen

Erstellen Sie einen Knoten, der auf die Knoten der Steuerungsebene verweist. Wenn Ihr Cluster eine Hochverfügbarkeitsebene (HA) mit mehreren Knoten der Steuerungsebene hat, erstellen Sie für jeden Knoten der Steuerungsebene ein Knotenobjekt.

  1. Wechseln Sie zu Lokaler Traffic > Knoten > Knotenliste.
  2. Klicken Sie auf Erstellen.
  3. Geben Sie einen Namen für den Knoten ein.
  4. Geben Sie die IP-Adresse des Knotens in das Feld "Adresse" ein.
  5. Klicken Sie auf Fertig.

Backend-Pool erstellen

Erstellen Sie einen Pool für die Knoten der Steuerungsebene:

  1. Gehen Sie zu Lokaler Traffic > Pools > Poolliste.
  2. Klicken Sie auf Erstellen.
  3. Wählen Sie im Drop-down-Menü Konfiguration die Option Erweitert aus.
  4. Geben Sie einen Namen für den Pool ein.
  5. Wählen Sie die zuvor erstellte Systemdiagnose aus.
  6. Setzen Sie Action On Service Down (Aktion bei Dienstabschaltung) auf Reject (Ablehnen). Weitere Informationen zu dieser Einstellung finden Sie im Abschnitt Verbindungen zu fehlerhaften Knoten zurücksetzen.
  7. Fügen Sie dem Pool den Knoten der Steuerungsebene hinzu. Wenn Ihr Cluster mehrere Knoten der Steuerungsebene hat, wiederholen Sie diese Schritte für jeden Knoten:
    1. Klicken Sie im Abschnitt Neue Mitglieder auf Knotenliste und wählen Sie dann den zuvor erstellten Knoten der Steuerungsebene aus.
    2. Geben Sie im Feld Service Port den Wert 6444 ein.
    3. Klicken Sie auf Hinzufügen.

Virtuellen Server erstellen

Erstellen Sie einen virtuellen Server für die Steuerungsebene:

  1. Gehen Sie zu Lokaler Traffic > Virtuelle Server > Virtuelle Serverliste.
  2. Klicken Sie auf Erstellen.
  3. Geben Sie einen Namen für den virtuellen Server ein.
  4. Legen Sie für Typ Standard fest.
  5. Geben Sie 0.0.0.0/0 in das Feld Quelladresse ein, um Traffic von jedem Ziel zuzulassen.
  6. Geben Sie als VIP die Zielebene als Zieladresse ein.
  7. Geben Sie den Port des Steuerungsebene als Serviceport ein. Der Standardwert ist 443, dies ist jedoch konfigurierbar und muss mit dem übereinstimmen, was Sie in der Clusterkonfiguration für loadBalancer.ports.controlPlaneLBPort konfigurieren.
  8. Wählen Sie im Feld Source Address Translation die Option Auto Map aus.
  9. Wählen Sie unter Default Pool (Standardpool) den zuvor erstellten Drop-down-Pool aus.
  10. Klicken Sie auf Fertig.

Unterstützung für LoadBalancer-Dienste konfigurieren

Im manuellen Load Balancing-Modus stellt Google Distributed Cloud keine Load Balancer automatisch zur Unterstützung von LoadBalancer-Diensten bereit. Weitere Informationen finden Sie unter LoadBalancer-Dienste in Nutzerclustern unterstützen.

In diesem Abschnitt wird gezeigt, wie Sie einen F5 BIG-IP-Load-Balancer für einen Load-Balancer-Dienst manuell konfigurieren. Wiederholen Sie diese Schritte für jeden LoadBalancer-Dienst, den Sie freigeben möchten.

Vorbereitung

Zum Konfigurieren eines LoadBalancer-Dienstes müssen Sie die VIP kennen, die Sie über den Load-Balancer bereitstellen möchten, den Port, auf dem Sie ihn bereitstellen möchten, und den NodePort, den der LoadBalancer-Dienst in Kubernetes verwendet.

Nachdem Sie einen LoadBalancer-Dienst im Cluster bereitgestellt haben, ermitteln Sie den für den LoadBalancer-Dienst verwendeten NodePort. Mit dem folgenden Befehl werden die Ports des Dienstes angezeigt:

kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml

Ersetzen Sie Folgendes:

  • KUBECONFIG durch den Pfad zur zu verwendenden kubeconfig-Datei.
  • SERVICE_NAME durch den Namen des LoadBalancer-Dienstes.

Die Ausgabe von kubctl get service enthält einen Abschnitt ports. Jeder Porteintrag zeigt den nodePort an, der für den Port auf dem Dienst verfügbar ist. Dieser nodePort ist das konfigurierte Load Balancer-Backend. Die folgende Beispielausgabe zeigt die Struktur des ports-Abschnitts:

spec:
  clusterIP: 172.26.232.107
  externalTrafficPolicy: Cluster
  loadBalancerIP: 21.0.101.77
  ports:
  - name: status-port
    nodePort: 30281
    port: 15021
    protocol: TCP
    targetPort: 15021
  - name: http
    nodePort: 30124
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 31858
    port: 443
    protocol: TCP
    targetPort: 443

Es gibt Ports für HTTP- und HTTPS-Traffic. Sie können einen oder beide dieser Ports über Ihren Load-Balancer verfügbar machen.

Wenn Sie den Ingress-Dienst freigeben, der automatisch in allen Clustern bereitgestellt wird, hat der LoadBalancer-Dienst den Namen istio-ingress und befindet sich im Namespace gke-system. Suchen Sie mit diesem Befehl die zugehörigen Ports:

kubectl --kubeconfig KUBECONFIG -n gke-system get service istio-ingress -oyaml

Der Ingress-Dienst wird mit einer loadBalancerrIP konfiguriert. Dabei handelt es sich um die IP-Adresse, die bei der ersten Clusterkonfiguration im Feld loadBalancer.vips.ingressVIP angegeben wurde. Sie sollten diese VIP verfügbar machen, um den Ingress-Dienst für den externen Load-Balancer verfügbar zu machen.

Backend-Pool erstellen

  1. Rufen Sie Lokaler Traffic > Pools > Poolliste auf.
  2. Klicken Sie auf Erstellen.
  3. Geben Sie einen Namen für den Pool ein.
  4. Wählen Sie tcp als Systemdiagnose aus.
  5. Fügen Sie dem Knotenpool Worker-Knoten hinzu. Wiederholen Sie diese Schritte für jeden Knoten. Sie können Steuerungsebenen und Worker-Knoten hinzufügen, da auf jedem Knoten im Cluster auf Kubernetes-NodePorts zugegriffen werden kann.
    1. Klicken Sie im Bereich Neue Mitglieder auf Knotenliste und wählen Sie dann einen der zuvor erstellten Knoten aus.
    2. Geben Sie im Feld Service-Port den NodePort-Wert für den Dienst ein.
    3. Klicken Sie auf Hinzufügen.

Virtuellen Server erstellen

  1. Gehen Sie zu Lokaler Traffic > Virtuelle Server > Virtuelle Serverliste.
  2. Klicken Sie auf Erstellen.
  3. Geben Sie einen Namen für den virtuellen Server ein.
  4. Legen Sie für Typ Standard fest.
  5. Geben Sie 0.0.0.0/0 in das Feld Quelladresse ein, um Traffic von jedem Ziel zuzulassen.
  6. Geben Sie die Load-Balancer-Dienst-VIP als Zieladresse ein.
  7. Geben Sie den für den Load-Balancer-Dienst freigegebenen Port als Service Port an.
  8. Wählen Sie im Feld Source Address Translation die Option Auto Map aus.
  9. Wählen Sie unter Default Pool (Standardpool) den zuvor erstellten Drop-down-Pool aus.
  10. Klicken Sie auf Fertig.