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 für Clusterknoten für Traffic der Steuerungsebene und Datenebene bereitstellt, konfigurieren Sie beim manuellen Load-Balancing Ihre eigenen Load-Balancing-Lösungen für Traffic der Steuerungsebene und der 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-Balancings 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, erstellen Sie mit bmctl
eine Clusterkonfigurationsdatei. Bearbeiten Sie diese Datei, um das manuelle Load-Balancing im Cluster zu aktivieren:
- Setzen Sie das Feld
loadBalancer.mode
aufmanual
. - Geben Sie im Feld
loadBalancer.vips.controlPlaneVIP
die VIP an, die Sie für den Load-Balancer konfiguriert haben. - 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 zur Unterstützung von LoadBalancer-Diensten von Kubernetes konfigurieren. Im manuellen Load-Balancing-Modus stellt Google Distributed Cloud Load-Balancer nicht automatisch bereit. Daher funktionieren LoadBalancer-Dienste nur, wenn Sie Load-Balancer bereitstellen und konfigurieren, die auf die Dienste verweisen.
Darüber hinaus stellt Google Distributed Cloud automatisch einen Dienst für eingehenden Traffic in allen Nutzerclustern mithilfe eines LoadBalancer-Dienstes 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:
- Klicken Sie auf System > Nutzer > Partitionsliste.
- Klicken Sie auf Erstellen.
- Geben Sie einen Namen für die Partition ein.
- 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:
- Gehen Sie zu Lokaler Traffic > Monitore.
- Klicken Sie auf Erstellen.
- Geben Sie einen Namen für den Monitor ein, z. B. https_readyz.
- Legen Sie für Typ HTTPS fest.
- Geben Sie für Send String (String senden)
GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close
ein. - Geben Sie für Receive String den Wert
HTTP/1.1 200
ein. - 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.
- Wechseln Sie zu Lokaler Traffic > Knoten > Knotenliste.
- Klicken Sie auf Erstellen.
- Geben Sie einen Namen für den Knoten ein.
- Geben Sie die IP-Adresse des Knotens in das Feld "Adresse" ein.
- Klicken Sie auf Fertig.
Backend-Pool erstellen
Erstellen Sie einen Pool für die Knoten der Steuerungsebene:
- Gehen Sie zu Lokaler Traffic > Pools > Poolliste.
- Klicken Sie auf Erstellen.
- Wählen Sie im Drop-down-Menü Konfiguration die Option Erweitert aus.
- Geben Sie einen Namen für den Pool ein.
- Wählen Sie die zuvor erstellte Systemdiagnose aus.
- 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.
- 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:
- Klicken Sie im Abschnitt Neue Mitglieder auf Knotenliste und wählen Sie dann den zuvor erstellten Knoten der Steuerungsebene aus.
- Geben Sie im Feld Service Port den Wert 6444 ein.
- Klicken Sie auf Hinzufügen.
Virtuellen Server erstellen
Erstellen Sie einen virtuellen Server für die Steuerungsebene:
- Gehen Sie zu Lokaler Traffic > Virtuelle Server > Virtuelle Serverliste.
- Klicken Sie auf Erstellen.
- Geben Sie einen Namen für den virtuellen Server ein.
- Legen Sie für Typ Standard fest.
- Geben Sie 0.0.0.0/0 in das Feld Quelladresse ein, um Traffic von jedem Ziel zuzulassen.
- Geben Sie als VIP die Zielebene als Zieladresse ein.
- 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. - Wählen Sie im Feld Source Address Translation die Option Auto Map aus.
- Wählen Sie unter Default Pool (Standardpool) den zuvor erstellten Drop-down-Pool aus.
- Klicken Sie auf Fertig.
Unterstützung für LoadBalancer-Dienste konfigurieren
Im manuellen Load-Balancing-Modus stellt Google Distributed Cloud nicht automatisch Load-Balancer 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 virtuelle IP-Adresse, die Sie über den Load-Balancer freigeben möchten, den Port, über den der Load-Balancer verfügbar gemacht werden soll, und den NodePort kennen, 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 der 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 für den Port des Dienstes bereitgestellten nodePort an. Diesen nodePort konfigurieren Sie, auf den das Load-Balancer-Back-End verweist. Die folgende Beispielausgabe zeigt die Struktur des Abschnitts ports
:
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
- Rufen Sie Lokaler Traffic > Pools > Poolliste auf.
- Klicken Sie auf Erstellen.
- Geben Sie einen Namen für den Pool ein.
- Wählen Sie tcp als Systemdiagnose aus.
- 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.
- Klicken Sie im Bereich Neue Mitglieder auf Knotenliste und wählen Sie dann einen der zuvor erstellten Knoten aus.
- Geben Sie im Feld Service-Port den NodePort-Wert für den Dienst ein.
- Klicken Sie auf Hinzufügen.
Virtuellen Server erstellen
- Gehen Sie zu Lokaler Traffic > Virtuelle Server > Virtuelle Serverliste.
- Klicken Sie auf Erstellen.
- Geben Sie einen Namen für den virtuellen Server ein.
- Legen Sie für Typ Standard fest.
- Geben Sie 0.0.0.0/0 in das Feld Quelladresse ein, um Traffic von jedem Ziel zuzulassen.
- Geben Sie die Load-Balancer-Dienst-VIP als Zieladresse ein.
- Geben Sie den für den Load-Balancer-Dienst freigegebenen Port als Service Port an.
- Wählen Sie im Feld Source Address Translation die Option Auto Map aus.
- Wählen Sie unter Default Pool (Standardpool) den zuvor erstellten Drop-down-Pool aus.
- Klicken Sie auf Fertig.