1. Einführung
Willkommen beim Codelab zu erweiterten Load-Balancing-Optimierungen.
In diesem Codelab erfahren Sie, wie Sie erweiterte Load-Balancing-Optionen für den globalen externen Application Load Balancer konfigurieren. Bevor Sie beginnen, sollten Sie sich das Dokument zum Cloud-Load-Balancing ansehen ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

Abbildung 1. Der Workflow für die Auswahl eines Zielendpunkts mit dem globalen externen Application Load Balancer.
Topologie und Anwendungsfälle für Codelab

Abbildung 2. Routing-Topologie des HTTP-Load-Balancers
In diesem Codelab richten Sie zwei verwaltete Instanzgruppen ein. Sie erstellen einen globalen externen HTTPS-Load-Balancer. Der Load Balancer nutzt mehrere Funktionen aus der Liste der erweiterten Funktionen, die der Envoy-basierte Load Balancer unterstützt. Nach der Bereitstellung generieren Sie eine simulierte Last und prüfen, ob die von Ihnen festgelegten Konfigurationen ordnungsgemäß funktionieren.
Lerninhalte
- Hier erfahren Sie, wie Sie ServiceLbPolicy konfigurieren, um Ihren Load-Balancer zu optimieren.
Voraussetzungen
- Kenntnisse im Bereich externes HTTPS-Load-Balancing. Die erste Hälfte dieses Codelabs ähnelt dem Codelab „Externer HTTP LB mit Advanced Traffic Management (Envoy)“ (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Wir empfehlen, zuerst diesen Kurs zu absolvieren.
2. Hinweis
Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
APIs aktivieren
Alle erforderlichen Dienste aktivieren
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3. VPC‑Netzwerk erstellen
VPC-Netzwerk erstellen
Über Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
VPC-Firewallregeln erstellen
Nachdem Sie das VPC-Netzwerk erstellt haben, erstellen Sie eine Firewallregel. Die Firewallregel wird verwendet, um allen IP-Adressen den Zugriff auf die externe IP-Adresse der Website der Testanwendung an Port 80 für HTTP-Traffic zu ermöglichen.
Über Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
Ausgabe
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
In diesem Codelab werden wir die Integrität der VMs optimieren. Daher erstellen wir auch Firewallregeln, um SSH zuzulassen.
Über Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
Ausgabe
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. Verwaltete Instanzgruppen einrichten
Sie müssen verwaltete Instanzgruppen einrichten, die die Muster für Backend-Ressourcen enthalten, die vom HTTP Load Balancer verwendet werden. Zuerst erstellen wir Instanzvorlagen, in denen die Konfiguration für VMs definiert wird, die für jede Region erstellt werden sollen. Als Nächstes erstellen wir für jedes Backend in jeder Region eine verwaltete Instanzgruppe, die auf eine Instanzvorlage verweist.
Verwaltete Instanzgruppen können zonal oder regional sein. In dieser Lab-Übung erstellen wir zonale verwaltete Instanzgruppen.
In diesem Abschnitt sehen Sie ein vorab erstelltes Startskript, auf das beim Erstellen der Instanz verwiesen wird. Dieses Startscript installiert und aktiviert Webserverfunktionen, die wir zum Simulieren einer Webanwendung verwenden. Sie können sich das Skript ansehen.
Instanzvorlagen erstellen
Als Erstes erstellen Sie eine Instanzvorlage.
Über Cloud Shell
gcloud compute instance-templates create test-template \
--network=httplbs \
--tags=allow-ssh,http-server \
--image-family=debian-9 \
--image-project=debian-cloud \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
Ausgabe
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Mit dem folgenden gcloud-Befehl können Sie prüfen, ob die Instanzvorlagen erfolgreich erstellt wurden:
Über Cloud Shell
gcloud compute instance-templates list
Ausgabe
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Instanzgruppen erstellen
Als Nächstes müssen wir eine verwaltete Instanzgruppe aus den zuvor erstellten Instanzvorlagen erstellen.
Über Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
Über Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
Mit dem folgenden gcloud-Befehl können wir prüfen, ob unsere Instanzgruppen erfolgreich erstellt wurden:
Über Cloud Shell
gcloud compute instance-groups list
Ausgabe
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
Webserver-Funktionalität prüfen
Jede Instanz ist so konfiguriert, dass ein Apache-Webserver mit einem einfachen PHP-Script ausgeführt wird, das etwa Folgendes rendert:
Seite bereitgestellt von: us-east1-a-mig-ww2h
Damit Ihre Webserver ordnungsgemäß funktionieren, rufen Sie „Compute Engine“ –> „VM-Instanzen“ auf. Prüfen Sie, ob Ihre neuen Instanzen (z.B. us-east1-a-mig-xxx) gemäß ihren Instanzgruppendefinitionen erstellt wurden.
Stellen Sie nun eine Webanfrage in Ihrem Browser, um sicherzustellen, dass der Webserver ausgeführt wird. Das Starten kann eine Minute dauern. Wählen Sie auf der Seite „VM-Instanzen“ unter „Compute Engine“ eine von Ihrer Instanzgruppe erstellte Instanz aus und klicken Sie auf ihre externe (öffentliche) IP-Adresse.
Alternativ können Sie in Ihrem Browser http://<IP_Address> aufrufen.
5. Load Balancer einrichten
Systemdiagnose erstellen
Zuerst müssen wir eine grundlegende Systemdiagnose erstellen, um sicherzustellen, dass unsere Dienste ordnungsgemäß ausgeführt werden. Wir erstellen eine einfache Systemdiagnose. Es sind viele weitere erweiterte Anpassungen möglich.
Über Cloud Shell
gcloud compute health-checks create http http-basic-check \
--port 80
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
Externe IP-Adresse reservieren
Für diesen Schritt müssen Sie eine global verfügbare statische IP-Adresse reservieren, die später an den Load Balancer angehängt wird.
Über Cloud Shell
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
Notieren Sie sich die reservierte IP-Adresse.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
Backend-Dienste erstellen
Jetzt müssen wir einen Back-End-Dienst für die zuvor erstellten verwalteten Instanzgruppen erstellen.
Über Cloud Shell
gcloud compute backend-services create east-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
MIGs zu Backend-Diensten hinzufügen
Nachdem wir die Backend-Dienste erstellt haben, müssen wir jeder Backend-Dienst die zuvor erstellten verwalteten Instanzgruppen hinzufügen.
Über Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
Über Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
Mit dem folgenden Befehl können Sie prüfen, ob die Back-Ends hinzugefügt wurden.
Über Cloud Shell
gcloud compute backend-services list
Ausgabe
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
URL-Zuordnung erstellen
Jetzt erstellen wir eine URL-Zuordnung.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
HTTP-Frontend erstellen
Der letzte Schritt beim Erstellen des Load-Balancers ist das Erstellen des Frontends. Dadurch wird die IP-Adresse, die Sie zuvor reserviert haben, der von Ihnen erstellten URL-Zuordnung des Load-Balancers zugeordnet.
Über Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
Als Nächstes müssen Sie eine globale Weiterleitungsregel erstellen, mit der die zuvor reservierte IP-Adresse dem HTTP-Proxy zugeordnet wird.
Über Cloud Shell
gcloud compute forwarding-rules create http-content-rule \
--load-balancing-scheme EXTERNAL_MANAGED \
--address=lb-ipv4-2 \
--global \
--target-http-proxy=http-lb-proxy-adv \
--ports=80
An diesem Punkt können Sie überprüfen, ob der Load-Balancer mit der zuvor notierten IP-Adresse funktioniert.
6. Prüfen, ob der Load Balancer funktioniert
Um zu prüfen, ob die Load-Balancing-Funktion funktioniert, müssen Sie eine gewisse Last generieren. Dazu erstellen wir eine neue VM, um die Last zu simulieren.
„Siege-vm“ erstellen
Jetzt erstellen Sie die siege-VM, mit der Sie die Last generieren.
Über Cloud Shell
gcloud compute instances create siege-vm \
--network=httplbs \
--zone=us-east1-a \
--machine-type=e2-medium \
--tags=allow-ssh,http-server \
--metadata=startup-script='sudo apt-get -y install siege'
Ausgabe
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
Als Nächstes können Sie eine SSH-Verbindung zur erstellten VM herstellen. Klicken Sie nach der Erstellung auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.
Führen Sie nach der Verbindung den folgenden Befehl aus, um Last zu generieren. Verwenden Sie die IP-Adresse, die Sie zuvor für den externen HTTP-Load-Balancer reserviert haben.
Über Cloud Shell
siege -c 20 http://$lb-ipv4-2
Ausgabe
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Lastverteilung prüfen
Da Siege nun ausgeführt wird, ist es an der Zeit, zu prüfen, ob der Traffic gleichmäßig auf die beiden verwalteten Instanzgruppen verteilt wird.
Belagerung beenden
Nachdem Sie nachgewiesen haben, dass die erweiterte Traffic-Aufteilung funktioniert, ist es an der Zeit, die Belagerung zu beenden. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie STRG+C, um den laufenden „siege“-Prozess zu beenden.
7. Richtlinie für Dienst-LB konfigurieren
Richtlinie für Dienst-LB erstellen
Nachdem die Grundeinstellung vorgenommen wurde, erstellen wir eine Service-LB-Richtlinie und probieren die erweiterten Funktionen aus. Als Beispiel konfigurieren wir den Dienst so, dass er einige erweiterte Load-Balancing-Einstellungen verwendet. In diesem Beispiel erstellen wir nur eine Richtlinie, um das Feature zum automatischen Entladen von Kapazitäten zu nutzen. Sie können aber gerne andere Funktionen ausprobieren.
Über Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
Mit dem folgenden gcloud-Befehl können wir prüfen, ob die Richtlinie erfolgreich erstellt wurde:
Über Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Ausgabe
NAME http-policy
Richtlinie für Dienst-LB an Back-End-Dienst anhängen
Wir hängen die neue Richtlinie jetzt an den oben genannten vorhandenen Back-End-Dienst an.
Über Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. Backend-Zustand optimieren
An diesem Punkt wurde die neue Richtlinie für den Lastenausgleich des Dienstes auf Ihren Backend-Dienst angewendet. Sie können also technisch gesehen direkt zur Bereinigung springen. Im Rahmen des Codelabs werden wir aber auch einige zusätzliche Produktionsanpassungen vornehmen, um Ihnen zu zeigen, wie die neue Richtlinie funktioniert.
Durch den automatischen Kapazitätsausgleich wird eine Backend-MIG automatisch aus dem Load Balancer entfernt, wenn die Gesamtzahl der fehlerfreien Backends unter einen bestimmten Schwellenwert (25%) fällt. Um diese Funktion zu testen, stellen wir eine SSH-Verbindung zu den VMs in us-east1-b-mig her und machen sie fehlerhaft. Bei einem Schwellenwert von 25% müssen Sie eine SSH-Verbindung zu vier der VMs herstellen und den Apache-Server herunterfahren.
Wählen Sie dazu vier VMs aus und stellen Sie eine SSH-Verbindung her, indem Sie auf „SSH“ klicken, um ein Terminal zu starten und eine Verbindung herzustellen. Führen Sie dann den folgenden Befehl aus.
sudo apachectl stop
An diesem Punkt wird die Funktion zum automatischen Kapazitätsabbau ausgelöst und us-east1-b-mig erhält keine neuen Anfragen mehr.
9. Prüfen, ob die Funktion „Automatischer Kapazitätsverbrauch“ funktioniert
Belagerung neu starten
Zur Überprüfung der neuen Funktion verwenden wir die Siege-VM wieder. Stellen Sie eine SSH-Verbindung zur VM her, die Sie im vorherigen Schritt erstellt haben. Klicken Sie nach der Erstellung auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.
Führen Sie nach der Verbindung den folgenden Befehl aus, um Last zu generieren. Verwenden Sie die IP-Adresse, die Sie zuvor für den externen HTTP-Load-Balancer reserviert haben.
Über Cloud Shell
siege -c 20 http://$lb-ipv4-2
Ausgabe
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
An diesem Punkt werden alle Anfragen an us-east1-a-mig gesendet.
Belagerung beenden
Nachdem Sie nachgewiesen haben, dass die erweiterte Traffic-Aufteilung funktioniert, ist es an der Zeit, die Belagerung zu beenden. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie STRG+C, um den laufenden „siege“-Prozess zu beenden.
10. Bereinigungsschritte
Nachdem wir die Lab-Umgebung verwendet haben, ist es an der Zeit, sie abzubauen. Führen Sie die folgenden Befehle aus, um die Testumgebung zu löschen.
Über Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs.
Behandelte Themen
- Externen Application Load Balancer mit einer Load-Balancing-Richtlinie für Dienste erstellen.
- Konfigurieren Sie Ihren Backend-Dienst mit der Funktion für den automatischen Kapazitätsausgleich.
Weiteres Vorgehen
- Weitere Funktionen der Dienst-Load-Balancing-Richtlinie ausprobieren