Diese Anleitung vermittelt anhand eines Beispiels die Grundlagen der internen Passthrough-Netzwerk-Load-Balancer von Google Cloud. Bevor Sie sie durchgehen, machen Sie sich mit folgenden Themen vertraut:
- Konzepte für internen Passthrough-Network Load Balancer
- Funktionsweise von internen Passthrough-Netzwerk-Load-Balancern
- Übersicht über Firewallregeln
- Systemdiagnosekonzepte
Eine detaillierte Anleitung dazu finden Sie direkt in der Google Cloud Console. Klicken Sie dazu einfach auf Anleitung:
Berechtigungen
Damit Sie dieser Anleitung folgen können, müssen Sie Instanzen erstellen und ein Netzwerk in einem Projekt ändern können. Sie sollten entweder Inhaber oder Bearbeiter des Projekts sein oder über alle folgenden IAM-Rollen in Compute Engine verfügen:
Aufgabe | Erforderliche Rolle |
---|---|
Netzwerke, Subnetze und Load-Balancer-Komponenten erstellen | Netzwerkadministrator |
Firewallregeln hinzufügen und löschen | Sicherheitsadministrator |
Instanzen erstellen | Compute-Instanzadministrator |
Weitere Informationen finden Sie in folgenden Leitfäden:
Load-Balancer mit Single-Stack-Subnetzen einrichten
In dieser Anleitung erfahren Sie, wie Sie einen internen Passthrough-Netzwerk-Load-Balancer konfigurieren und testen. Die Schritte in diesem Abschnitt zeigen, wie Sie folgende Elemente konfigurieren:
- Ein Beispiel, das ein VPC-Netzwerk im benutzerdefinierten Modus namens
lb-network
verwendet. - Ein Single-Stack-Subnetz (
stack-type
ist aufIPv4
gesetzt), das für IPv4-Traffic erforderlich ist. Beim Erstellen eines Single-Stack-Subnetzes in einem VPC-Netzwerk im benutzerdefinierten Modus wählen Sie einen IPv4-Subnetzbereich für das Subnetz aus. - Firewall-Regeln, die eingehende Verbindung zu Backend-VMs ermöglichen
- Die Back-End-Instanzgruppe, die sich in diesem Beispiel in der folgenden Region und im folgenden Subnetz befindet:
- Region:
us-west1
- Subnetz:
lb-subnet
, mit primärem IPv4-Adressbereich10.1.2.0/24
.
- Region:
- Vier Backend-VMs: zwei VMs in einer nicht verwalteten Instanzgruppe in Zone
us-west1-a
und zwei VMs in einer nicht verwalteten Instanzgruppe in Zoneus-west1-c
. Zur Veranschaulichung des globalen Zugriffs wird in diesem Beispiel eine zweite Testclient-VM in einer anderen Region und einem anderen Subnetz erstellt:- Region:
europe-west1
- Subnetz:
europe-subnet
, mit primärem IP-Adressbereich10.3.4.0/24
- Region:
- Eine Client-VM zum Testen von Verbindungen.
- Die folgenden Komponenten eines internen Passthrough-Netzwerk-Load-Balancers:
- Eine Systemdiagnose für den Backend-Dienst.
- Einen internen Backend-Dienst in der Region
us-west1
, um die Verteilung von Verbindungen zu den zwei zonalen Instanzgruppen zu verwalten. - Eine interne Weiterleitungsregel und eine interne IP-Adresse für das Frontend des Load-Balancers.
Die Architektur dieses Beispiels sieht so aus:
Netzwerk, Region und Subnetz konfigurieren
Gehen Sie so vor, um das Netzwerk und das Subnetz zu erstellen:
Console
Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.
Klicken Sie auf VPC-Netzwerk erstellen.
Geben Sie für Name
lb-network
ein.Führen Sie im Abschnitt Subnetze folgende Schritte aus:
- Legen Sie Modus für Subnetzerstellung auf Benutzerdefiniert fest.
- Geben Sie im Bereich Neues Subnetz folgende Informationen ein:
- Name:
lb-subnet
- Region:
us-west1
- IP-Stack-Typ: IPv4 (Einzel-Stack)
- IP-Adressbereich:
10.1.2.0/24
- Name:
- Klicken Sie auf Fertig.
- Klicken Sie auf Subnetz hinzufügen und geben Sie die folgenden Informationen ein:
- Name:
europe-subnet
- Region:
europe-west1
- IP-Stack-Typ: IPv4 (Einzel-Stack)
- IP-Adressbereich:
10.3.4.0/24
- Name:
- Klicken Sie auf Fertig.
Klicken Sie auf Erstellen.
gcloud
Erstellen Sie das benutzerdefinierte VPC-Netzwerk:
gcloud compute networks create lb-network --subnet-mode=custom
Erstellen Sie im Netzwerk
lb-network
ein Subnetz für Back-Ends in der Regionus-west1
.gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
Erstellen Sie im Netzwerk
lb-network
ein weiteres Subnetz zum Testen des globalen Zugriffs in der Regioneurope-west1
:gcloud compute networks subnets create europe-subnet \ --network=lb-network \ --range=10.3.4.0/24 \ --region=europe-west1
API
Stellen Sie eine POST
-Anfrage an die Methode networks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "routingConfig": { "routingMode": "REGIONAL" }, "name": "lb-network", "autoCreateSubnetworks": false }
Stellen Sie zwei POST
-Anfragen an die Methode subnetworks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "privateIpGoogleAccess": false }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks { "name": "europe-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.3.4.0/24", "privateIpGoogleAccess": false }
Firewallregeln konfigurieren
In diesem Beispiel werden die folgenden Firewallregeln verwendet:
fw-allow-lb-access
: Eine Eingangsregel, die für alle Ziele im VPC-Netzwerk gilt und Traffic von Quellen in den Bereichen10.1.2.0/24
und10.3.4.0/24
zulässt. Diese Regel lässt eingehenden Traffic von jedem Client zu, der sich in einem der beiden Subnetze befindet. Sie können damit später den globalen Zugriff konfigurieren und testen.fw-allow-ssh
: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und eingehende SSH-Verbindungen an TCP-Port 22 von jeder Adresse aus ermöglicht. Sie können einen restriktiveren IP-Quellbereich für diese Regel auswählen. Geben Sie dazu beispielsweise nur die IP-Bereiche des Systems an, aus dem Sie SSH-Sitzungen initiieren. In diesem Beispiel wird das Ziel-Tagallow-ssh
verwendet, um die VMs zu identifizieren, auf die sie angewendet werden soll.fw-allow-health-check
: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und Traffic von den Google Cloud-Systemen für Systemdiagnosen zulässt (130.211.0.0/22
und35.191.0.0/16
). In diesem Beispiel wird das Ziel-Tagallow-health-check
verwendet, um die Instanzen zu identifizieren, auf die sie angewendet werden soll.
Ohne diese Firewallregeln blockiert die Standardregel zum Ablehnen von eingehendem Traffic den eingehenden Traffic zu den Back-End-Instanzen.
Console
Rufen Sie in der Google Cloud Console die Seite der Firewall-Richtlinien auf.
Klicken Sie auf Firewallregel erstellen und geben Sie die folgenden Informationen ein, um Subnetztraffic zuzulassen:
- Name:
fw-allow-lb-access
- Netzwerk:
lb-network
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: All instances in the network.
- Quellfilter: IPv4-Bereiche.
- IPv4-Quellbereiche:
10.1.2.0/24
- Protokolle und Ports: Alle zulassen
- Name:
Klicken Sie auf Erstellen.
Klicken Sie noch einmal auf Firewallregel erstellen und geben Sie die folgenden Informationen ein, um eingehende SSH-Verbindungen zuzulassen:
- Name:
fw-allow-ssh
- Netzwerk:
lb-network
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: Specified target tags
- Zieltags:
allow-ssh
- Quellfilter: IPv4-Bereiche.
- IPv4-Quellbereiche:
0.0.0.0/0
- Protokolle und Ports: Wählen Sie Angegebene Protokolle und Ports aus, klicken Sie das Kästchen TCP an und geben Sie
22
in Ports ein:
- Name:
Klicken Sie auf Erstellen.
Klicken Sie ein drittes Mal auf Firewallregel erstellen und geben Sie die folgenden Informationen ein, um Google Cloud-Systemdiagnosen zuzulassen:
- Name:
fw-allow-health-check
- Netzwerk:
lb-network
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: Specified target tags
- Zieltags:
allow-health-check
- Quellfilter: IPv4-Bereiche.
- IPv4-Quellbereiche:
130.211.0.0/22
und35.191.0.0/16
- Protokolle und Ports: Alle zulassen
- Name:
Klicken Sie auf Erstellen.
gcloud
Erstellen Sie die Firewallregel
fw-allow-lb-access
, um die Kommunikation aus dem Subnetz zuzulassen:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=tcp,udp,icmp
Erstellen Sie die Firewallregel
fw-allow-ssh
, um SSH-Verbindungen zu VMs mit dem Netzwerk-Tagallow-ssh
zu ermöglichen. Wenn Siesource-ranges
weglassen, bezieht Google Cloud die Regel auf jede Quelle.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Erstellen Sie die Regel
fw-allow-health-check
, um Google Cloud-Systemdiagnosen zuzulassen.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
API
Erstellen Sie die Firewallregel fw-allow-lb-access
. Stellen Sie dazu eine POST
-Anfrage an die Methode firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "10.1.2.0/24", "10.3.4.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Erstellen Sie die Firewallregel fw-allow-ssh
. Stellen Sie dazu eine POST
-Anfrage an die Methode firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Erstellen Sie die Firewallregel fw-allow-health-check
. Stellen Sie dazu eine POST
-Anfrage an die Methode firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Backend-VMs und Instanzgruppen erstellen
In diesem Beispiel werden zwei nicht verwaltete Instanzgruppen mit jeweils zwei Backend-VMs (Server) verwendet. Die beiden Instanzgruppen befinden sich dabei in den separaten Zonen us-west1-a
und us-west1-c
, um den regionalen Charakter von internen Passthrough-Netzwerk-Load-Balancern zu veranschaulichen.
- Die Instanzgruppe
ig-a
enthält diese beiden VMs:vm-a1
vm-a2
- Die Instanzgruppe
ig-c
enthält diese beiden VMs:vm-c1
vm-c2
Auf den Traffic zu allen vier Backend-VMs wird Load-Balancing angewendet.
Zur Illustration dieses Beispiels und der zusätzlichen Konfigurationsoptionen führt jede der vier VMs einen Apache-Webserver aus, der die folgenden TCP-Ports überwacht: 80, 8008, 8080, 8088, 443 und 8443.
Jeder VM wird eine interne IP-Adresse im lb-subnet
und eine sitzungsspezifische externe (öffentliche) IP-Adresse zugewiesen. Sie können die externen IP-Adressen später entfernen.
Externe IP-Adressen werden für die Backend-VMs nicht benötigt. Sie sind jedoch für dieses Beispiel nützlich, da sie den Backend-VMs ermöglichen, Apache aus dem Internet herunterzuladen, und die Herstellung einer Verbindung mit SSH erlauben.
Apache ist standardmäßig für die Bindung an eine beliebige IP-Adresse konfiguriert. Interne Passthrough-Netzwerk-Load-Balancer liefern Pakete aus und behalten dabei die Ziel-IP bei. Achten Sie deshalb darauf, dass die auf den Backend-VMs ausgeführte Serversoftware die IP-Adresse der internen Weiterleitungsregel des Load-Balancers überwacht. Wenn Sie mehrere interne Weiterleitungsregeln konfigurieren, achten Sie darauf, dass die Software die jeweils zugewiesene interne IP-Adresse überwacht. Die Ziel-IP-Adresse eines Pakets, das ein interner Passthrough-Netzwerk-Load-Balancer an eine Backend-VM liefert, ist die interne IP-Adresse der Weiterleitungsregel.
Der Einfachheit halber wird auf diesen Backend-VMs Debian GNU/Linux 10 ausgeführt.
Console
Backend-VMs erstellen
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Wiederholen Sie die Schritte 3 bis 8 pro VM mit folgenden Kombinationen aus Name und Zone.
- Name:
vm-a1
, Zone:us-west1-a
- Name:
vm-a2
, Zone:us-west1-a
- Name:
vm-c1
, Zone:us-west1-c
- Name:
vm-c2
, Zone:us-west1-c
- Name:
Klicken Sie auf Instanz erstellen.
Legen Sie den Namen wie in Schritt 2 angegeben fest.
Wählen Sie für Region die Option
us-west1
und dann eine Zone aus, wie in Schritt 2 angegeben.Achten Sie darauf, dass im Abschnitt Bootlaufwerk Debian GNU/Linux 12 (bookworm) als Bootlaufwerk-Optionen ausgewählt ist. Klicken Sie bei Bedarf auf Ändern, um das Image zu ändern.
Klicken Sie auf Erweiterte Optionen.
Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:
- Geben Sie für Netzwerk-Tags
allow-ssh
undallow-health-check
ein. - Wählen Sie für Netzwerkschnittstellen Folgendes aus:
- Netzwerk:
lb-network
- Subnetz:
lb-subnet
- IP-Stack-Typ: IPv4 (Einzel-Stack)
- Primäre interne IPv4-Adresse: flüchtig (automatisch)
- Externe IPv4-Adresse: sitzungsspezifisch
- Netzwerk:
- Geben Sie für Netzwerk-Tags
Klicken Sie auf Verwaltung und geben Sie im Feld Startskript das folgende Skript ein. Der Skriptinhalt ist für alle vier VMs identisch.
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
Klicken Sie auf Erstellen.
Instanzgruppen erstellen
Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.
Wiederholen Sie die folgenden Schritte, um mit diesen Kombinationen zwei nicht verwaltete Instanzgruppen mit jeweils zwei VMs zu erstellen.
- Instanzgruppenname:
ig-a
, Zone:us-west1-a
, VMs:vm-a1
undvm-a2
- Instanzgruppenname:
ig-c
, Zone:us-west1-c
, VMs:vm-c1
undvm-c2
- Instanzgruppenname:
Klicken Sie auf Instanzgruppe erstellen.
Klicken Sie auf Neue nicht verwaltete Instanzgruppe.
Legen Sie Name wie in Schritt 2 angegeben fest.
Wählen Sie im Abschnitt Standort die Option
us-west1
für Region und dann eine Zone wie in Schritt 2 angegeben.Wählen Sie für Netz die Option
lb-network
aus.Wählen Sie für Subnetzwerk die Option
lb-subnet
aus.Fügen Sie im Bereich VM-Instanzen die in Schritt 2 angegebenen VMs hinzu.
Klicken Sie auf Erstellen.
gcloud
Erstellen Sie die vier VMs, indem Sie den folgenden Befehl viermal ausführen und die nachstehenden vier Kombinationen für
[VM-NAME]
und[ZONE]
verwenden. Der Skriptinhalt ist für alle vier VMs identisch.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
Erstellen Sie die zwei nicht verwalteten Instanzgruppen in jeder Zone:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Fügen Sie den entsprechenden Instanzgruppen die VMs hinzu:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
API
Verwenden Sie für die vier VMs die folgenden VM-Namen und -Zonen:
VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
Sie können den aktuellen DEBIAN_IMAGE_NAME
abrufen, indem Sie den folgenden gcloud
-Befehl ausführen:
gcloud compute images list \ --filter="family=debian-12"
Erstellen Sie jetzt vier Backend-VMs. Stellen Sie dazu vier POST
-Anfragen an die Methode instances.insert
:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM-NAME", "tags": { "items": [ "allow-health-check", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM-NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
Erstellen Sie nun zwei Instanzgruppen. Stellen Sie dazu eine POST
-Anfrage an die Methode instanceGroups.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups { "name": "ig-c", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Fügen Sie jeder Instanzgruppe Instanzen hinzu. Stellen Sie dazu eine POST
-Anfrage an die Methode instanceGroups.addInstances
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2" } ] }
Load-Balancer-Komponenten konfigurieren
In diesen Schritten konfigurieren Sie alle Komponenten für den internen Passthrough-Network Load Balancer. Zuerst konfigurieren Sie die Systemdiagnose und den Backend-Dienst und danach die Frontend-Komponenten:
Systemdiagnose: In diesem Beispiel wird eine HTTP-Systemdiagnose verwendet, die lediglich auf die HTTP-Antwort
200
(OK) prüft. Weitere Informationen finden Sie im Abschnitt "Systemdiagnose" der Übersicht über den internen Passthrough-Network Load Balancer.Backend-Dienst: Da der HTTP-Traffic über den internen Load-Balancer weitergeleitet werden muss, müssen Sie TCP und nicht UDP verwenden.
Weiterleitungsregel: Dieses Beispiel erstellt eine einzelne interne Weiterleitungsregel.
Interne IP-Adresse: In diesem Beispiel geben Sie beim Erstellen der Weiterleitungsregel eine interne IP-Adresse (
10.1.2.99
) an.
Console
Konfiguration starten
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
- Klicken Sie auf Load-Balancer erstellen.
- Wählen Sie unter Typ des Load Balancers die Option Network Load Balancer (TCP/UDP/SSL) aus und klicken Sie auf Weiter.
- Wählen Sie für Proxy oder Passthrough die Option Passthrough-Load Balancer aus und klicken Sie auf Weiter.
- Wählen Sie für Öffentlich oder intern die Option Intern aus und klicken Sie auf Weiter.
- Klicken Sie auf Konfigurieren.
Grundlegende Konfiguration
Geben Sie auf der Seite Internen Passthrough-Network Load Balancer erstellen die folgenden Informationen ein:
- Name des Load-Balancers:
be-ilb
- Region:
us-west1
- Netz:
lb-network
Back-Ends konfigurieren
- Klicken Sie auf Backend-Konfiguration.
- Zur Verarbeitung von nur IPv4-Traffic im Abschnitt Neues Backend im Bereich Backends, wählen Sie IP-Stack-Typ als IPv4 (Einzel-Stack) aus.
- Wählen Sie unter Instanzgruppe die Instanzgruppe
ig-c
aus und klicken Sie auf Fertig. - Klicken Sie auf Backend hinzufügen und wiederholen Sie diesen Schritt, um
ig-a
hinzuzufügen. Wählen Sie in der Liste Systemdiagnose die Option Systemdiagnose erstellen aus, geben Sie die folgenden Informationen ein und klicken Sie auf Speichern.
- Name:
hc-http-80
- Protokoll:
HTTP
- Port:
80
- Proxyprotokoll:
NONE
- Anfragepfad:
/
Wenn Sie den Load-Balancer mit der Google Cloud Console erstellen, ist die Systemdiagnose global. Wenn Sie eine regionale Systemdiagnose erstellen möchten, verwenden Sie
gcloud
oder die API.- Name:
Überprüfen Sie, bevor Sie fortfahren, ob sich neben Backend-Konfiguration ein blaues Häkchen befindet.
Frontend konfigurieren
- Klicken Sie auf Frontend-Konfiguration.
- In the New Frontend IP and port section, do the following:
- Geben Sie für Name
fr-ilb
ein. - Wählen Sie für Subnetzwerk die Option
lb-subnet
aus. - Wählen Sie im Abschnitt Interner IP-Zweck in der Liste IP-Adresse IP-Adresse erstellen aus, geben Sie die folgenden Informationen ein und klicken Sie dann auf Reservieren.
- Name:
ip-ilb
- IP-Version: IPv4.
- Statische IP-Adresse: Selbst auswählen
- Benutzerdefinierte IP-Adresse:
10.1.2.99
- Name:
- Wählen Sie für Ports Mehrere aus und geben Sie dann in Nummern portieren
80
,8008
,8080
und8088
aus. - Überprüfen Sie, bevor Sie fortfahren, ob sich neben der Backend-Konfiguration ein blaues Häkchen befindet.
- Geben Sie für Name
Konfiguration prüfen
- Klicken Sie auf Prüfen und abschließen.
- Prüfen Sie die Konfigurationseinstellungen des Load-Balancers.
- Optional: Klicken Sie auf Entsprechender Code, um die REST API-Anfrage aufzurufen, die zum Erstellen des Load-Balancers verwendet wird.
- Klicken Sie auf Erstellen.
gcloud
Erstellen Sie eine neue regionale HTTP-Systemdiagnose, um die HTTP-Verbindung zu den VMs auf Port 80 zu testen.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Erstellen Sie den Back-End-Dienst für HTTP-Traffic:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Fügen Sie dem Backend-Dienst die beiden Instanzgruppen hinzu:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Erstellen Sie eine Weiterleitungsregel für den Backend-Dienst. Wenn Sie die Weiterleitungsregel erstellen, geben Sie für die interne IP-Adresse im Subnetz den Wert
10.1.2.99
an.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Erstellen Sie die Systemdiagnose. Stellen Sie dazu eine POST
-Anfrage an die Methode regionHealthChecks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
Erstellen Sie den regionalen Backend-Dienst. Stellen Sie dazu eine POST
-Anfrage an die Methode regionBackendServices.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" }, { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 } }
Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST
-Anfrage an die Methode forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Load-Balancer testen
Diese Tests zeigen Ihnen, wie Sie die Konfiguration des Load-Balancers validieren und das erwartete Verhalten ermitteln können.
Client-VM erstellen
In diesem Beispiel wird eine Client-VM (vm-client
) erstellt, die sich in derselben Region wie die Backend-VMs (Server) befindet. Der Client validiert die Konfiguration des Load-Balancers und demonstriert das erwartete Verhalten, wie im Abschnitt "Test" beschrieben.
Console
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf Instanz erstellen.
Geben Sie für Name
vm-client
ein.Wählen Sie für Region die Option
us-west1
aus.Wählen Sie für Zone die Option
us-west1-a
aus.Klicken Sie auf Erweiterte Optionen.
Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:
- Geben Sie bei Netzwerk-Tags den Wert
allow-ssh
ein. - Wählen Sie für Netzwerkschnittstellen Folgendes aus:
- Netz:
lb-network
- Subnetz:
lb-subnet
- Netz:
- Geben Sie bei Netzwerk-Tags den Wert
Klicken Sie auf Erstellen.
gcloud
Die Client-VM kann sich in einer beliebigen Zone in derselben Region wie der Load-Balancer befinden. Außerdem kann sie jedes Subnetz in dieser Region verwenden. In diesem Beispiel befindet sich der Client in der Zone us-west1-a
und verwendet dasselbe Subnetz wie die Backend-VMs.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
API
Stellen Sie eine POST
-Anfrage an die Methode instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Verbindung von Client-VM testen
Dieser Test nimmt von einer separaten Client-VM Verbindung mit dem Load-Balancer auf, also nicht von einer Backend-VM des Load-Balancers. Dabei wird folgendes Verhalten erwartet: Der Traffic wird zwischen den vier Back-End-VMs verteilt, da keine Sitzungsaffinität konfiguriert wurde.
Stellen Sie eine Verbindung zur Client-VM-Instanz her.
gcloud compute ssh vm-client --zone=us-west1-a
Stellen Sie mit
curl
eine Webanfrage an den Load-Balancer, um dessen IP-Adresse zu kontaktieren. Wiederholen Sie die Anfrage. So können Sie sehen, dass Antworten von verschiedenen Back-End-VMs stammen. Der Name der VM, die die Antwort generiert, wird aufgrund des Inhalts von/var/www/html/index.html
auf jeder Backend-VM im Text der HTML-Antwort angezeigt. Die erwarteten Antworten sehen beispielsweise so aus:Page served from: vm-a1
undPage served from: vm-a2
.curl http://10.1.2.99
Die Weiterleitungsregel ist für die Bereitstellung der Ports
80
,8008
,8080
und8088
konfiguriert. Um Traffic an diese anderen Ports zu senden, hängen Sie nach der IP-Adresse einen Doppelpunkt (:
) und die Portnummer an:curl http://10.1.2.99:8008
Wenn Sie der internen Weiterleitungsregel ein Dienstlabel hinzufügen, können Sie mithilfe des internen DNS den Load-Balancer kontaktieren. Verwenden Sie dazu dessen Dienstnamen.
curl http://web-test.fr-ilb.il4.us-west1.lb.PROJECT_ID.internal
IP-Adresse des Load-Balancers pingen
Dieser Test zeigt ein erwartetes Verhalten: Sie können die IP-Adresse des Load-Balancers nicht per Ping kontaktieren. Dies liegt daran, dass interne Passthrough-Netzwerk-Load-Balancer durch virtuelle Netzwerkprogrammierung implementiert werden – sie sind keine separaten Geräte.
Stellen Sie eine Verbindung zur Client-VM-Instanz her.
gcloud compute ssh vm-client --zone=us-west1-a
Versuchen Sie, die IP-Adresse des Load-Balancers per Ping zu kontaktieren. Sie erhalten keine Antwort und der
ping
-Befehl überschreitet in diesem Beispiel nach 10 Sekunden des Zeitlimit.timeout 10 ping 10.1.2.99
Anfragen von VMs mit Load-Balancing senden
Dieser Test zeigt: Wenn eine Backend-VM Pakete an die IP-Adresse der Weiterleitungsregel des Load-Balancers sendet, werden die Anfragen an sich selbst weitergeleitet. Dies ist unabhängig vom Status der Systemdiagnose der Backend-VM.
Interne Passthrough-Netzwerk-Load-Balancer werden mithilfe einer virtuellen Netzwerkprogrammierung und VM-Konfiguration im Gastbetriebssystem implementiert. Auf Linux-VMs erstellt die Gastumgebung eine Route für die IP-Adresse des Load-Balancers in der lokalen Routingtabelle des Betriebssystems.
Da sich diese lokale Route innerhalb der VM selbst (keine Route im VPC-Netzwerk) befindet, werden an die IP-Adresse des Load-Balancers gesendete Pakete nicht vom VPC-Netzwerk verarbeitet. Stattdessen verbleiben Pakete, die an die IP-Adresse des Load-Balancers gesendet werden, im Betriebssystem der VM.
Stellen Sie eine Verbindung zu einer Backend-VM wie
vm-a1
her:gcloud compute ssh vm-a1 --zone=us-west1-a
Stellen Sie mit
curl
eine Webanfrage an den Load-Balancer (nach IP-Adresse oder Dienstname). Die Antwort stammt von derselben Backend-VM, die die Anfrage stellt. Wiederkehrende Anfragen werden auf die gleiche Weise beantwortet. Die erwartete Antwort beim Testen vonvm-a1
lautet immer:Page served from: vm-a1
.curl http://10.1.2.99
Prüfen Sie die lokale Routingtabelle und suchen Sie nach einem Ziel, das mit der IP-Adresse des Load-Balancers selbst übereinstimmt:
10.1.2.99
. Diese Route ist notwendiger Bestandteil eines internen Passthrough-Netzwerk-Load-Balancers. Zugleich zeigt sie, warum eine Anfrage von einer VM hinter dem Load-Balancer immer von derselben VM beantwortet wird.ip route show table local | grep 10.1.2.99
Wenn eine Backend-VM für einen internen Passthrough-Netzwerk-Load-Balancer Pakete an die IP-Adresse der Weiterleitungsregel des Load-Balancers sendet, werden die Pakete immer an die VM weitergeleitet, von der die Anfrage stammt. Dies liegt daran, dass ein interner Passthrough-Netzwerk-Load-Balancer ein Pass-Through-Load-Balancer ist und durch Erstellen einer lokalen Route für die IP-Adresse des Load-Balancers im Gastbetriebssystem der VM implementiert wird, wie in diesem Abschnitt angegeben. Wenn Sie einen Anwendungsfall haben, bei dem Backends mit Load-Balancing TCP-Traffic an die IP-Adresse des Load-Balancers senden müssen, und der Traffic verteilt werden soll, als stamme er von einem Backend ohne Load-Balancing, sollten Sie stattdessen eventuell einen internen regionalen Proxy-Netzwerk-Load-Balancer verwenden.
Weitere Informationen finden Sie unter Interne Passthrough-Netzwerk-Load-Balancer als nächste Hops.
Load-Balancer mit Dual-Stack-Subnetzen einrichten
In dieser Anleitung erfahren Sie, wie Sie einen internen Passthrough-Netzwerk-Load-Balancer konfigurieren und testen. Die Schritte in diesem Abschnitt zeigen, wie Sie folgende Elemente konfigurieren:
- In dem Beispiel auf dieser Seite wird ein VPC-Netzwerk im benutzerdefinierten Modus mit dem Namen
lb-network-dual-stack
verwendet. Für IPv6-Traffic ist jedoch ein Subnetz im benutzerdefinierten Modus erforderlich. - Ein Dual-Stack-Subnetz (
stack-type
ist aufIPv4_IPv6
gesetzt), das für IPv6-Traffic erforderlich ist. Wenn Sie ein Dual-Stack-Subnetz in einem VPC-Netzwerk im benutzerdefinierten Modus erstellen, wählen Sie einen IPv6-Zugriffstyp für das Subnetz aus. In diesem Beispiel setzen wir den Parameteripv6-access-type
des Subnetzes aufINTERNAL
. Dies bedeutet, dass neuen VMs in diesem Subnetz sowohl interne IPv4- als auch interne IPv6-Adressen zugewiesen werden können. Eine Anleitung finden Sie in der VPC-Dokumentation zum Hinzufügen eines Dual-Stack-Subnetzes. - Firewall-Regeln, die eingehende Verbindung zu Backend-VMs ermöglichen
- Die Back-End-Instanzgruppe, die sich in diesem Beispiel in der folgenden Region und im folgenden Subnetz befindet:
- Region:
us-west1
- Subnetz:
lb-subnet
, mit primärem IPv4-Adressbereich10.1.2.0/24
. Obwohl Sie wählen, welcher IPv4-Adressbereich im Subnetz konfiguriert werden soll, wird der IPv6-Adressbereich automatisch zugewiesen. Google stellt einen (/64
) IPv6 CIDR-Block mit fester Größe bereit.
- Region:
- Vier Backend-VMs mit Dual-Stack: zwei VMs in einer nicht verwalteten Instanzgruppe in Zone
us-west1-a
und zwei VMs in einer nicht verwalteten Instanzgruppe in Zoneus-west1-c
. Zur Veranschaulichung des globalen Zugriffs wird in diesem Beispiel eine zweite Testclient-VM in einer anderen Region und einem anderen Subnetz erstellt:- Region:
europe-west1
- Subnetz:
europe-subnet
, mit primärem IP-Adressbereich10.3.4.0/24
- Region:
- Eine Client-VM zum Testen von Verbindungen.
- Die folgenden Komponenten eines internen Passthrough-Netzwerk-Load-Balancers:
- Eine Systemdiagnose für den Backend-Dienst.
- Einen internen Backend-Dienst in der Region
us-west1
, um die Verteilung von Verbindungen zu den zwei zonalen Instanzgruppen zu verwalten. - Zwei interne Weiterleitungsregeln für das Frontend des Load-Balancers.
Im folgenden Diagramm wird die Architektur für dieses Beispiel dargestellt:
Netzwerk, Region und Subnetz konfigurieren
Der auf dieser Seite beschriebene interne Passthrough-Netzwerk-Load-Balancer wird in einem VPC-Netzwerk im benutzerdefinierten Modus mit dem Namen lb-network-dual-stack
erstellt.
Aktivieren Sie einen internen IPv6-Bereich des VPC-Netzwerks, wenn Sie Subnetze mit internen IPv6-Bereichen konfigurieren möchten. Interne IPv6-Subnetzbereiche werden aus diesem Bereich zugewiesen.
Console
Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.
Klicken Sie auf VPC-Netzwerk erstellen.
Geben Sie für Name
lb-network-dual-stack
ein.Führen Sie die folgenden Schritte aus, um interne IPv6-Adressbereiche in Subnetzen in diesem Netzwerk zu konfigurieren:
- Wählen Sie für Interner VPC-Netzwerk-IPv6-ULA-Bereich den Wert Aktiviert aus.
- Wählen Sie unter Internen IPv6-Bereich zuweisen die Option Automatisch oder Manuell aus.
Wählen Sie unter Modus für Subnetzerstellung die Option Benutzerdefiniert aus.
Legen Sie im Abschnitt Neues Subnetz folgende Konfigurationsparameter für das Subnetz fest:
- Name:
lb-subnet
- Region:
us-west1
- IP-Stack-Typ: IPv4 und IPv6 (Dual-Stack)
- IPv4-Bereich:
10.1.2.0/24
. - IPv6-Zugriffstyp: Intern
- Name:
Klicken Sie auf Fertig.
Klicken Sie auf Subnetz hinzufügen und geben Sie die folgenden Informationen ein:
- Name:
europe-subnet
- Region:
europe-west1
- IP-Stack-Typ: IPv4 (Einzel-Stack)
- IP-Adressbereich:
10.3.4.0/24
- Name:
Klicken Sie auf Fertig.
Klicken Sie auf Erstellen.
gcloud
Führen Sie den
gcloud compute networks create
-Befehl aus, um ein neues VPC-Netzwerk im benutzerdefinierten Modus zu erstellen.Verwenden Sie das
--enable-ula-internal-ipv6
-Flag, um interne IPv6-Bereiche in allen Subnetzen dieses Netzwerks zu konfigurieren. Mit dieser Option wird ein ULA-Präfix/48
aus dem Bereichfd20::/20
zugewiesen, der von Google Cloud für interne IPv6-Subnetzbereiche verwendet wird. Verwenden Sie das Flag--internal-ipv6-range
, um einen Bereich anzugeben, wenn Sie den zugewiesenen IPv6-Bereich/48
auswählen möchten.gcloud compute networks create lb-network-dual-stack \ --subnet-mode=custom \ --enable-ula-internal-ipv6 \ --internal-ipv6-range=ULA_IPV6_RANGE \ --bgp-routing-mode=regional
Ersetzen Sie
ULA_IPV6_RANGE
durch ein/48
-Präfix aus demfd20::/20
-Bereich, der von Google für interne IPv6-Subnetzbereiche verwendet wird. Wenn Sie das--internal-ipv6-range
-Flag nicht verwenden, wählt Google das/48
-Präfix für das Netzwerk aus, z. B.fd20:bc7:9a1c::/48
.Erstellen Sie im Netzwerk
NETWORK
ein Subnetz für Back-Ends in der Regionus-west1
und ein anderes Subnetz zum Testen des globalen Zugriffs in der Regioneurope-west1
.Führen Sie den
gcloud compute networks subnets create
-Befehl aus, um die Subnetze zu erstellen.gcloud compute networks subnets create lb-subnet \ --network=lb-network-dual-stack \ --range=10.1.2.0/24 \ --region=us-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
gcloud compute networks subnets create europe-subnet \ --network=lb-network-dual-stack \ --range=10.3.4.0/24 \ --region=europe-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
API
Erstellen Sie ein neues VPC-Netzwerk im benutzerdefinierten Modus:
Zum Konfigurieren interner IPv6-Bereiche in allen Subnetzen dieses Netzwerks legen Sie enableUlaInternalIpv6
auf "true" fest. Mit dieser Option wird der Bereich /48
aus dem Bereich fd20::/20
zugewiesen, der von Google für interne IPv6-Subnetzbereiche verwendet wird. Verwenden Sie das Feld internalIpv6Range
, um einen Bereich anzugeben, wenn Sie auswählen möchten, welcher /48
IPv6-Bereich zugewiesen ist.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "lb-network-dual-stack", "mtu": MTU, "enableUlaInternalIpv6": true, "internalIpv6Range": "ULA_IPV6_RANGE", "routingConfig": { "routingMode": "DYNAMIC_ROUTING_MODE" } }
Ersetzen Sie dabei Folgendes:
PROJECT_ID
: die ID des Projekts, in dem das VPC-Netzwerk erstellt wird.MTU
ist die maximale Übertragungseinheit des Netzwerks MTU kann entweder1460
(Standardeinstellung) oder1500
sein. Lesen Sie die maximale Übertragungseinheit, bevor Sie die MTU auf1500
setzen.ULA_IPV6_RANGE
: ein/48
-Präfix aus dem Bereichfd20::/20
, das von Google für interne IPv6-Subnetzbereiche verwendet wird Wenn Sie keinen Wert fürinternalIpv6Range
angeben, wählt Google das Präfix/48
für das Netzwerk aus.DYNAMIC_ROUTING_MODE
: entwederglobal
oderregional
, um das Route Advertisement-Verhalten von Cloud Routern im Netzwerk zu steuern. Weitere Informationen finden Sie unter Modus für dynamisches Routing.Weitere Informationen finden Sie in der Methode
networks.insert
.
Stellen Sie zwei POST
-Anfragen an die Methode subnetworks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.1.2.0/24", "network": "lb-network-dual-stack", "name": "lb-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.3.4.0/24", "network": "lb-network-dual-stack", "name": "europe-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
Firewallregeln konfigurieren
In diesem Beispiel werden die folgenden Firewallregeln verwendet:
fw-allow-lb-access
: Eine Eingangsregel, die für alle Ziele im VPC-Netzwerk gilt und Traffic von Quellen in den Bereichen10.1.2.0/24
und10.3.4.0/24
zulässt. Diese Regel lässt eingehenden Traffic von jedem Client zu, der sich in einem der beiden Subnetze befindet. Sie können damit später den globalen Zugriff konfigurieren und testen.fw-allow-lb-access-ipv6
: Eine Regel für eingehenden Traffic, die für alle Ziele im VPC-Netzwerk gilt und Traffic von Quellen im IPv6-Bereich im Subnetz zulässt. Diese Regel lässt eingehenden IPv6-Traffic von jedem Client zu, der sich in einem der beiden Subnetze befindet. Sie können damit später den globalen Zugriff konfigurieren und testen.fw-allow-ssh
: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und eingehende SSH-Verbindungen an TCP-Port 22 von jeder Adresse aus ermöglicht. Sie können einen restriktiveren IP-Quellbereich für diese Regel auswählen. Geben Sie dazu beispielsweise nur die IP-Bereiche des Systems an, von dem aus Sie SSH-Sitzungen initiieren. In diesem Beispiel wird das Ziel-Tagallow-ssh
verwendet, um die VMs zu identifizieren, auf die sie angewendet werden soll.fw-allow-health-check
: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und Traffic von den Google Cloud-Systemen für Systemdiagnosen zulässt (130.211.0.0/22
und35.191.0.0/16
). In diesem Beispiel wird das Ziel-Tagallow-health-check
verwendet, um die Instanzen zu identifizieren, auf die sie angewendet werden soll.fw-allow-health-check-ipv6
: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und Traffic von den Google Cloud-Systemen für Systemdiagnosen zulässt (2600:2d00:1:b029::/64
). In diesem Beispiel wird das Ziel-Tagallow-health-check-ipv6
verwendet, um die Instanzen zu identifizieren, auf die sie angewendet werden soll.
Ohne diese Firewallregeln blockiert die Standardregel zum Ablehnen von eingehendem Traffic den eingehenden Traffic zu den Backend-Instanzen.
Console
Rufen Sie in der Google Cloud Console die Seite der Firewall-Richtlinien auf.
Klicken Sie zum Erstellen der Regel, die Subnetztraffic zulässt, auf Firewallregel erstellen und geben Sie die folgenden Informationen ein:
- Name:
fw-allow-lb-access
- Netzwerk:
lb-network-dual-stack
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: All instances in the network.
- Quellfilter: IPv4-Bereiche.
- IPv4-Quellbereiche:
10.1.2.0/24
und10.3.4.0/24
- Protokolle und Ports: Alle zulassen
- Name:
Klicken Sie auf Erstellen.
Klicken Sie noch einmal auf Firewallregel erstellen und geben Sie die folgenden Informationen ein, um IPv6-Subnetz-Traffic zuzulassen:
- Name:
fw-allow-lb-access-ipv6
- Netzwerk:
lb-network-dual-stack
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: All instances in the network.
- Quellfilter: IPv6-Bereiche
- IPv6-Quellbereiche: IPV6_ADDRESS zugewiesen in
lb-subnet
- Protokolle und Ports: Alle zulassen
- Name:
Klicken Sie auf Erstellen.
Klicken Sie noch einmal auf Firewallregel erstellen und geben Sie die folgenden Informationen ein, um eingehende SSH-Verbindungen zuzulassen:
- Name:
fw-allow-ssh
- Netzwerk:
lb-network-dual-stack
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: Specified target tags
- Zieltags:
allow-ssh
- Quellfilter: IPv4-Bereiche.
- IPv4-Quellbereiche:
0.0.0.0/0
- Protokolle und Ports: Wählen Sie Angegebene Protokolle und Ports aus, klicken Sie das Kästchen TCP an und geben Sie
22
in Ports ein:
- Name:
Klicken Sie auf Erstellen.
Klicken Sie noch einmal auf Firewallregel erstellen und geben Sie die folgenden Informationen ein, um Google Cloud-IPv6-Systemdiagnosen zuzulassen:
- Name:
fw-allow-health-check-ipv6
- Netzwerk:
lb-network-dual-stack
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: Specified target tags
- Zieltags:
allow-health-check-ipv6
- Quellfilter: IPv6-Bereiche
- Quell-IPv6-Bereiche:
2600:2d00:1:b029::/64
- Protokolle und Ports: Alle zulassen
- Name:
Klicken Sie auf Erstellen.
Klicken Sie noch einmal auf Firewallregel erstellen und geben Sie die folgenden Informationen ein, um Google Cloud-Systemdiagnosen zuzulassen:
- Name:
fw-allow-health-check
- Netzwerk:
lb-network-dual-stack
- Priorität:
1000
- Trafficrichtung: Eingehend
- Aktion bei Übereinstimmung: Zulassen
- Ziele: Specified target tags
- Zieltags:
allow-health-check
- Quellfilter: IPv4-Bereiche.
- IPv4-Quellbereiche:
130.211.0.0/22
und35.191.0.0/16
- Protokolle und Ports: Alle zulassen
- Name:
Klicken Sie auf Erstellen.
gcloud
Erstellen Sie die Firewallregel
fw-allow-lb-access
, um die Kommunikation mit dem Subnetz zuzulassen:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=all
Erstellen Sie die Firewallregel
fw-allow-lb-access-ipv6
, um die Kommunikation mit dem Subnetz zuzulassen:gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=IPV6_ADDRESS \ --rules=all
Ersetzen Sie
IPV6_ADDRESS
durch die inlb-subnet
zugewiesene IPv6-Adresse.Erstellen Sie die Firewallregel
fw-allow-ssh
, um SSH-Verbindungen zu VMs mit dem Netzwerk-Tagallow-ssh
zu ermöglichen. Wenn Siesource-ranges
weglassen, bezieht Google Cloud die Regel auf jede Quelle.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Erstellen Sie die Regel
fw-allow-health-check-ipv6
, um Google Cloud IPv6-Systemdiagnosen zuzulassen.gcloud compute firewall-rules create fw-allow-health-check-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp
Erstellen Sie die Regel
fw-allow-health-check
, um Google Cloud-Systemdiagnosen zuzulassen.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
API
Erstellen Sie die Firewallregel
fw-allow-lb-access
. Stellen Sie dazu einePOST
-Anfrage an die Methodefirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "10.1.2.0/24", "10.3.4.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Erstellen Sie die Firewallregel
fw-allow-lb-access-ipv6
. Stellen Sie dazu einePOST
-Anfrage an die Methodefirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "IPV6_ADDRESS" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Ersetzen Sie
IPV6_ADDRESS
durch die inlb-subnet
zugewiesene IPv6-Adresse.Erstellen Sie die Firewallregel
fw-allow-ssh
. Stellen Sie dazu einePOST
-Anfrage an die Methodefirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Erstellen Sie die Firewallregel
fw-allow-health-check-ipv6
. Stellen Sie dazu einePOST
-Anfrage an die Methodefirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "2600:2d00:1:b029::/64" ], "targetTags": [ "allow-health-check-ipv6" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Erstellen Sie die Firewallregel
fw-allow-health-check
. Stellen Sie dazu einePOST
-Anfrage an die Methodefirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Backend-VMs und Instanzgruppen erstellen
In diesem Beispiel werden zwei nicht verwaltete Instanzgruppen mit jeweils zwei Backend-VMs (Server) verwendet. Die beiden Instanzgruppen befinden sich dabei in den separaten Zonen us-west1-a
und us-west1-c
, um den regionalen Charakter von internen Passthrough-Netzwerk-Load-Balancern zu veranschaulichen.
- Die Instanzgruppe
ig-a
enthält diese beiden VMs:vm-a1
vm-a2
- Die Instanzgruppe
ig-c
enthält diese beiden VMs:vm-c1
vm-c2
Auf den Traffic zu allen vier Backend-VMs wird Load-Balancing angewendet.
Zur Illustration dieses Beispiels und der zusätzlichen Konfigurationsoptionen führt jede der vier VMs einen Apache-Webserver aus, der die folgenden TCP-Ports überwacht: 80
, 8008
, 8080
, 8088
, 443
und 8443
.
Jeder VM wird eine interne IP-Adresse im lb-subnet
und eine sitzungsspezifische externe (öffentliche) IP-Adresse zugewiesen. Sie können die externen IP-Adressen später entfernen.
Externe IP-Adressen werden für die Backend-VMs nicht benötigt. Sie sind jedoch für dieses Beispiel nützlich, da sie den Backend-VMs ermöglichen, Apache aus dem Internet herunterzuladen, und die Herstellung einer Verbindung mit SSH erlauben.
Apache ist standardmäßig für die Bindung an eine beliebige IP-Adresse konfiguriert. Interne Passthrough-Netzwerk-Load-Balancer liefern Pakete aus und behalten dabei die Ziel-IP bei.
Achten Sie deshalb darauf, dass die auf den Backend-VMs ausgeführte Serversoftware die IP-Adresse der internen Weiterleitungsregel des Load-Balancers überwacht. Wenn Sie mehrere interne Weiterleitungsregeln konfigurieren, achten Sie darauf, dass die Software die jeweils zugewiesene interne IP-Adresse überwacht. Die Ziel-IP-Adresse eines Pakets, das ein interner Passthrough-Netzwerk-Load-Balancer an eine Backend-VM liefert, ist die interne IP-Adresse der Weiterleitungsregel.
Achten Sie darauf, dass der Stacktyp des Subnetzwerks mit dem Stacktyp der Instanzvorlagen übereinstimmt, die von den verwalteten Instanzgruppen verwendet werden. Das Subnetzwerk muss Dual-Stack sein, wenn die verwaltete Instanzgruppe eine Dual-Stack-Instanzvorlage verwendet.
Zur Vereinfachung der Anleitung führen diese Backend-VMs Debian GNU/Linux 10 aus.
Console
Backend-VMs erstellen
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Wiederholen Sie die Schritte 3 bis 8 pro VM mit folgenden Kombinationen aus Name und Zone.
- Name:
vm-a1
, Zone:us-west1-a
- Name:
vm-a2
, Zone:us-west1-a
- Name:
vm-c1
, Zone:us-west1-c
- Name:
vm-c2
, Zone:us-west1-c
- Name:
Klicken Sie auf Instanz erstellen.
Legen Sie den Namen wie in Schritt 2 angegeben fest.
Wählen Sie für Region die Option
us-west1
und dann eine Zone aus, wie in Schritt 2 angegeben.Achten Sie darauf, dass im Abschnitt Bootlaufwerk Debian GNU/Linux 12 (bookworm) als Bootlaufwerk-Optionen ausgewählt ist. Klicken Sie bei Bedarf auf Ändern, um das Image zu ändern.
Klicken Sie auf Erweiterte Optionen.
Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:
- Geben Sie für Netzwerk-Tags
allow-ssh
undallow-health-check-ipv6
ein. - Wählen Sie für Netzwerkschnittstellen Folgendes aus:
- Netzwerk:
lb-network-dual-stack
- Subnetz:
lb-subnet
- IP-Stack-Typ: IPv4 und IPv6 (Dual-Stack)
- Primäre interne IPv4-Adresse: flüchtig (automatisch)
- Externe IPv4-Adresse: sitzungsspezifisch
- Netzwerk:
Klicken Sie auf Verwaltung und geben Sie im Feld Startskript das folgende Skript ein. Der Skriptinhalt ist für alle vier VMs identisch.
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
- Geben Sie für Netzwerk-Tags
Klicken Sie auf Erstellen.
Instanzgruppen erstellen
Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.
Wiederholen Sie die folgenden Schritte, um mit diesen Kombinationen zwei nicht verwaltete Instanzgruppen mit jeweils zwei VMs zu erstellen.
- Instanzgruppenname:
ig-a
, Zone:us-west1-a
, VMs:vm-a1
undvm-a2
- Instanzgruppenname:
ig-c
, Zone:us-west1-c
, VMs:vm-c1
undvm-c2
- Instanzgruppenname:
Klicken Sie auf Instanzgruppe erstellen.
Klicken Sie auf Neue nicht verwaltete Instanzgruppe.
Legen Sie Name wie in Schritt 2 angegeben fest.
Wählen Sie im Bereich Standort als Region
us-west1
aus und legen Sie dann wie in Schritt 2 angegeben eine Zone fest.Wählen Sie für Netzwerk die Option
lb-network-dual-stack
aus.Wählen Sie für Subnetzwerk die Option
lb-subnet
aus.Fügen Sie im Bereich VM-Instanzen die in Schritt 2 angegebenen VMs hinzu.
Klicken Sie auf Erstellen.
gcloud
Führen Sie den
gcloud compute instances create
-Befehl viermal aus, um die vier VMs zu erstellen. Verwenden Sie dazu diese vier Kombinationen für[VM-NAME]
und[ZONE]
. Der Skriptinhalt ist für alle vier VMs identisch.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check-ipv6 \ --subnet=lb-subnet \ --stack-type=IPV4_IPV6 \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
Erstellen Sie die zwei nicht verwalteten Instanzgruppen in jeder Zone:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Fügen Sie den entsprechenden Instanzgruppen die VMs hinzu:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
API
Verwenden Sie für die vier VMs die folgenden VM-Namen und -Zonen:
VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
Um den aktuellen DEBIAN_IMAGE_NAME
abzurufen führen Sie folgenden gcloud
-Befehl aus:
gcloud compute images list \ --filter="family=debian-12"
Erstellen Sie jetzt vier Backend-VMs. Stellen Sie dazu vier POST
-Anfragen an die Methode instances.insert
:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM-NAME", "tags": { "items": [ "allow-health-check-ipv6", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM-NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
Erstellen Sie nun zwei Instanzgruppen. Stellen Sie dazu eine POST
-Anfrage an die Methode instanceGroups.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups { "name": "ig-c", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Fügen Sie jeder Instanzgruppe Instanzen hinzu. Stellen Sie dazu eine POST
-Anfrage an die Methode instanceGroups.addInstances
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2" } ] }
Load-Balancer-Komponenten konfigurieren
In diesen Schritten konfigurieren Sie alle Komponenten für den internen Passthrough-Network Load Balancer. Zuerst konfigurieren Sie die Systemdiagnose und den Backend-Dienst und danach die Frontend-Komponenten:
Systemdiagnose: In diesem Beispiel wird eine HTTP-Systemdiagnose verwendet, die lediglich auf die HTTP-Antwort
200
(OK) prüft. Weitere Informationen finden Sie im Abschnitt „Systemdiagnose“ der Übersicht über den internen Passthrough-Netzwerk-Load-Balancer.Backend-Dienst: Da der HTTP-Traffic über den internen Load-Balancer weitergeleitet werden muss, müssen Sie TCP und nicht UDP verwenden.
Weiterleitungsregel: Dieses Beispiel erstellt zwei interne Weiterleitungsregeln für IPv4- und IPv6-Traffic.
Interne IP-Adresse: In diesem Beispiel geben Sie beim Erstellen der IPv4-Weiterleitungsregel eine interne IP-Adresse (
10.1.2.99
) an. Weitere Informationen finden Sie unter Interne IP-Adresse. Obwohl Sie auswählen, welche IPv4-Adresse konfiguriert wird, wird die IPv6-Adresse automatisch zugewiesen.
Console
Konfiguration starten
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
- Klicken Sie auf Load-Balancer erstellen.
- Wählen Sie unter Typ des Load Balancers die Option Network Load Balancer (TCP/UDP/SSL) aus und klicken Sie auf Weiter.
- Wählen Sie für Proxy oder Passthrough die Option Passthrough-Load Balancer aus und klicken Sie auf Weiter.
- Wählen Sie für Öffentlich oder intern die Option Intern aus und klicken Sie auf Weiter.
- Klicken Sie auf Konfigurieren.
Grundlegende Konfiguration
Geben Sie auf der Seite Internen Passthrough-Network Load Balancer erstellen die folgenden Informationen ein:
- Name des Load-Balancers:
be-ilb
- Region:
us-west1
- Netz:
lb-network-dual-stack
Backend-Konfiguration
- Klicken Sie auf Backend-Konfiguration.
- Wählen Sie im Bereich Neues Backend von Backends den IP-Stack-Typ als IPv4 und IPv6 (Dual-Stack) aus.
- Wählen Sie unter Instanzgruppe die Instanzgruppe
ig-a
aus und klicken Sie auf Fertig. - Klicken Sie auf Backend hinzufügen und wiederholen Sie diesen Schritt, um
ig-c
hinzuzufügen. - Wählen Sie aus der Liste Systemdiagnose die Option Systemdiagnose erstellen aus, geben Sie die folgenden Informationen ein und klicken Sie auf Speichern:
- Name:
hc-http-80
. - Umfang: Regional.
- Protokoll:
HTTP
. - Port:
80
. - Proxyprotokoll:
NONE
. - Anfragepfad:
/
.
- Name:
- Prüfen Sie, ob neben der Backend-Konfiguration ein blaues Häkchen angezeigt wird.
Frontend-Konfiguration
- Klicken Sie auf Frontend-Konfiguration. In the New Frontend IP and port section, do the following:
- Geben Sie für Name
fr-ilb-ipv6
ein. - So verarbeiten Sie IPv6-Traffic:
- Setzen Sie die IP-Version auf IPv6.
- Wählen Sie für Subnetzwerk die Option
lb-subnet
aus. Der IPv6-Adressbereich in der Weiterleitungsregel ist immer sitzungsspezifisch. - Wählen Sie für Ports die Option Mehrere aus und geben Sie im Feld Portnummer den Wert
80
,8008
,8080
und8088
ein. - Klicken Sie auf Fertig.
- So verarbeiten Sie IPv4-Traffic:
- Klicken Sie auf Frontend-IP und Port hinzufügen.
- Geben Sie für Name
fr-ilb
ein. - Wählen Sie für Subnetzwerk die Option
lb-subnet
aus. - Wählen Sie im Abschnitt Interner IP-Zweck in der Liste IP-Adresse IP-Adresse erstellen aus, geben Sie die folgenden Informationen ein und klicken Sie dann auf Reservieren.
- Name:
ip-ilb
- IP-Version: IPv4.
- Statische IP-Adresse: Selbst auswählen
- Benutzerdefinierte IP-Adresse:
10.1.2.99
- Name:
- Wählen Sie für Ports Mehrere aus und geben Sie dann in Nummern portieren
80
,8008
,8080
und8088
aus. - Klicken Sie auf Fertig.
- Überprüfen Sie, bevor Sie fortfahren, ob sich neben der Backend-Konfiguration ein blaues Häkchen befindet.
- Geben Sie für Name
Konfiguration prüfen
- Klicken Sie auf Prüfen und abschließen. Prüfen Sie alle Ihre Einstellungen.
- Klicken Sie, wenn die Einstellungen korrekt sind, auf Erstellen. Es dauert einige Minuten, bis der interne Passthrough-Netzwerk-Load-Balancer erstellt ist.
gcloud
Erstellen Sie eine neue regionale HTTP-Systemdiagnose, um die HTTP-Verbindung zu den VMs auf Port 80 zu testen.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Erstellen Sie den Back-End-Dienst für HTTP-Traffic:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Fügen Sie dem Backend-Dienst die beiden Instanzgruppen hinzu:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Erstellen Sie zwei Weiterleitungsregeln für den Backend-Dienst. Wenn Sie die IPv4-Weiterleitungsregel erstellen, geben Sie
10.1.2.99
für die interne IP-Adresse im Subnetz für IPv4-Adressen an.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
gcloud compute forwarding-rules create fr-ilb-ipv6 \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1 \ --ip-version=IPV6
API
Erstellen Sie die Systemdiagnose. Stellen Sie dazu eine POST
-Anfrage an die Methode regionHealthChecks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
Erstellen Sie den regionalen Backend-Dienst. Stellen Sie dazu eine POST
-Anfrage an die Methode regionBackendServices.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" }, { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 } }
Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST
-Anfrage an die Methode forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-ipv6", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "ipVersion": "IPV6", "networkTier": "PREMIUM" }
Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST
-Anfrage an die Methode forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Load-Balancer testen
Erstellen Sie zum Testen des Load-Balancers eine Client-VM in derselben Region wie der Load-Balancer und senden Sie dann Traffic vom Client an den Load-Balancer.
Client-VM erstellen
In diesem Beispiel wird eine Client-VM (vm-client
) erstellt, die sich in derselben Region wie die Backend-VMs (Server) befindet. Der Client validiert die Konfiguration des Load-Balancers und demonstriert das erwartete Verhalten, wie im Abschnitt "Test" beschrieben.
Console
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf Instanz erstellen.
Geben Sie für Name
vm-client
ein.Wählen Sie für Region die Option
us-west1
aus.Wählen Sie für Zone die Option
us-west1-a
aus.Klicken Sie auf Erweiterte Optionen.
Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:
- Geben Sie bei Netzwerk-Tags den Wert
allow-ssh
ein. - Wählen Sie für Netzwerkschnittstellen Folgendes aus:
- Netz:
lb-network-dual-stack
- Subnetz:
lb-subnet
- IP-Stack-Typ: IPv4 und IPv6 (Dual-Stack)
- Primäre interne IP: sitzungsspezifisch (automatisch)
- Externe IP: sitzungsspezifisch
- Netz:
- Klicken Sie auf Fertig.
- Geben Sie bei Netzwerk-Tags den Wert
Klicken Sie auf Erstellen.
gcloud
Die Client-VM kann sich in einer beliebigen Zone in derselben Region wie der Load-Balancer befinden. Außerdem kann sie jedes Subnetz in dieser Region verwenden. In diesem Beispiel befindet sich der Client in der Zone us-west1-a
und verwendet dasselbe Subnetz wie die Backend-VMs.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --stack-type=IPV4_IPV6 \ --tags=allow-ssh \ --subnet=lb-subnet
API
Stellen Sie eine POST
-Anfrage an die Methode instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Verbindung testen
Dieser Test nimmt von einer separaten Client-VM Verbindung mit dem Load-Balancer auf, also nicht von einer Backend-VM des Load-Balancers. Dabei wird folgendes Verhalten erwartet: Der Traffic wird auf die vier Backend-VMs verteilt.
Stellen Sie eine Verbindung zur Client-VM-Instanz her.
gcloud compute ssh vm-client --zone=us-west1-a
Beschreiben Sie die IPv6-Weiterleitungsregel
fr-ilb-ipv6
. Beachten SieIPV6_ADDRESS
in der Beschreibung.gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
Beschreiben Sie die IPv4-Weiterleitungsregel
fr-ilb
.gcloud compute forwarding-rules describe fr-ilb --region=us-west1
Führen Sie von Clients mit IPv6-Verbindung den folgenden Befehl aus:
$ curl -m 10 -s http://IPV6_ADDRESS:80
Wenn die zugewiesene IPv6-Adresse beispielsweise
[fd20:1db0:b882:802:0:46:0:0/96]:80
lautet, sollte der Befehl so aussehen:$ curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
Führen Sie von Clients mit IPv4-Verbindung den folgenden Befehl aus:
$ curl -m 10 -s http://10.1.2.99:80
Ersetzen Sie die Platzhalter durch gültige Werte:
IPV6_ADDRESS
ist die sitzungsspezifische IPv6-Adresse in der Weiterleitungsregelfr-ilb-ipv6
.
Zusätzliche Konfigurationsoptionen
In diesem Abschnitt wird die Konfiguration des Beispiels um alternative und zusätzliche Optionen erweitert. Alle Aufgaben sind optional. Sie können sie in beliebiger Reihenfolge durchführen.
Globalen Zugriff aktivieren
Sie können den globalen Zugriff für Ihr Beispiel eines internen Passthrough-Netzwerk-Load-Balancers aktivieren, damit Clients in allen Regionen darauf zugreifen können.
Die Back-Ends Ihres Beispiel-Load-Balancers müssen sich weiterhin in einer einzigen Region (us-west1
) befinden.
Wenn Sie den globalen Zugriff konfigurieren möchten, nehmen Sie die folgenden Änderungen an der Konfiguration vor:
Console
Weiterleitungsregel des Load-Balancers bearbeiten
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
Klicken Sie in der Spalte Name auf Ihren internen Passthrough-Netzwerk-Load-Balancer. Der Beispiel-Load-Balancer hat den Namen
be-ilb
.Klicken Sie auf Frontend-Konfiguration.
Klicken Sie auf Bearbeiten
.Wählen Sie unter Globaler Zugriff die Option Aktivieren aus.
Klicken Sie auf Fertig.
Klicken Sie auf Aktualisieren.
Prüfen Sie auf der Seite Details zum Load-Balancer, ob die Frontend-Konfiguration Regional (REGION
) mit globalem Zugriff lautet.
gcloud
Aktualisieren Sie die Weiterleitungsregel
fr-ilb
des Beispiel-Load-Balancers so, dass das Flag--allow-global-access
enthalten ist.gcloud compute forwarding-rules update fr-ilb \ --region=us-west1 \ --allow-global-access
Mit dem Befehl
forwarding-rules describe
können Sie feststellen, ob für eine Weiterleitungsregel der globale Zugriff aktiviert ist. Beispiel:gcloud compute forwarding-rules describe fr-ilb \ --region=us-west1 \ --format="get(name,region,allowGlobalAccess)"
Das Wort
True
wird in der Ausgabe nach dem Namen und der Region der Weiterleitungsregel angezeigt, wenn der globale Zugriff aktiviert ist.
API
Stellen Sie eine PATCH
-Anfrage an die Methode forwardingRules/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb { "allowGlobalAccess": true }
VM-Client erstellen, um den globalen Zugriff zu testen
Console
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf Instanz erstellen.
Legen Sie als Name
vm-client2
fest.Legen Sie als Region
europe-west1
fest.Setzen Sie Zone auf
europe-west1-b
.Klicken Sie auf Erweiterte Optionen.
Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:
- Geben Sie bei Netzwerk-Tags den Wert
allow-ssh
ein. - Wählen Sie für Netzwerkschnittstellen Folgendes aus:
- Netz:
lb-network
- Subnetz:
europe-subnet
- Netz:
- Geben Sie bei Netzwerk-Tags den Wert
Klicken Sie auf Erstellen.
gcloud
Die Client-VM kann sich in einer beliebigen Zone in derselben Region wie der Load-Balancer befinden. Außerdem kann sie jedes Subnetz in dieser Region verwenden. In diesem Beispiel befindet sich der Client in der Zone europe-west1-b
und verwendet dasselbe Subnetz wie die Backend-VMs.
gcloud compute instances create vm-client2 \ --zone=europe-west1-b \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=europe-subnet
API
Stellen Sie eine POST
-Anfrage an die Methode instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/instances { "name": "vm-client2", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks/europe-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client2", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/europe-west1-b/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Verbindung zum VM-Client herstellen und testen
Führen Sie den folgenden Befehl aus, um die Verbindung zu testen:
gcloud compute ssh vm-client2 --zone=europe-west1-b
Testen Sie die Verbindung zum Load-Balancer auf allen konfigurierten Ports, wie Sie es vom vm-client
in der Region us-west1
getan haben. Testen Sie die HTTP-Verbindung an den vier in der Weiterleitungsregel konfigurierten Ports:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Verwaltete Instanzgruppen konfigurieren
In der Beispielkonfiguration wurden zwei nicht verwaltete Instanzgruppen erstellt. Sie können stattdessen auch verwaltete Instanzgruppen, darunter zonale und regionale verwaltete Instanzgruppen, als Back-Ends für interne Passthrough-Netzwerk-Load-Balancer verwenden.
Für verwaltete Instanzgruppen müssen Sie eine Instanzvorlage erstellen. Dieses Verfahren zeigt Ihnen, wie Sie die beiden nicht verwalteten zonalen Instanzgruppen aus dem Beispiel durch eine einzelne, regional verwaltete Instanzgruppe ersetzen. Eine regional verwaltete Instanzgruppe erstellt automatisch VMs in mehreren Zonen der Region. Das vereinfacht die Verteilung des Produktionstraffics auf die Zonen.
Verwaltete Instanzgruppen unterstützen auch Autoscaling und die automatische Reparatur. Wenn Sie Autoscaling mit internen Passthrough-Netzwerk-Load-Balancern verwenden, können Sie keine Skalierung anhand von Load-Balancing vornehmen.
Dieses Verfahren zeigt Ihnen, wie Sie den Backend-Dienst für den internen Passthrough-Netzwerk-Load-Balancer des Beispiels so ändern, dass er eine regional verwaltete Instanzgruppe verwendet.
Console
Instanzvorlage
Öffnen Sie in der Google Cloud Console die Seite VM-Instanzvorlagen.
Klicken Sie auf Instanzvorlage erstellen.
Legen Sie als Name
template-vm-ilb
fest.Wählen Sie einen Maschinentyp aus.
Achten Sie darauf, dass im Abschnitt Bootlaufwerk Debian GNU/Linux 12 (bookworm) als Bootlaufwerk-Optionen ausgewählt ist. Klicken Sie bei Bedarf auf Ändern, um das Image zu ändern.
Klicken Sie auf Erweiterte Optionen.
Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:
- Geben Sie für Netzwerk-Tags
allow-ssh
undallow-health-check
ein. - Wählen Sie für Netzwerkschnittstellen Folgendes aus:
- Netzwerk:
lb-network
- Subnetz:
lb-subnet
- Netzwerk:
- Geben Sie für Netzwerk-Tags
Klicken Sie auf Verwaltung und geben Sie im Feld Startskript das folgende Skript ein:
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
Klicken Sie auf Erstellen.
Verwaltete Instanzgruppe
Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.
Klicken Sie auf Instanzgruppe erstellen.
Legen Sie als Name
ig-ilb
fest.Wählen Sie als Standort die Option Mehrere Zonen aus und setzen Sie die Region auf
us-west1
.Stellen Sie die Instanzvorlage auf
template-vm-ilb
.(Optional) Konfigurieren Sie das Autoscaling. Sie können die Instanzgruppe nicht auf Basis der Verwendung von HTTP-Load-Balancing automatisch skalieren, da die Instanzgruppe ein Backend für den internen Passthrough-Netzwerk-Load-Balancer ist.
Setzen Sie die Mindestanzahl an Instanzen auf
1
und die maximale Anzahl von Instanzen auf6
.(Optional) Konfigurieren Sie die automatische Reparatur. Wenn Sie die automatische Reparatur konfigurieren, verwenden Sie dieselbe Systemdiagnose, die der Backend-Dienst für den internen Passthrough-Netzwerk-Load-Balancer verwendet. Verwenden Sie in diesem Beispiel
hc-http-80
.Klicken Sie auf Erstellen.
gcloud
Erstellen Sie die Instanzvorlage. Optional können Sie für die zu verwendende Image-Vorlage andere Parameter festlegen, beispielsweise den Maschinentyp.
gcloud compute instance-templates create template-vm-ilb \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --region=us-west1 \ --network=lb-network \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
Erstellen Sie eine regional verwaltete Instanzgruppe mit der Vorlage:
gcloud compute instance-groups managed create ig-ilb \ --template=template-vm-ilb \ --region=us-west1 \ --size=6
Fügen Sie dem bereits erstellten Back-End-Dienst die regional verwaltete Instanzgruppe als Back-End hinzu:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-ilb \ --instance-group-region=us-west1
Trennen Sie die Verbindung der beiden nicht verwalteten (zonalen) Instanzgruppen zum Backend-Dienst:
gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Externe IP-Adressen aus Backend-VMs entfernen
Bei der Erstellung der Backend-VMs wurde jeder eine sitzungsspezifische externe IP-Adresse zugewiesen, damit über ein Startscript Apache heruntergeladen werden konnte. Da die Backend-VMs nur von einem internen Passthrough-Netzwerk-Load-Balancer verwendet werden, können Sie deren externe IP-Adressen entfernen. Dadurch wird verhindert, dass die Backend-VMs direkt auf das Internet zugreifen.
Console
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Wiederholen Sie die folgenden Schritte für jede Backend-VM.
Klicken Sie auf den Namen der Backend-VM, z. B.
vm-a1
.Klicken Sie auf
Bearbeiten.Klicken Sie im Bereich Netzwerkschnittstellen auf das Netzwerk.
Wählen Sie aus der Liste Externe IP-Adresse die Option Keine aus und klicken Sie auf Fertig.
Klicken Sie auf Speichern.
gcloud
Wenn Sie die Zone einer Instanz, z. B. bei einer regionalen verwalteten Instanzgruppe, ermitteln möchten, führen Sie für jede Instanz den folgenden Befehl aus. Ersetzen Sie
[SERVER-VM]
durch den Namen der VM, die Sie aufrufen möchten.gcloud compute instances list --filter="name=[SERVER-VM]"
Wiederholen Sie den folgenden Schritt für jede Back-End-VM. Ersetzen Sie
[SERVER-VM]
durch den Namen der VM und dann[ZONE]
durch die Zone der VM.gcloud compute instances delete-access-config [SERVER-VM] \ --zone=[ZONE] \ --access-config-name=external-nat
API
Stellen Sie für jede Backend-VM eine POST
-Anfrage an die Methode instances.deleteAccessConfig
. Ersetzen Sie dabei vm-a1
durch den Namen der VM und us-west1-a
durch die Zone der VM.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1/deleteAccessConfig?accessConfig=external-nat&networkInterface=None
Reservierte interne IP-Adresse verwenden
Wenn Sie Backend-VMs und Instanzgruppen erstellen, verwendet die VM-Instanz eine sitzungsspezifische interne IPv4- oder IPv6-Adresse.
In den folgenden Schritten erfahren Sie, wie Sie eine interne IPv4- oder IPv6-Adresse in eine statische interne IPv4- oder IPv6-Adresse umwandeln und dann die VM-Instanz aktualisieren, um die statische interne IP-Adresse zu verwenden:
- Verwendete sitzungsspezifische interne IPv4- oder IPv6-Adresse in eine statische Adresse umwandeln.
- Interne IPv6-Adresse ändern oder einer vorhandenen Instanz zuweisen.
Alternativ können Sie mit den folgenden Schritten eine neue statische interne IPv4- oder IPv6-Adresse reservieren und dann die VM-Instanz aktualisieren, um die statische interne IP-Adresse zu verwenden:
Neue statische interne IPv4- oder IPv6-Adresse reservieren.
Im Gegensatz zur internen IPv4-Reservierung unterstützt die interne IPv6-Reservierung keine Reservierung einer bestimmten IP-Adresse aus dem Subnetzwerk. Stattdessen wird automatisch ein interner
/96
-IPv6-Adressbereich aus dem internen IPv6-Adressbereich des Subnetzes/64
zugewiesen.Interne IPv6-Adresse ändern oder einer vorhandenen Instanz zuweisen.
Weitere Informationen finden Sie unter Statische interne IP-Adresse reservieren.
Traffic an allen Ports akzeptieren
Nicht die Backend-Dienste bestimmen die Ports, an denen der Load-Balancer Traffic akzeptiert, sondern die Weiterleitungsregel des Load-Balancers. Informationen zum Zweck der einzelnen Komponenten finden Sie unter Komponenten.
Beim Erstellen der Weiterleitungsregel dieses Beispiel-Load-Balancers haben Sie die Ports 80
, 8008
, 8080
und 8088
konfiguriert. Das Startskript, mit dem Apache installiert wird, nimmt die Konfiguration so vor, dass HTTPS-Verbindungen über die Ports 443
und 8443
akzeptiert werden.
Zur Unterstützung dieser sechs Ports können Sie die Weiterleitungsregel so konfigurieren, dass Traffic an allen Ports akzeptiert wird. Mit dieser Strategie können Sie auch die Firewallregeln konfigurieren, die eingehende Verbindungen zu Back-End-VMs zulassen, sodass nur bestimmte Ports zulässig sind.
In diesem Verfahren wird beschrieben, wie Sie die aktuelle Weiterleitungsregel des Load Balancers löschen und eine neue erstellen, die Traffic an allen Ports akzeptiert.
Weitere Informationen zur Verwendung dieser Konfiguration finden Sie unter Interne Passthrough-Netzwerk-Load-Balancer und Weiterleitungsregeln mit einer gemeinsamen IP-Adresse.
Console
Weiterleitungsregel löschen und neue erstellen
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
Klicken Sie auf den
be-ilb
-Load-Balancer und dann auf Bearbeiten.Klicken Sie auf Frontend-Konfiguration.
Halten Sie den Mauszeiger über die Weiterleitungsregel
10.1.2.9
und klicken Sie auf Löschen.Klicken Sie auf Frontend-IP und Port hinzufügen.
Geben Sie im Abschnitt Neue Frontend-IP-Adresse und neuer Frontend-Port die folgenden Informationen ein und klicken Sie auf Fertig:
- Name:
fr-ilb
- Subnetzwerk:
lb-subnet
- Interne IP-Adresse:
ip-ilb
- Ports: Alle
- Name:
Überprüfen Sie, bevor Sie fortfahren, ob sich neben der Frontend-Konfiguration ein blaues Häkchen befindet.
Klicken Sie auf Prüfen und abschließen und prüfen Sie die Konfigurationseinstellungen des Load-Balancers.
Klicken Sie auf Erstellen.
gcloud
Löschen Sie die vorhandene Weiterleitungsregel
fr-ilb
.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1
Erstellen Sie eine Ersatzweiterleitungsregel mit demselben Namen, deren Portkonfiguration das Keyword
ALL
verwendet. Die anderen Parameter für die Weiterleitungsregel bleiben unverändert.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=ALL \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Löschen Sie die Weiterleitungsregel, indem Sie eine DELETE
-Anfrage an die Methode forwardingRules.delete
stellen.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST
-Anfrage an die Methode forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "allPorts": true, "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Konfiguration mit Traffic an allen Ports testen
Stellen Sie eine Verbindung zur Client-VM-Instanz her und testen Sie HTTP- und HTTPS-Verbindungen.
Stellen Sie eine Verbindung zur Client-VM her:
gcloud compute ssh vm-client --zone=us-west1-a
Testen Sie die HTTP-Verbindung an allen vier Ports:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Testen Sie die HTTPS-Verbindung an den Ports
443
und8443
. Das Flag--insecure
ist erforderlich, da jeder Apache-Server in der Beispielkonfiguration ein selbst signiertes Zertifikat verwendet.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
Beachten Sie, dass HTTP-Anfragen (an allen vier Ports) und HTTPS-Anfragen (an beiden Ports) auf alle Backend-VMs verteilt werden.
Traffic an mehreren Ports mit zwei Weiterleitungsregeln akzeptieren
Beim Erstellen der Weiterleitungsregel dieses Beispiel-Load-Balancers haben Sie die Ports 80
, 8008
, 8080
und 8088
konfiguriert. Das Startskript, mit dem Apache installiert wird, nimmt die Konfiguration so vor, dass HTTPS-Verbindungen über die Ports 443
und 8443
akzeptiert werden.
Eine alternative Strategie zum Konfigurieren einer einzelnen Weiterleitungsregel für die Annahme von Traffic an allen Ports besteht darin, mehrere Weiterleitungsregeln zu erstellen, die jeweils maximal fünf Ports unterstützen.
Dieses Verfahren zeigt Ihnen, wie Sie die Weiterleitungsregel des Beispiel-Load-Balancers durch zwei Weiterleitungsregeln ersetzen, von denen eine Traffic an den Ports 80
, 8008
, 8080
und 8088
und die andere Traffic an den Ports 443
und 8443
verarbeitet.
Weitere Informationen zur Verwendung dieser Konfiguration finden Sie unter Interne Passthrough-Netzwerk-Load-Balancer und Weiterleitungsregeln mit einer gemeinsamen IP-Adresse.
Console
Rufen Sie in der Google Cloud Console die Seite Weiterleitungsregeln auf.
Klicken Sie in der Spalte Name auf
fr-ilb
und dann auf Löschen.Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
Klicken Sie in der Spalte Name auf
be-ilb
.Klicken Sie auf Bearbeiten.
Klicken Sie auf Frontend-Konfiguration.
Klicken Sie auf Frontend-IP und Port hinzufügen.
Führen Sie im Abschnitt Neue Frontend-IP-Adresse und neuer Frontend-Port folgende Schritte aus:
- Geben Sie für Name
fr-ilb-http
ein. - Wählen Sie für Subnetzwerk die Option
lb-subnet
aus. - Wählen Sie unter Zweck der internen IP-Adresse die Option Freigegeben aus.
- Wählen Sie in der Liste IP-Adresse die Option IP-Adresse erstellen aus, geben Sie die folgenden Informationen ein und klicken Sie auf Reservieren:
- Name:
internal-10-1-2-99
- Statische IP-Adresse: Selbst auswählen
- Benutzerdefinierte IP-Adresse:
10.1.2.99
- Name:
- Wählen Sie für Ports Mehrere aus und geben Sie dann in Nummern portieren
80
,8008
,8080
und8088
aus. - Klicken Sie auf Fertig.
- Geben Sie für Name
Klicken Sie auf Frontend-IP und Port hinzufügen.
Führen Sie im Abschnitt Neue Frontend-IP-Adresse und neuer Frontend-Port folgende Schritte aus:
- Geben Sie für Name
fr-ilb-https
ein. - Wählen Sie für Subnetzwerk die Option
lb-subnet
aus. - Wählen Sie unter Zweck der internen IP-Adresse die Option Freigegeben aus.
- Wählen Sie in der Liste IP-Adresse die Option
internal-10-1-2-99
aus. - Wählen Sie unter Ports die Option Mehrere aus und geben Sie unter Portnummern die Werte
443
und8443
ein. - Klicken Sie auf Fertig.
- Geben Sie für Name
Klicken Sie auf Prüfen und abschließen und prüfen Sie die Konfigurationseinstellungen des Load-Balancers.
Klicken Sie auf Aktualisieren.
gcloud
Löschen Sie die vorhandene Weiterleitungsregel
fr-ilb
.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1
Erstellen Sie eine statische (reservierte) interne IP-Adresse für
10.1.2.99
und setzen Sie das Flag--purpose
aufSHARED_LOADBALANCER_VIP
. Das Flag--purpose
ist erforderlich, damit zwei interne Weiterleitungsregeln dieselbe interne IP-Adresse verwenden können.gcloud compute addresses create internal-10-1-2-99 \ --region=us-west1 \ --subnet=lb-subnet \ --addresses=10.1.2.99 \ --purpose=SHARED_LOADBALANCER_VIP
- Erstellen Sie zwei Ersatzweiterleitungsregeln mit den folgenden Parametern:
gcloud compute forwarding-rules create fr-ilb-http \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
gcloud compute forwarding-rules create fr-ilb-https \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=443,8443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Löschen Sie die Weiterleitungsregel, indem Sie eine DELETE
-Anfrage an die Methode forwardingRules.delete
stellen.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
Erstellen Sie eine statische (reservierte) interne IP-Adresse für 10.1.2.99
und legen Sie deren Zweck auf SHARED_LOADBALANCER_VIP
fest. Stellen Sie dazu eine POST
-Anfrage an die Methode addresses.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses { "name": "internal-10-1-2-99", "address": "10.1.2.99", "prefixLength": 32, "addressType": INTERNAL, "purpose": SHARED_LOADBALANCER_VIP, "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Erstellen Sie zwei Weiterleitungsregeln, indem Sie zwei POST
-Anfragen an die Methode forwardingRules.insert
stellen.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-http", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
{ "name": "fr-ilb-https", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "443", "8443" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Konfiguration mit Traffic an mehreren Ports testen
Stellen Sie eine Verbindung zur Client-VM-Instanz her und testen Sie HTTP- und HTTPS-Verbindungen.
Stellen Sie eine Verbindung zur Client-VM her:
gcloud compute ssh vm-client --zone=us-west1-a
Testen Sie die HTTP-Verbindung an allen vier Ports:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Testen Sie die HTTPS-Verbindung an den Ports
443
und8443
. Das Flag--insecure
ist erforderlich, da jeder Apache-Server in der Beispielkonfiguration ein selbst signiertes Zertifikat verwendet.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
Beachten Sie, dass HTTP-Anfragen (an allen vier Ports) und HTTPS-Anfragen (an beiden Ports) auf alle Backend-VMs verteilt werden.
Sitzungsaffinität verwenden
Die Beispielkonfiguration erstellt einen Backend-Dienst ohne Sitzungsaffinität.
Dieses Verfahren zeigt Ihnen, wie Sie den Backend-Dienst für den als Beispiel verwendeten internen Passthrough-Netzwerk-Load-Balancer aktualisieren, damit er Sitzungsaffinität basierend auf einem Hash verwendet, der aus den IP-Adressen des Clients und der IP-Adresse der internen Weiterleitungsregel des Load-Balancers erstellt wurde.
Informationen zu unterstützten Arten von Sitzungsaffinitäten finden Sie unter Sitzungsaffinitätsoptionen.
Console
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
Klicken Sie auf be-ilb. Das ist der Name des für dieses Beispiel erstellten Backend-Dienstes. Klicken Sie dann auf Bearbeiten.
Auf der Seite Internen Passthrough-Netzwerk-Load-Balancer bearbeiten klicken Sie auf Backend konfigurieren.
Wählen Sie in der Liste Sitzungsaffinität die Option Client-IP aus.
Klicken Sie auf Aktualisieren.
gcloud
Aktualisieren Sie den Backend-Dienst be-ilb
mit dem folgenden gcloud
-Befehl. Geben Sie dabei die Sitzungsaffinität der Client-IP-Adresse an:
gcloud compute backend-services update be-ilb \ --region=us-west1 \ --session-affinity CLIENT_IP
API
Stellen Sie eine PATCH
-Anfrage an die Methode regionBackendServices/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb { "sessionAffinity": "CLIENT_IP" }
Richtlinie für das Verbindungs-Tracking konfigurieren
In diesem Abschnitt erfahren Sie, wie Sie den Backend-Dienst aktualisieren, um die Standardrichtlinie für das Verbindungs-Tracking des Load-Balancers zu ändern.
Eine Richtlinie für das Verbindungs-Tracking enthält die folgenden Einstellungen:
gcloud
Aktualisieren Sie mit dem folgenden gcloud compute
backend-services
-Befehl die Richtlinie für das Verbindungs-Tracking für den Backend-Dienst:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --tracking-mode=TRACKING_MODE \ --connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR \ --idle-timeout-sec=IDLE_TIMEOUT_VALUE
Ersetzen Sie die Platzhalter durch gültige Werte:
BACKEND_SERVICE
: Der Backend-Dienst, den Sie aktualisieren.REGION
: Region des Backend-Dienstes, den Sie aktualisieren.TRACKING_MODE
: der Modus für das Verbindungs-Tracking, der für eingehende Pakete verwendet werden soll. Eine Liste der unterstützten Werte finden Sie unter Tracking-Modus.CONNECTION_PERSISTENCE_BEHAVIOR
: das Verhalten der Verbindungspersistenz, wenn Back-Ends fehlerhaft sind. Eine Liste der unterstützten Werte finden Sie unter Verbindungspersistenz bei fehlerhaften Back-Ends.IDLE_TIMEOUT_VALUE
: die Anzahl der Sekunden, die ein Verbindungs-Tracking-Tabelleneintrag verwaltet werden muss, nachdem der Load-Balancer das letzte dem Eintrag entsprechenden Paket verarbeitet hatSie können dieses Attribut nur ändern, wenn das Verbindungs-Tracking kleiner als 5-Tupel ist (d. h., wenn die Sitzungsaffinität als
CLIENT_IP
oderCLIENT_IP_PROTO
und der Tracking-Modus alsPER_SESSION
konfiguriert ist).Der Standardwert beträgt 600 Sekunden (10 Minuten). Der maximal konfigurierbare Wert für die Zeitüberschreitung bei Inaktivität beträgt 57.600 Sekunden (16 Stunden).
Weiterleitungsregel in einem anderen Subnetz erstellen
Dieses Verfahren erstellt eine zweite IP-Adresse und Weiterleitungsregel in einem anderen Subnetz. Dies dient dazu, Ihnen zu zeigen, dass Sie für einen internen Passthrough-Netzwerk-Load-Balancer mehrere Weiterleitungsregeln erstellen können. Die Region für die Weiterleitungsregel muss dabei mit der Region des Backend-Dienstes übereinstimmen.
Je nach Firewallregeln können Clients in jedem Subnetz in der Region eine der internen IP-Adressen des Passthrough-Netzwerk-Load-Balancers kontaktieren.
Console
Zweites Subnetz hinzufügen
Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.
Klicken Sie auf VPC-Netzwerk erstellen.
Klicken Sie auf
lb-network
.Führen Sie im Abschnitt Subnetze folgende Schritte aus:
- Klicken Sie auf Subnetz hinzufügen.
- Geben Sie im Bereich Neues Subnetz folgende Informationen ein:
- Name:
second-subnet
- Region:
us-west1
- IP-Adressbereich:
10.5.6.0/24
- Name:
- Klicken Sie auf Hinzufügen.
Zweite Weiterleitungsregel hinzufügen
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
Klicken Sie auf den
be-ilb
-Load-Balancer und dann auf Bearbeiten.Klicken Sie auf Frontend-Konfiguration.
Klicken Sie auf Frontend-IP und Port hinzufügen.
Legen Sie im Abschnitt Neue Frontend-IP-Adresse und neuer Frontend-Port die folgenden Felder fest und klicken Sie auf Fertig:
- Name:
fr-ilb-2
- IP-Version: IPv4.
- Subnetzwerk:
second-subnet
- Interne IP-Adresse:
ip-ilb
- Ports:
80
und443
- Name:
Überprüfen Sie, bevor Sie fortfahren, ob sich neben der Frontend-Konfiguration ein blaues Häkchen befindet.
Klicken Sie auf Prüfen und abschließen und prüfen Sie die Konfigurationseinstellungen des Load-Balancers.
Klicken Sie auf Erstellen.
gcloud
Erstellen Sie ein zweites Subnetz im Netzwerk
lb-network
in der Regionus-west1
:gcloud compute networks subnets create second-subnet \ --network=lb-network \ --range=10.5.6.0/24 \ --region=us-west1
Erstellen Sie eine zweite Weiterleitungsregel für die Ports 80 und 443. Die anderen Parameter für diese Regel, einschließlich IP-Adresse und Backend-Dienst, sind dieselben wie für die primäre Weiterleitungsregel
fr-ilb
.gcloud compute forwarding-rules create fr-ilb-2 \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=second-subnet \ --address=10.5.6.99 \ --ip-protocol=TCP \ --ports=80,443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Stellen Sie eine POST
-Anfrage an die Methode subnetworks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "second-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.5.6.0/24", "privateIpGoogleAccess": false }
Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST
-Anfrage an die Methode forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-2", "IPAddress": "10.5.6.99", "IPProtocol": "TCP", "ports": [ "80", "443" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Neue Weiterleitungsregel testen
Stellen Sie eine Verbindung zur Client-VM-Instanz her und testen Sie HTTP- und HTTPS-Verbindungen zu den IP-Adressen.
Stellen Sie eine Verbindung zur Client-VM her:
gcloud compute ssh vm-client --zone=us-west1-a
Testen Sie die HTTP-Konnektivität zu den IP-Adressen:
curl http://10.1.2.99 curl http://10.5.6.99
Testen Sie die HTTPS-Konnektivität. Die Verwendung von
--insecure
ist erforderlich, da für die Apache-Serverkonfiguration im Beispiel selbst signierte Zertifikate verwendet werden.curl https://10.1.2.99 --insecure curl https://10.5.6.99 --insecure
Beachten Sie, dass Anfragen von allen Backend-VMs verarbeitet werden, unabhängig vom verwendeten Protokoll (HTTP oder HTTPS) oder der verwendeten IP-Adresse.
Backend-Teilmengeneinstellung verwenden
Die Beispielkonfiguration erstellt einen Backend-Dienst ohne Teilmengeneinstellung.
Dieses Verfahren zeigt Ihnen, wie Sie die Teilmengeneinstellung im Backend-Dienst für den internen Passthrough-Netzwerk-Load-Balancer des Beispiels aktivieren, damit die Bereitstellung auf eine größere Anzahl von Backend-Instanzen skaliert werden kann.
Sie sollten die Teilmengeneinstellung nur aktivieren, wenn Sie mehr als 250 Backend-VMs auf einem einzelnen Load-Balancer unterstützen müssen.
Weitere Informationen zu diesem Anwendungsfall finden Sie unter Backend-Teilmengeneinstellung.
gcloud
Verwenden Sie den folgenden gcloud
-Befehl, um den Backend-Dienst be-ilb
zu aktualisieren und dabei eine Richtlinie für die Teilmengeneinstellung anzugeben:
gcloud compute backend-services update be-ilb \ --subsetting-policy=CONSISTENT_HASH_SUBSETTING
API
Stellen Sie eine PATCH
-Anfrage an die Methode regionBackendServices/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb { "subsetting": { "policy": CONSISTENT_HASH_SUBSETTING } }
Load-Balancer für die Paketspiegelung erstellen
Mit der Paketspiegelung können Sie Paketdaten von bestimmten Instanzen in einem VPC kopieren und erfassen. Über die erfassten Daten können Sie Sicherheitsbedrohungen erkennen und die Anwendungsleistung überwachen.
Die Paketspiegelung erfordert einen internen Passthrough-Netzwerk-Load-Balancer, um Traffic auf eine Instanzgruppe von Collector-Zielen zu verteilen. So erstellen Sie einen internen Passthrough-Netzwerk-Load-Balancer für die Paketspiegelung:
Console
Konfiguration starten
Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.
- Klicken Sie auf Load-Balancer erstellen.
- Wählen Sie unter Typ des Load Balancers die Option Network Load Balancer (TCP/UDP/SSL) aus und klicken Sie auf Weiter.
- Wählen Sie für Proxy oder Passthrough die Option Passthrough-Load Balancer aus und klicken Sie auf Weiter.
- Wählen Sie für Öffentlich oder intern die Option Intern aus und klicken Sie auf Weiter.
- Klicken Sie auf Konfigurieren.
Grundlegende Konfiguration
- Geben Sie unter Name des Load-Balancers einen Namen ein.
- Wählen Sie unter Region die Region der VM-Instanzen aus, in der Sie Pakete spiegeln möchten.
- Wählen Sie unter Netzwerk das Netzwerk aus, in dem Sie Pakete spiegeln möchten.
- Klicken Sie auf Backend-Konfiguration.
- Wählen Sie im Abschnitt Neues Backend für Instanzgruppe die Instanzgruppe aus, an die Pakete weitergeleitet werden sollen.
- Wählen Sie aus der Liste Systemdiagnose die Option Systemdiagnose erstellen aus, geben Sie die folgenden Informationen ein und klicken Sie auf Speichern:
- Geben Sie unter Name einen Namen für die Systemdiagnose ein.
- Wählen Sie für Protokoll die Option
HTTP
aus. - Geben Sie für Port den Wert
80
ein.
- Klicken Sie auf Front-End-Konfiguration.
- In the New Frontend IP and port section, do the following:
- Geben Sie für Name einen Namen ein.
- Wählen Sie unter Subnetzwerk ein Subnetzwerk in derselben Region wie die zu spiegelnden Instanzen aus.
- Wählen Sie für Ports die Option Alle aus.
- Klicken Sie auf Erweiterte Konfigurationen und dann auf das Kästchen Diesen Load-Balancer für die Paketspiegelung aktivieren.
- Klicken Sie auf Fertig.
- Klicken Sie auf Erstellen.
gcloud
Erstellen Sie eine neue regionale HTTP-Systemdiagnose, um die HTTP-Konnektivität zu einer Instanzgruppe an Port 80 zu testen:
gcloud compute health-checks create http HEALTH_CHECK_NAME \ --region=REGION \ --port=80
Ersetzen Sie dabei Folgendes:
HEALTH_CHECK_NAME
: der Name der SystemdiagnoseREGION
: die Region der VM-Instanzen, für die Sie Pakete spiegeln möchten
Erstellen Sie einen Backend-Dienst für HTTP-Traffic:
gcloud compute backend-services create COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --health-checks-region=REGION \ --health-checks=HEALTH_CHECK_NAME \ --load-balancing-scheme=internal \ --protocol=tcp
Ersetzen Sie dabei Folgendes:
COLLECTOR_BACKEND_SERVICE
ist der Name des Backend-Dienstes.REGION
: die Region der VM-Instanzen, in der Sie Pakete spiegeln möchtenHEALTH_CHECK_NAME
: der Name der Systemdiagnose
Fügen Sie dem Backend-Dienst eine Instanzgruppe hinzu:
gcloud compute backend-services add-backend COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=ZONE
Ersetzen Sie dabei Folgendes:
COLLECTOR_BACKEND_SERVICE
ist der Name des Backend-Dienstes.REGION
: Region der Instanzgruppe.INSTANCE_GROUP
: Name der Instanzgruppe.ZONE
: Zone der Instanzgruppe.
Erstellen Sie eine Weiterleitungsregel für den Backend-Dienst:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --region=REGION \ --network=NETWORK \ --subnet=SUBNET \ --backend-service=COLLECTOR_BACKEND_SERVICE \ --load-balancing-scheme=internal \ --ip-protocol=TCP \ --ports=all \ --is-mirroring-collector
Ersetzen Sie dabei Folgendes:
FORWARDING_RULE_NAME
: der Name der WeiterleitungsregelREGION
ist die Region für die Weiterleitungsregel.NETWORK
ist das Netzwerk für die Weiterleitungsregel.SUBNET
: ein Subnetzwerk in der Region der VMs, in der Sie Pakete spiegeln möchtenCOLLECTOR_BACKEND_SERVICE
: der Backend-Dienst für diesen Load-Balancer
Nächste Schritte
- Wichtige Grundlagen finden Sie unter Übersicht über den internen Passthrough-Network Load Balancern.
- Wichtige Informationen zum Failover finden Sie unter Failover-Konzepte für interne Passthrough-Netzwerk-Load-Balancer.
- Informationen zu verfügbaren DNS-Namen, die der Load-Balancer verwenden kann, finden Sie unter Internes Load-Balancing und DNS-Namen.
- Konfigurationsschritte und ein Beispiel einer Failover-Konfiguration finden Sie unter Failover für interne Passthrough-Netzwerk-Load-Balancer konfigurieren.
- Informationen zum Konfigurieren von Logging und Monitoring für interne Passthrough-Netzwerk-Load-Balancer finden Sie unter Logging und Monitoring für interne Passthrough-Netzwerk-Load-Balancer.
- Informationen zum Zugriff auf interne Passthrough-Netzwerk-Load-Balancer von Peer-Netzwerken, die mit Ihrem VPC-Netzwerk verbunden sind, finden Sie unter Interne Passthrough-Netzwerk-Load-Balancer und verbundene Netzwerke.
- Informationen zur Behebung von Problemen mit dem internen Passthrough-Network Load Balancer finden Sie unter Fehlerbehebung bei internen Passthrough-Network Load Balancern.
- Einrichtung des Load-Balancers bereinigen