Dieser Leitfaden enthält eine Anleitung zum Erstellen der Konfiguration eines externen Passthrough-Network-Load-Balancers mit Zielpool-Back-Ends. Im zugehörigen Beispiel wird davon ausgegangen, dass mehrere Webserver auf Compute Engine-Instanzen vorhanden sind, auf die der Traffic verteilt werden kann. In diesem Szenario wird ein Layer-4-Load-Balancing konfiguriert, um HTTP-Traffic an fehlerfreie Instanzen zu senden. Die Konfiguration grundlegender HTTP-Systemdiagnosen stellt dabei sicher, dass Traffic nur an fehlerfreie Instanzen gesendet wird.
In diesem Beispiel wird ein Load-Balancing für HTTP-Traffic festgelegt. Sie können jedoch zielpoolbasierte externe Passthrough-Network-Load-Balancer verwenden, um Load-Balancing für TCP-, UDP- und SSL-Traffic auszuführen. Lesen Sie vorher den Artikel Übersicht über externen Passthrough-Network-Load-Balancer, um konzeptionelle Informationen zu erhalten.
Vorbereitung
Installieren Sie die Google Cloud CLI. Eine vollständige Übersicht über das Tool finden Sie unter Überblick über das gcloud-Befehlszeilentool. Befehle für das Load-Balancing finden Sie in der Befehlsgruppe gcloud compute
.
Ausführliche Hilfe zu jedem gcloud
-Befehl erhalten Sie auch mit dem Flag --help
:
gcloud compute http-health-checks create --help
Wenn Sie die Google Cloud CLI noch nicht ausgeführt haben, führen Sie zuerst gcloud init
zur Authentifizierung aus.
Erstellen Sie außerdem für den Load-Balancer eine statische externe IP-Adresse. Wenn Sie ein von Compute Engine bereitgestelltes Image verwenden, werden die VM-Instanzen automatisch für diese IP-Adresse konfiguriert. Wenn Sie ein anderes Image verwenden, müssen Sie diese Adresse als Alias auf "eth0" oder als Loopback auf den einzelnen Instanzen konfigurieren.
In dieser Anleitung wird davon ausgegangen, dass Sie mit bash vertraut sind.
Compute Engine-VM-Instanzen konfigurieren
Für dieses Load-Balancing-Szenario erstellen Sie drei Compute Engine-VM-Instanzen und installieren darauf Apache. Sie fügen außerdem eine Firewallregel hinzu, die HTTP-Traffic zu den Instanzen zulässt.
Instanzen, die als Backend-VMs für externe Passthrough-Network-Load-Balancer verwendet werden, müssen die entsprechende Linux-Gastumgebung, Windows-Gastumgebung oder andere Prozesse ausführen, die gleichwertige Funktionen bereitstellen.
Backend-Instanzen einrichten
Console
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf Instanz erstellen.
Legen Sie als Name
www1
fest.Legen Sie für Region den Wert us-central1 fest.
Setzen Sie Zone auf us-central1-b.
Unter Bootlaufwerk ist bereits das Standard-Betriebssystem-Image von
Debian GNU/Linux 10 (buster)
ausgewählt.Klicken Sie auf Erweiterte Optionen.
Klicken Sie auf Netzwerk und konfigurieren Sie das folgende Feld:
- Geben Sie bei Netzwerk-Tags den Wert
network-lb-tag
ein.
- Geben Sie bei Netzwerk-Tags den Wert
Klicken Sie auf Verwaltung. Fügen Sie im Feld Startskript das nachfolgende Skript ein.
#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html
- Klicken Sie auf Erstellen.
Erstellen Sie eine Instanz namens
www2
mit den gleichen Einstellungen, aber mit dem folgenden Skript im Feld Automatisierung/Startskript.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html
Erstellen Sie eine Instanz namens
www3
mit den gleichen Einstellungen, aber mit dem folgenden Skript im Feld Automatisierung/Startskript.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html
gcloud
Alle im Folgenden aufgeführten Befehle werden auf dem lokalen System ausgeführt und beziehen sich auf eine Eingabeaufforderung vom Typ bash
.
Zum Aufrufen von Namen, Attributen und Status von Betriebssystem-Images verwenden Sie den Befehl gcloud compute images list
.
Erstellen Sie drei neue VMs in einer bestimmten Zone und legen Sie für alle das gleiche Tag fest. In diesem Beispiel wird die Zone auf us-central1-b gesetzt. Wenn Sie einen Wert für das Feld
tags
festlegen, können Sie auf alle diese Instanzen gleichzeitig verweisen, z. B. mit einer Firewallregel. Mit diesen Befehlen wird außerdem Apache auf den Instanzen installiert und jeder Instanz eine einmalige Homepage zugewiesen.gcloud compute instances create www1 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
gcloud compute instances create www2 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"
gcloud compute instances create www3 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"
API
Instanz www1
in der Zone us-central1-b
mit der Methode instances.insert
erstellen
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances { "canIpForward": false, "deletionProtection": false, "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "www1", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-12-buster-v20220719", "diskType": "projects/[PROJECT_ID]/zones/us-central1-b/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "machineType": "projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2", "metadata": { "items": [ { "key": "startup-script", "value": "sudo apt-get update\nsudo apt-get install apache2 -y\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\necho '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html" } ] }, "name": "www1", "networkInterfaces": [ { "network": "projects/[PROJECT_ID]/global/networks/default", "subnetwork": "projects/[PROJECT_ID]/regions/us-central1/subnetworks/default" } ], "tags": { "items": [ "network-lb-tag" ] } }
Erstellen Sie die Instanzen www2
und www3
mit den gleichen Einstellungen, ersetzen Sie jedoch www1
in den Feldern deviceName
, value
und name
.
Firewallregel erstellen, um externen Traffic zu diesen VM-Instanzen zuzulassen
Console
Rufen Sie in der Google Cloud Console die Seite der Firewall-Richtlinien auf.
Klicken Sie auf Firewallregel erstellen.
Geben Sie für
www-firewall-network-lb
einen Namen ein.Wählen Sie unter Netzwerk das Netzwerk aus, für das die Firewallregel gelten soll (Standard).
Wählen Sie unter Ziele Angegebene Zieltags aus.
Geben Sie im Feld Zieltags
network-lb-tag
ein.Legen Sie unter Quellfilter die Option IPv4-Bereiche fest.
Legen Sie für IPv4-Quellbereiche den Wert
0.0.0.0/0
fest, damit Traffic von allen Quellen zulässig ist.Klicken Sie unter Angegebene Protokolle und Ports das Kästchen TCP an und geben Sie
80
ein.Klicken Sie auf Erstellen. Es kann einen Moment dauern, bis die neue Firewallregel in der Console angezeigt wird. Klicken Sie gegebenenfalls auf Aktualisieren, damit die Regel aufgeführt wird.
gcloud
gcloud compute firewall-rules create www-firewall-network-lb \ --target-tags network-lb-tag --allow tcp:80
API
Firewallregel zum Zulassen des gesamten Traffics im Subnetz mit der **Methode** firewalls.insert
erstellen
POST https://compute.googleapis.com/compute/projects/[PROJECT_ID]/global/firewalls { "name": "www-firewall-network-lb", "direction": "INGRESS", "priority": 1000, "targetTags": [ "network-lb-tag" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] } ], "sourceRanges": [ "0.0.0.0/0" ] }
Externe IP-Adressen der Instanzen abrufen und prüfen, ob sie ausgeführt werden
Console
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Rufen Sie die Adressen für die Instanzen in der Spalte Externe IP auf.
Prüfen Sie, ob die Instanzen ausgeführt werden. Dies ist am grünen Häkchen links neben dem Instanznamen zu erkennen. Wenn kein grünes Häkchen angezeigt wird, finden Sie entsprechende Informationen unter Allgemeine Fehlerbehebung.
gcloud
Listen Sie die Instanzen auf, um die IP-Adressen in der Spalte
EXTERNAL_IP
darzustellen.gcloud compute instances list
Prüfen Sie, ob alle Instanzen ausgeführt werden.
Führen Sie in der Befehlszeile den Befehl
curl
mit der externen IP-Adresse der einzelnen Instanzen aus, um festzustellen, ob die Instanzen antworten.curl http://[IP_ADDRESS]
API
Informationen zur Instanz www1
mit der Methode instances.get
abrufen
Prüfen Sie, ob im Feld status
der Wert RUNNING
angegeben ist, und prüfen Sie im Feld natIP
die externe IP-Adresse.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1 { "kind": "compute#instance", "id": "6734015273571474749", "creationTimestamp": "2018-11-09T11:45:23.487-08:00", "name": "www1", "description": "", "tags": { "items": [ "network-lb-tag" ], "fingerprint": "9GVlO4gPawg=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.2", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "External NAT", "natIP": "35.192.37.233", "networkTier": "PREMIUM" } ], "fingerprint": "lxD5f5ua_sw=" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks/www1", "deviceName": "www1", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-buster" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ] } ], "metadata": { "kind": "compute#metadata", "fingerprint": "IyHRmHoJx6E=", "items": [ { "key": "startup-script", "value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo service apache2 restart\n echo '\u003c!doctype html\u003e\u003chtml\u003e\u003cbody\u003e\u003ch1\u003ewww1\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e' | tee /var/www/html/index.html" } ] }, "serviceAccounts": [ { "email": "674259759219-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false }, "cpuPlatform": "Intel Haswell", "labelFingerprint": "42WmSpB8rSM=", "startRestricted": false, "deletionProtection": false }
Wiederholen Sie diesen API-Aufruf für www2
und www3
.
Load-Balancing-Dienst konfigurieren
Richten Sie als Nächstes den Load-Balancing-Dienst ein.
Durch entsprechende Konfiguration des Load-Balancing-Dienstes erhalten die VM-Instanzen Pakete für die von Ihnen konfigurierte statische externe IP-Adresse. Wenn Sie ein von Compute Engine bereitgestelltes Image verwenden, werden die Instanzen automatisch für diese IP-Adresse konfiguriert. Wenn Sie ein anderes Image verwenden, müssen Sie diese Adresse als Alias auf eth0 oder als Loopback auf den einzelnen Instanzen konfigurieren.
Console
Sie können die Google Cloud Console nicht verwenden, um zielpoolbasierte externe Passthrough-Network-Load-Balancer zu erstellen. Verwenden Sie stattdessen entweder gcloud oder die REST API.
gcloud
Erstellen Sie eine statische externe IP-Adresse für den Load-Balancer.
gcloud compute addresses create network-lb-ip-1 \ --region us-central1
Fügen Sie eine Ressource für die Legacy-Systemdiagnose hinzu.
In diesem Beispiel werden die Standardeinstellungen für die Systemdiagnose verwendet. Sie können diese Einstellungen jederzeit anpassen.
gcloud compute http-health-checks create basic-check
Zielpool hinzufügen
Fügen Sie den Zielpool in der Region hinzu, in der sich die VM-Instanzen befinden. Verwenden Sie für diesen Zielpool die im vorigen Schritt erstellte Systemdiagnose. Für das Funktionieren von Zielpools ist ein Systemdiagnosedienst erforderlich.
gcloud compute target-pools create www-pool \ --region us-central1 --http-health-check basic-check
Fügen Sie die Instanzen dem Zielpool hinzu.
gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3 \ --instances-zone us-central1-b
Instanzen innerhalb eines Zielpools müssen zwar einer Region angehören, können aber über verschiedene Zonen in dieser Region verteilt sein. Beispielsweise kann ein Zielpool Instanzen in Zone
us-central1-f
und Instanzen in Zoneus-central1-b
enthalten, da sich diese in derselben Region (us-central1
) befinden.Weiterleitungsregel hinzufügen
Fügen Sie eine Weiterleitungsregel für einen externen IP-Adressbereich und Portbereich hinzu, die auf den Zielpool verweist. Geben Sie für das Feld
--address
entweder die numerische IP-Adresse oder den vollqualifizierten Namen an.gcloud compute forwarding-rules create www-rule \ --region us-central1 \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool
API
Erstellen Sie eine statische externe IP-Adresse für den Load-Balancer.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID/regions/us-central1/addresses { "name": "network-lb-ip-1" }
Fügen Sie eine Legacy-HTTP-Systemdiagnose hinzu.
In diesem Beispiel werden die Standardeinstellungen für die Systemdiagnose verwendet. Sie können diese Einstellungen jederzeit anpassen.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks { "name": "basic-check" }
Fügen Sie einen Zielpool hinzu.
Fügen Sie den Zielpool in der Region hinzu, in der sich die VM-Instanzen befinden. Verwenden Sie für diesen Zielpool die im vorigen Schritt erstellte Systemdiagnose. Für das Funktionieren von Zielpools ist ein Systemdiagnosedienst erforderlich.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools { "name": "www-pool", "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/basic-check" ] }
Fügen Sie die Instanzen dem Zielpool hinzu.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-pool/addInstance { "instances": [ { "instance": "projects/[PROJECT_ID]/zones/us-central1-b/instances/www1" } ] }
Wiederholen Sie diesen API-Aufruf für die Instanzen
www2
undwww3
.Instanzen innerhalb eines Zielpools müssen zwar einer Region angehören, können aber über verschiedene Zonen in dieser Region verteilt sein. Beispielsweise kann ein Zielpool Instanzen in Zone
us-central1-f
und Instanzen in Zoneus-central1-b
enthalten, da sich diese in derselben Region (us-central1
) befinden.Weiterleitungsregel hinzufügen
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules { "name": "www-rule", "portRange": "80", "loadBalancingScheme": "EXTERNAL", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb" }
Traffic an die Instanzen senden
Nachdem Sie den Load-Balancing-Dienst konfiguriert haben, können Sie Traffic an die Weiterleitungsregel senden und feststellen, wie dieser auf verschiedene Instanzen verteilt wird.
Externe IP-Adresse der Weiterleitungsregel abrufen
Console
- Wechseln Sie in der Google Cloud Console auf der Load-Balancing-Seite Erweitert zum Tab Weiterleitungsregeln.
Zum Tab "Weiterleitungsregeln" - Suchen Sie die vom Load-Balancer verwendete Weiterleitungsregel
www-rule
. - Notieren Sie die in der Spalte IP-Adresse für
www-rule
angegebene externe IP-Adresse.
gcloud
Geben Sie den folgenden Befehl ein, um die externe IP-Adresse der vom Load-Balancer verwendeten Weiterleitungsregel www-rule
aufzurufen:
gcloud compute forwarding-rules describe www-rule --region us-central1
API
Externe IP-Adresse der Weiterleitungsregel www-rule
mit der Methode forwardingRules.get
aufrufen
Suchen Sie in der Ausgabe nach dem Feld IPAddress
.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule { "kind": "compute#forwardingRule", "id": "5133886346582800002", "creationTimestamp": "2018-11-09T14:21:33.574-08:00", "name": "www-rule", "description": "", "region": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1", "IPAddress": "35.232.228.9", "IPProtocol": "TCP", "portRange": "80-80", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb", "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule", "loadBalancingScheme": "EXTERNAL", "networkTier": "PREMIUM" }
ICMP wird für Backend-Instanzen nicht unterstützt
Externe Passthrough-Network-Load-Balancer liefern keine ICMP-Pakete an Backend-Instanzen. Wenn Sie ein ICMP-Paket senden, z. B. mit ping
oder traceroute
, stammt die Antwort nicht von den Backend-Instanzen des Load-Balancers.
Die Google Cloud-Infrastruktur kann eine ICMP-Antwort senden, auch wenn Sie Firewallregeln verwenden, die ICMP-Traffic auf den Back-End-Instanzen des Load-Balancers verbieten. Dieses Verhalten kann nicht geändert werden.
Auf die externe IP-Adresse mit dem Befehl curl
zugreifen
Die Antwort des Befehls curl
wechselt nach dem Zufallsprinzip zwischen den drei Instanzen.
Wenn anfangs keine Antwort zurückgegeben wird, müssen Sie vor einem erneuten Versuch unter Umständen etwa 30 Sekunden warten, bis die Konfiguration vollständig geladen ist und die Instanzen als fehlerfrei markiert werden:
$ while true; do curl -m1 IP_ADDRESS; done
Nächste Schritte
- Informationen zur Funktionsweise der externen Passthrough-Network-Load-Balancer mit Zielpools finden Sie in der Übersicht über den zielpoolbasierten externen Passthrough-Network-Load-Balancer.
- To learn how external passthrough Network Load Balancers work with regional backend services instead of target pools, see the following:
- Informationen zum Konfigurieren des erweiterten Netzwerk-DDoS-Schutzes für einen externen Passthrough-Network-Load-Balancer mithilfe von Google Cloud Armor finden Sie unter Erweiterten Netzwerk-DDoS-Schutz konfigurieren.
- Informationen zu Problemen und Problemumgehungen bei der Verwendung eines externen Passthrough-Network-Load-Balancers für UDP-Traffic finden Sie unter UDP mit externen Passthrough-Network-Load-Balancern verwenden.
- Informationen zum Löschen von Ressourcen, damit Ihnen diese nicht in Rechnung gestellt werden, finden Sie unter Load-Balancing-Einrichtung bereinigen.