1. Einführung
Willkommen im 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 zum Auswählen eines Zielendpunkts mit dem globalen externen Application Load Balancer.
Codelab-Topologie und Anwendungsfälle
Abbildung 2. Routingtopologie 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 Features 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.
Aufgaben in diesem Lab
- So konfigurieren Sie die ServiceLbPolicy, um den Load Balancer zu optimieren.
Voraussetzungen
- Kenntnisse in externem HTTPS-Load Balancing Die erste Hälfte dieses Codelabs ähnelt dem Codelab zum externen HTTPs-Load Balancer mit erweiterter Trafficverwaltung (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Wir empfehlen, sich zuerst damit vertraut zu machen.
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 die VPC erstellt haben, erstellen Sie jetzt eine Firewallregel. Die Firewallregel wird verwendet, um allen IP-Adressen den Zugriff auf die externe IP-Adresse der Website der Testanwendung über 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 optimieren wir den Status der VMs. 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 Backendressourcen enthalten, die vom HTTP-Load Balancer verwendet werden. Zuerst erstellen wir Instanzvorlagen, in denen die Konfiguration der VMs definiert wird, die für die einzelnen Regionen erstellt werden sollen. Als Nächstes erstellen wir für ein 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 bei der Instanzerstellung verwiesen wird. Dieses Startskript installiert und aktiviert Webserverfunktionen, mit denen wir eine Webanwendung simulieren. Sie können sich das Script ansehen.
Instanzvorlagen erstellen
Der erste Schritt besteht darin, eine Instanzvorlage zu erstellen.
Ü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
Sie können jetzt mit dem folgenden gcloud-Befehl prüfen, ob unsere 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
Wir müssen jetzt eine verwaltete Instanzgruppe aus den zuvor erstellten Instanzvorlagen erstellen.
Aus 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-Skript ausgeführt wird, das ungefähr so aussieht:
Seite bereitgestellt von: us-east1-a-mig-ww2h
Rufen Sie „Compute Engine“ -> „VM-Instanzen“ auf, um zu prüfen, ob Ihre Webserver ordnungsgemäß funktionieren. Achten Sie darauf, dass Ihre neuen Instanzen (z.B. us-east1-a-mig-xxx) entsprechend ihren Instanzgruppendefinitionen erstellt wurden.
Stellen Sie jetzt eine Webanfrage in Ihrem Browser, um sicherzustellen, dass der Webserver läuft. Das Starten kann eine Minute dauern. Wählen Sie auf der Seite „VM-Instanzen“ unter „Compute Engine“ eine Instanz aus, die von Ihrer Instanzgruppe erstellt wurde, und klicken Sie auf die externe (öffentliche) IP-Adresse.
Alternativ können Sie auch http://<IP_Address> in Ihrem Browser aufrufen.
5. Load-Balancer einrichten
Systemdiagnose erstellen
Zuerst müssen wir eine grundlegende Systemdiagnose erstellen, um sicherzustellen, dass unsere Dienste ordnungsgemäß funktionieren. Wir erstellen eine einfache Systemdiagnose. Es sind noch viele weitere Anpassungen verfügbar.
Ü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 mit dem Load Balancer verknüpft wird.
Aus 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
Backend-Diensten MIGs hinzufügen
Nachdem wir die Back-End-Dienste erstellt haben, müssen wir jedem Back-End-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
Aus 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 Backends hinzugefügt wurden.
Aus 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 besteht darin, das Frontend zu erstellen. Dadurch wird die zuvor reservierte IP-Adresse der von Ihnen erstellten Load Balancer-URL-Zuordnung 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.
Aus 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 dieser Stelle können Sie prü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 Lastenausgleichsfunktion 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 VM „siege“, mit der Sie die Auslastung generieren.
Aus 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 von Ihnen erstellten VM herstellen. Klicken Sie nach dem Erstellen auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.
Führen Sie nach der Verbindung den folgenden Befehl aus, um eine 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
Jetzt, da Siege ausgeführt wird, ist es an der Zeit zu prüfen, ob der Traffic gleichmäßig auf die beiden verwalteten Instanzgruppen verteilt wird.
Beende die Belagerung
Nachdem Sie gezeigt haben, dass die erweiterte Traffic-Aufteilung funktioniert, ist es an der Zeit, den Belagerungszustand zu beenden. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie Strg + C, um den Dienst zu beenden.
7. Service-LB-Richtlinie konfigurieren
Richtlinie für Dienst-Lastenausgleichsmodul erstellen
Nachdem die grundlegenden Einstellungen vorgenommen wurden, erstellen wir eine Service-LB-Richtlinie und testen die erweiterten Funktionen. Als Beispiel konfigurieren wir den Dienst so, dass einige erweiterte Lastenausgleichseinstellungen verwendet werden. In diesem Beispiel erstellen wir nur eine Richtlinie, um die Funktion zum automatischen Entladen von Kapazitäten zu nutzen. Sie können aber auch 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 unsere Richtlinie erfolgreich erstellt wurde:
Über Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Ausgabe
NAME http-policy
Richtlinie des Dienst-Load-Balancers an Back-End-Dienst anhängen
Wir werden nun die neue Richtlinie an Ihren vorhandenen Backend-Dienst oben anhängen.
Über Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. Backend-Zustand optimieren
Die neue Load Balancing-Richtlinie für Dienste wurde jetzt auf Ihren Back-End-Dienst angewendet. Technisch gesehen können Sie also direkt zur Bereinigung springen. Im Rahmen des Codelabs nehmen wir aber auch einige zusätzliche Produktionsanpassungen vor, um Ihnen zu zeigen, wie die neue Richtlinie funktioniert.
Mit der Funktion zum automatischen Kapazitätsausgleich wird eine Backend-MIG automatisch aus dem Load Balancer entfernt, wenn die Gesamtzahl der fehlerfreien Backends unter einen bestimmten Grenzwert (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 Grenzwert von 25% müssen Sie über SSH eine 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. Klicken Sie dazu auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen. Führen Sie dann den folgenden Befehl aus:
sudo apachectl stop
In diesem Fall wird die Funktion zum automatischen Kapazitätsabbau ausgelöst und es werden keine neuen Anfragen mehr an „us-east1-b-mig“ gesendet.
9. Prüfen, ob die Funktion zum automatischen Kapazitätsausgleich funktioniert
Siege neu starten
Um die neue Funktion zu überprüfen, verwenden wir die VM „siege“ noch einmal. Stellen Sie eine SSH-Verbindung zur VM her, die Sie im vorherigen Schritt erstellt haben. Klicken Sie anschließend auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.
Führen Sie nach der Verbindung den folgenden Befehl aus, um eine 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
Sie sehen jetzt, dass alle Anfragen an us-east1-a-mig gesendet werden.
Beende die Belagerung
Nachdem Sie nun gezeigt haben, dass die erweiterte Trafficaufteilung funktioniert, ist es an der Zeit, die Siege zu stoppen. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie Strg + C, um den Dienst zu beenden.
10. Schritte zur Bereinigung
Da wir die Lab-Umgebung nun fertiggestellt haben, ist es an der Zeit, sie zu entfernen. Führen Sie die folgenden Befehle aus, um die Testumgebung zu löschen.
Aus 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 Dienst-LB-Richtlinie erstellen
- Konfigurieren Sie Ihren Backend-Dienst mit der Funktion „Automatischer Kapazitätsausgleich“.
Weiteres Vorgehen
- Probieren Sie andere Funktionen der Service Load Balancing-Richtlinie aus.