In diesem Dokument wird beschrieben, wie Sie einen globalen externen Passthrough-Network Load Balancer erstellen, um TCP-, UDP-, ESP-, GRE-, ICMP- und ICMPv6-Traffic zu verteilen.
Sie können eine solche Konfiguration für Folgendes verwenden:
Load-Balancing für Traffic, der andere IP-Protokolle als TCP oder UDP verwendet.
Mehrere Protokolle mit einem einzelnen Load-Balancer bereitstellen Beispielsweise verarbeiten IPsec-Dienste in der Regel eine Kombination aus ESP- und UDP-basiertem IKE- und NAT-T-Traffic.
Hinweis
Richten Sie Ihr System so ein, dass die folgenden Voraussetzungen erfüllt sind.
Google Cloud CLI installieren
In dieser Anleitung wird die Google Cloud CLI verwendet, um einen globalen externen Passthrough-Network-Load-Balancer zu konfigurieren. Eine Anleitung zur Installation finden Sie unter gcloud CLI installieren.
Erforderliche Rollen
Wenn Sie der Projektersteller sind, wird Ihnen die Rolle „Inhaber“ (roles/owner) zugewiesen. Standardmäßig enthält die Rolle „Inhaber“ (roles/owner) oder die Rolle „Bearbeiter“ (roles/editor) die Berechtigungen, die für die Schritte in diesem Dokument erforderlich sind.
Wenn Sie nicht der Project Creator sind, müssen dem entsprechenden Hauptkonto die erforderlichen Berechtigungen für das Projekt erteilt werden. Ein Hauptkonto kann beispielsweise ein Google-Konto (für Endnutzer) oder ein Dienstkonto sein.
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren eines globalen externen Passthrough-Network Load Balancers mit VM-Instanzgruppen-Backends benötigen:
-
VPC-Netzwerk, Subnetz und Load-Balancing-Komponenten erstellen: Rolle „Compute-Netzwerkadministrator“ (
roles/compute.networkAdmin) -
Firewallregeln erstellen:
Rolle „Compute Security Admin“ (
roles/compute.securityAdmin) -
VM-Instanzen erstellen:
Rolle „Compute Instance Admin“ (
roles/compute.instanceAdmin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Weitere Informationen zu Rollen und Berechtigungen für Cloud Load Balancing finden Sie unter Rollen und Berechtigungen. Weitere Informationen zum Definieren von IAM-Richtlinien mit bedingten Berechtigungen für Weiterleitungsregeln finden Sie unter IAM Conditions für Weiterleitungsregeln.
Einrichtung: Übersicht
Das folgende Diagramm zeigt zwei globale externe Passthrough-Network Load Balancer für dasselbe IP-Adressenpaar, die jeweils eine andere Gruppe von IP-Protokollen und Ports bedienen. Informationen zur Funktionsweise eines globalen externen Passthrough-Network-Load-Balancers finden Sie im Abschnitt Architektur im Übersichtshandbuch.
TCP-Load-Balancer auf Port 80Die Weiterleitungsregel dieses Load Balancers ist so konfiguriert, dass nur
TCP-Traffic erfasst wird, der speziell an Port80eingeht.- Wenn ein Paket an der IP-Adresse einer Weiterleitungsregel ankommt, prüftGoogle Cloud zuerst, ob es sich um ein
TCP-Paket handelt und ob der Zielport genau80ist. - Wenn diese Bedingungen erfüllt sind, wird dieses Paket von dieser
TCP-Weiterleitungsregel erfasst und anhand des referenzierten Backend-Dienstes an ein Backend weitergeleitet.
- Wenn ein Paket an der IP-Adresse einer Weiterleitungsregel ankommt, prüftGoogle Cloud zuerst, ob es sich um ein
L3_DEFAULT-Load-Balancer fürTCP:8080- undUDP-TrafficDie Weiterleitungsregel dieses Load Balancers verwendet das Protokoll
L3_DEFAULTund ist so konfiguriert, dass Traffic an allen Ports akzeptiert wird. In dieser Konfiguration fungiert sie als Auffangregel für Traffic, der nicht von der ersten Weiterleitungsregel verarbeitet wird (z. B. UDP, ICMP und der gesamte TCP-Traffic außer Port 80).- Wenn ein Paket an der IP-Adresse einer Weiterleitungsregel eingeht, die nicht mit der Regel für spezifischen TCP-Traffic an Port 80 übereinstimmt (z. B. wenn es sich um UDP-Traffic, einen ICMP-Ping oder TCP-Traffic an Port 8080 oder 443 handelt), wird dieses Paket von der
L3_DEFAULT-Weiterleitungsregel erfasst. - Fügen Sie eine Firewallregel hinzu, damit nur
TCP:8080- undUDP-Traffic die Back-End-VM-Instanzen erreichen kann. Obwohl dieL3_DEFAULT-Weiterleitungsregel den gesamten IP-Protokoll-Traffic an allen Ports erfasst, beschränkt die Firewallregel den Load-Balancing-Traffic aufTCP:8080- undUDP-Traffic. - Das Paket wird dann anhand des referenzierten Backend-Dienstes an ein Backend weitergeleitet.
Google Cloud priorisiert die spezifischere
TCP-Regel auf Port80, bevor der verbleibende Traffic zu einerL3_DEFAULT-Regel mit derselben IP-Adresse weitergeleitet wird.- Wenn ein Paket an der IP-Adresse einer Weiterleitungsregel eingeht, die nicht mit der Regel für spezifischen TCP-Traffic an Port 80 übereinstimmt (z. B. wenn es sich um UDP-Traffic, einen ICMP-Ping oder TCP-Traffic an Port 8080 oder 443 handelt), wird dieses Paket von der
Netzwerk und Subnetze einrichten
Im Beispiel wird ein VPC-Netzwerk im benutzerdefinierten Modus namens lb-network mit Subnetzen in zwei verschiedenen Regionen verwendet.
In der folgenden Tabelle ist die Kompatibilität zwischen Load-Balancer-Traffic-Typen, Netzwerk-Schnittstellen von Back-End-VMs und VPC-Subnetz-Stack-Typen zusammengefasst. Machen Sie sich mit den Anforderungen an die Kompatibilität der Netzwerkschnittstelle der Backend-VM mit VPC-Subnetzen vertraut, die im Architekturleitfaden für globale externe Passthrough-Network-Load-Balancer beschrieben werden.
| Load-Balancer-Traffic-Typ | Stacktyp der Netzwerkschnittstelle der Backend-VM | Stacktyp des VPC-Subnetzes |
|---|---|---|
| Nur IPv4-Traffic | IPV4_ONLY |
IPV4_ONLY oder IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| Nur IPv6-Traffic | IPV6_ONLY |
IPV6_ONLY oder IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4- und IPv6-Traffic | IPV4_IPV6 |
IPV4_IPV6 |
Die in diesem Beispiel verwendeten Back-Ends befinden sich in den folgenden Regionen und Subnetzen. Sie können zwar auswählen, welcher IPv4-Adressbereich im Subnetz konfiguriert werden soll, Google Cloud weist dem gesamten Subnetz aber automatisch einen /64 IPv6-Adressbereich zu.
Region:
us-west1- Subnetz:
lb-subnet-us, mit primärem IPv4-Adressbereich 10.1.2.0/24.
- Subnetz:
Region:
europe-west2- Subnetz:
lb-subnet-eu, mit primärem IPv4-Adressbereich 10.1.3.0/24.
- Subnetz:
gcloud
VPC-Netzwerk erstellen. In diesem Beispiel heißt das VPC-Netzwerk
lb-network.gcloud compute networks create lb-network --subnet-mode=custom
Erstellen Sie im VPC-Netzwerk (
lb-network) Subnetze in zwei Regionen.Erstellen Sie ein Subnetz mit dem Namen
lb-subnet-usfür die Back-Ends in der Regionus-west1.Verwenden Sie den folgenden Befehl, um ein Nur-IPv4-Subnetz zu erstellen:
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1Verwenden Sie den folgenden Befehl, um ein Dual-Stack-Subnetz zu erstellen:
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1Verwenden Sie den folgenden Befehl, um ein Nur-IPv6-Subnetz zu erstellen:
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV6_ONLY \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --region=us-west1Erstellen Sie ein Subnetz mit dem Namen
lb-subnet-eufür die Back-Ends in der Regioneurope-west2.Verwenden Sie den folgenden Befehl, um ein Nur-IPv4-Subnetz zu erstellen:
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2Verwenden Sie den folgenden Befehl, um ein Dual-Stack-Subnetz zu erstellen:
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2Verwenden Sie den folgenden Befehl, um ein Nur-IPv6-Subnetz zu erstellen:
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV6_ONLY \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2
Globale externe IP-Adressen reservieren
Reservieren Sie zwei globale externe IP-Adressen, eine aus jeder Verfügbarkeitsgruppe. Wie in der Einrichtungsübersicht dargestellt, verwenden die beiden globalen externen Passthrough-Network Load Balancer dasselbe IP-Adressenpaar.
Bei einem globalen externen Passthrough-Network Load Balancer sind die IP-Adressen der Weiterleitungsregel vollständig von VPC-Subnetzen entkoppelt. Die IP-Adressen gehören zu globalen externen IP-Adresspools, die Google gehören, oder zu BYOIP-globalen externen IPv4-öffentlich delegierten Präfixen aus verschiedenen Verfügbarkeitsgruppen und sind keinem VPC-Subnetz zugeordnet.
Wenn Sie eine IPv6-Weiterleitungsregel konfigurieren, werden die IP-Adressen der Weiterleitungsregel als /96-Präfixe zugewiesen.
gcloud
Für IPv4-Traffic:
Reservieren Sie die erste globale externe IP-Adresse mit dem Namen
lb-ipv4-ag0in der Verfügbarkeitsgruppe 0.gcloud beta compute addresses create lb-ipv4-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV4Reservieren Sie die zweite globale externe IP-Adresse
lb-ipv4-ag1in der Verfügbarkeitsgruppe 1.gcloud beta compute addresses create lb-ipv4-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV4
Für IPv6-Traffic:
Reservieren Sie die erste globale externe IP-Adresse mit dem Namen
lb-ipv6-ag0in der Verfügbarkeitsgruppe 0.gcloud beta compute addresses create lb-ipv6-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV6Reservieren Sie die zweite globale externe IP-Adresse
lb-ipv6-ag1in der Verfügbarkeitsgruppe 1.gcloud beta compute addresses create lb-ipv6-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV6
Load-Balancer für TCP-Traffic an Port 80 konfigurieren
Folgen Sie der Anleitung in diesem Abschnitt, um einen globalen externen Passthrough-Network-Load-Balancer zu konfigurieren, der TCP-Traffic auf Port 80 erfasst.
Firewallregeln erstellen, die nur TCP:80-Traffic zulassen
Um Ihre Produktionsumgebung sicher zu konfigurieren, sollten Sie zwei separate Firewallregeln erstellen:
Firewallregel für Systemdiagnosen, die so konfiguriert ist, dass eingehender Traffic aus folgenden Quellen zugelassen wird:
- IP-Bereiche der Systemdiagnose von Google
- das IP-Protokoll und die Ports, die in Ihrer Systemdiagnose konfiguriert sind
Firewallregel für Nutzer-Traffic, die so konfiguriert ist, dass eingehender Traffic von folgenden Quellen zugelassen wird:
- die spezifischen Quell-IP-Bereiche der Clients, die auf Ihren Load Balancer zugreifen müssen, und
- das IP-Protokoll und die Ports, die in Ihren Weiterleitungsregeln konfiguriert sind
Wichtige Hinweise:
Wenn Ihre Anwendung allen Internetnutzern ohne Einschränkung zur Verfügung steht, konfigurieren Sie die Quell-IP-Bereiche
0.0.0.0/0für IPv4-Traffic und::/0für IPv6-Traffic.Wenn Sie Ihre Systemdiagnose so konfiguriert haben, dass das IP-Protokoll und die Ports Ihres Load-Balancings geprüft werden, können Sie eine einzelne Firewallregel konfigurieren, indem Sie die Firewallregeln für Systemdiagnose und Nutzertraffic zusammenführen.
gcloud
Erstellen Sie eine Firewallregel, die den TCP-Traffic aus allen Quellbereichen zulässt, um Ihre Backend-VM-Instanzen auf Port 80 zu erreichen. Dieser Port und dieses Protokoll werden sowohl für das Load-Balancing als auch für die Systemdiagnose verwendet.
Führen Sie den folgenden Befehl aus, um den gesamten IPv4-Traffic zuzulassen:
gcloud compute firewall-rules create allow-traffic-tcp-80-ipv4 \ --network=lb-network \ --target-tags=allow-traffic-tcp-80 \ --allow=tcp:80 \ --source-ranges=0.0.0.0/0Führen Sie den folgenden Befehl aus, um den gesamten IPv6-Traffic zuzulassen:
gcloud compute firewall-rules create allow-traffic-tcp-80-ipv6 \ --network=lb-network \ --target-tags=allow-traffic-tcp-80 \ --allow=tcp:80 \ --source-ranges=::/0
Backend-VM-Instanzen erstellen
Erstellen Sie für dieses Load-Balancing-Beispiel verwaltete Instanzgruppen in den Zonen us-west1-a und europe-west2-a. Die verwaltete Instanzgruppe besteht aus VM-Instanzen, auf denen die Backend-Server des Load Balancers gehostet werden. Zu Demonstrationszwecken wird auf den Backends der Apache-Server auf Port 80 ausgeführt.
Als Reaktion auf Clientanfragen stellen sie ihre eigenen Hostnamen bereit.
Die Instanzgruppe verweist auf eine Instanzvorlage, mit der Backend-VMs erstellt werden.
In der folgenden Tabelle ist die Kompatibilität zwischen Load-Balancer-Traffic-Typen, Netzwerk-Schnittstellen von Back-End-VMs und VPC-Subnetz-Stack-Typen zusammengefasst. Machen Sie sich mit den Anforderungen an die Kompatibilität der Netzwerkschnittstelle der Backend-VM mit VPC-Subnetzen vertraut, die im Architekturleitfaden für globale externe Passthrough-Network-Load-Balancer beschrieben werden.
| Load-Balancer-Traffic-Typ | Stacktyp der Netzwerkschnittstelle der Backend-VM | Stacktyp des VPC-Subnetzes |
|---|---|---|
| Nur IPv4-Traffic | IPV4_ONLY |
IPV4_ONLY oder IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| Nur IPv6-Traffic | IPV6_ONLY |
IPV6_ONLY oder IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4- und IPv6-Traffic | IPV4_IPV6 |
IPV4_IPV6 |
Instanzvorlage erstellen
In diesem Beispiel erstellen Sie regionale Instanzvorlagen in den Regionen us-west1 und europe-west2.
gcloud
Instanzvorlage in der Region
us-west1erstellenVerwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv4-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Dual-Stack-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv6-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-us-tcp-80 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'Instanzvorlage in der Region
europe-west2erstellenVerwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv4-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Dual-Stack-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv6-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-eu-tcp-80 \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-tcp-80 \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
Zonale verwaltete Instanzgruppen erstellen
In diesem Beispiel erstellen Sie zwei zonale verwaltete Instanzgruppen: eine in der Zone us-west1-a und die andere in der Zone europe-west2-a.
gcloud
Erstellen Sie eine verwaltete Instanzgruppe in der Zone
us-west1-a.gcloud compute instance-groups managed create ig-us-tcp-80 \ --template=ig-template-us-tcp-80 \ --size=2 \ --zone=us-west1-a
Erstellen Sie eine verwaltete Instanzgruppe in der Zone
europe-west2-a.gcloud compute instance-groups managed create ig-eu-tcp-80 \ --template=ig-template-eu-tcp-80 \ --size=2 \ --zone=europe-west2-a
Cloud Load Balancing-Komponenten erstellen
So erstellen Sie die Cloud Load Balancing-Komponenten eines globalen externen Passthrough-Network Load Balancers:
gcloud
Erstellen Sie eine TCP-Systemdiagnose, die für die Generierung von
TCP:80Prüfungen konfiguriert ist.gcloud compute health-checks create tcp hc-tcp-80 \ --global \ --port=80
Erstellen Sie einen globalen Backend-Dienst mit dem Load-Balancing-Schema
EXTERNAL_PASSTHROUGH.gcloud beta compute backend-services create lb-backend-service-tcp-80 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
Fügen Sie die Instanzgruppen als Backends zum Backend-Dienst hinzu.
Fügen Sie dem Backend-Dienst die Instanzgruppe in der Zone
us-west1-ahinzu.gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \ --instance-group=ig-us-tcp-80 \ --instance-group-zone=us-west1-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalFügen Sie dem Backend-Dienst die Instanzgruppe in der Zone
europe-west2-ahinzu.gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \ --instance-group=ig-eu-tcp-80 \ --instance-group-zone=europe-west2-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalErstellen Sie eine globale Weiterleitungsregel, um
TCP:80-Traffic zu verarbeiten.Achten Sie darauf, dass die IP-Version Ihrer Weiterleitungsregel mit dem Stacktyp der Netzwerk-Schnittstellen Ihrer Back-End-VM übereinstimmt.
Die Weiterleitungsregel verweist auf IP-Adressen aus jeder Verfügbarkeitsgruppe.
Für IPv4-Traffic:
gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service-tcp-80 \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
Für IPv6-Traffic:
gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service-tcp-80 \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
Load-Balancer für TCP:8080- und UDP-Traffic konfigurieren
Folgen Sie der Anleitung in diesem Abschnitt, um einen globalen externen Passthrough-Network-Load-Balancer für die Verarbeitung von TCP:8080- und UDP-Traffic zu konfigurieren.
Firewallregeln erstellen, die nur TCP:8080- und UDP-Traffic zulassen
Um Ihre Produktionsumgebung sicher zu konfigurieren, sollten Sie zwei separate Firewallregeln erstellen:
Firewallregel für Systemdiagnosen, die so konfiguriert ist, dass eingehender Traffic aus folgenden Quellen zugelassen wird:
- IP-Bereiche der Systemdiagnose von Google
- das IP-Protokoll und die Ports, die in Ihrer Systemdiagnose konfiguriert sind
Firewallregel für Nutzer-Traffic, die so konfiguriert ist, dass eingehender Traffic von folgenden Quellen zugelassen wird:
- die spezifischen Quell-IP-Bereiche der Clients, die auf Ihren Load Balancer zugreifen müssen, und
- das IP-Protokoll und die Ports, die in Ihren Weiterleitungsregeln konfiguriert sind
Wichtige Hinweise:
Wenn Ihre Anwendung allen Internetnutzern ohne Einschränkung zur Verfügung steht, konfigurieren Sie die Quell-IP-Bereiche
0.0.0.0/0für IPv4-Traffic und::/0für IPv6-Traffic.Wenn Sie Ihre Systemdiagnose so konfiguriert haben, dass das IP-Protokoll und die Ports Ihres Load-Balancings geprüft werden, können Sie eine einzelne Firewallregel konfigurieren, indem Sie die Firewallregeln für Systemdiagnose und Nutzertraffic zusammenführen.
gcloud
Erstellen Sie eine Firewallregel, die TCP:8080- und UDP-Traffic aus allen Quellbereichen zu Ihren Backend-VM-Instanzen zulässt.
Diese Protokolle werden für das Load-Balancing verwendet, während der TCP-Port 8080 auch für Systemdiagnosen verwendet wird.
Damit IPv4-Traffic Back-Ends in den Instanzgruppen
ig-us-l3-defaultundig-eu-l3-defaulterreichen kann, erstellen Sie die folgende Firewallregel.gcloud compute firewall-rules create allow-traffic-l3-default-ipv4 \ --network=lb-network \ --target-tags=allow-traffic-l3-default \ --allow=tcp:8080,udp \ --source-ranges=0.0.0.0/0Damit IPv6-Traffic Back-Ends in den Instanzgruppen
ig-us-l3-defaultundig-eu-l3-defaulterreichen kann, erstellen Sie die folgende Firewallregel.gcloud compute firewall-rules create allow-traffic-l3-default-ipv6 \ --network=lb-network \ --target-tags=allow-traffic-l3-default \ --allow=tcp:8080,udp \ --source-ranges=::/0
Backend-VM-Instanzen erstellen
Erstellen Sie für dieses Load-Balancing-Beispiel verwaltete Instanzgruppen in den Zonen us-west1-a und europe-west2-a. Die verwaltete Instanzgruppe besteht aus VM-Instanzen, auf denen die Backend-Server des Load Balancers gehostet werden. Zur Veranschaulichung stellen die Back-Ends ihre eigenen Hostnamen bereit. Mit dem Startskript wird der Apache-Server auch so konfiguriert, dass Port 8080 anstelle von Port 80 überwacht wird.
Die Instanzgruppe verweist auf eine Instanzvorlage, mit der Backend-VMs erstellt werden.
In der folgenden Tabelle ist die Kompatibilität zwischen Load-Balancer-Traffic-Typen, Netzwerk-Schnittstellen von Back-End-VMs und VPC-Subnetz-Stack-Typen zusammengefasst. Machen Sie sich mit den Anforderungen an die Kompatibilität der Netzwerkschnittstelle der Backend-VM mit VPC-Subnetzen vertraut, die im Architekturleitfaden für globale externe Passthrough-Network-Load-Balancer beschrieben werden.
| Load-Balancer-Traffic-Typ | Stacktyp der Netzwerkschnittstelle der Backend-VM | Stacktyp des VPC-Subnetzes |
|---|---|---|
| Nur IPv4-Traffic | IPV4_ONLY |
IPV4_ONLY oder IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| Nur IPv6-Traffic | IPV6_ONLY |
IPV6_ONLY oder IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| IPv4- und IPv6-Traffic | IPV4_IPV6 |
IPV4_IPV6 |
Instanzvorlage erstellen
In diesem Beispiel erstellen Sie regionale Instanzvorlagen in den Regionen us-west1 und europe-west2.
gcloud
Instanzvorlage in der Region
us-west1erstellenVerwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv4-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Dual-Stack-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv6-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-us-l3-default \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet-us \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'Instanzvorlage in der Region
europe-west2erstellenVerwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv4-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --stack-type=IPV4_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Dual-Stack-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV4_IPV6 \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'Verwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv6-Netzwerkschnittstellen zu erstellen.
gcloud compute instance-templates create ig-template-eu-l3-default \ --region=europe-west2 \ --network=lb-network \ --subnet=lb-subnet-eu \ --ipv6-network-tier=PREMIUM \ --stack-type=IPV6_ONLY \ --tags=allow-traffic-l3-default \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
Zonale verwaltete Instanzgruppen erstellen
In diesem Beispiel erstellen Sie zwei zonale verwaltete Instanzgruppen: eine in der Zone us-west1-a und die andere in der Zone europe-west2-a.
gcloud
Erstellen Sie eine verwaltete Instanzgruppe in der Zone
us-west1-a.gcloud compute instance-groups managed create ig-us-l3-default \ --template=ig-template-us-l3-default \ --size=2 \ --zone=us-west1-a
Erstellen Sie eine verwaltete Instanzgruppe in der Zone
europe-west2-a.gcloud compute instance-groups managed create ig-eu-l3-default \ --template=ig-template-eu-l3-default \ --size=2 \ --zone=europe-west2-a
Cloud Load Balancing-Komponenten erstellen
So erstellen Sie die Cloud Load Balancing-Komponenten eines globalen externen Passthrough-Network Load Balancers:
gcloud
Erstellen Sie eine TCP-Systemdiagnose, die für die Generierung von
TCP:8080Prüfungen konfiguriert ist.gcloud compute health-checks create tcp hc-tcp-8080 \ --global \ --port=8080
Erstellen Sie einen globalen Backend-Dienst mit dem Load-Balancing-Schema
EXTERNAL_PASSTHROUGH.gcloud beta compute backend-services create lb-backend-service-l3-default \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-8080 \ --global
Fügen Sie die Instanzgruppen als Backends zum Backend-Dienst hinzu.
Fügen Sie dem Backend-Dienst die Instanzgruppe in der Zone
us-west1-ahinzu.gcloud beta compute backend-services add-backend lb-backend-service-l3-default \ --instance-group=ig-us-l3-default \ --instance-group-zone=us-west1-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalFügen Sie dem Backend-Dienst die Instanzgruppe in der Zone
europe-west2-ahinzu.gcloud beta compute backend-services add-backend lb-backend-service-l3-default \ --instance-group=ig-eu-l3-default \ --instance-group-zone=europe-west2-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.7 \ --globalErstellen Sie eine globale Weiterleitungsregel, deren Feld
ip-protocolaufL3_DEFAULTgesetzt ist, um den gesamten IP-Protokoll-Traffic zu verarbeiten (TCP-Traffic, der nicht Port 80 verwendet, UDP, ESP und ICMP). Sie müssen zwei Weiterleitungsregeln erstellen, um sowohl IPv4- als auch IPv6-Traffic zu verarbeiten.Achten Sie darauf, dass die IP-Version Ihrer Weiterleitungsregel mit dem Stacktyp der Netzwerk-Schnittstellen Ihrer Back-End-VM übereinstimmt.
Die Weiterleitungsregel verweist auf IP-Adressen aus jeder Verfügbarkeitsgruppe.
Für IPv4-Traffic:
gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=L3_DEFAULT \ --ports=all \ --backend-service=lb-backend-service-l3-default \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
Für IPv6-Traffic:
gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=L3_DEFAULT \ --ports=all \ --backend-service=lb-backend-service-l3-default \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
Load-Balancer testen
Nachdem Sie den Load-Balancing-Dienst konfiguriert haben, können Sie Traffic an die externen IP-Adressen des Load-Balancers senden und den Traffic an die Back-End-Instanzen verteilen.
Externe IP-Adressen des Load-Balancers abrufen
Rufen Sie die reservierten IP-Adressen ab, die der Weiterleitungsregel zugeordnet sind. Die Weiterleitungsregel für beide Load-Balancer verwendet dasselbe IP-Adressenpaar. Sie können also entweder
lb-forwarding-rule-tcp-80-ipv4oderlb-forwarding-rule-l3-default-ipv4verwenden, um die externen IP-Adressen aufzurufen.gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \ --globalDadurch werden zwei IP-Adressen zurückgegeben, eine für jede Verfügbarkeitsgruppe. Diese IP-Adressen werden in den folgenden Schritten als
IP_ADDRESS_AVAILABILITY_GROUP_0undIP_ADDRESS_AVAILABILITY_GROUP_1bezeichnet.
Traffic an den Load-Balancer senden
Dieses Verfahren sendet externen Traffic an den Load-Balancer. Führen Sie die folgenden Tests aus, um zu prüfen, ob der TCP-Traffic an Port 80 das Load-Balancing über die Instanzgruppen ig-us-tcp-80 oder ig-eu-tcp-80 ausführt, während der gesamte andere Traffic (TCP:8080 und UDP) das Load-Balancing über die Instanzgruppen ig-us-l3-default oder ig-eu-l3-default ausführt.
Verhalten mit TCP-Anfragen an Port 80 prüfen
Stellen Sie mit
curl(über TCP an Port 80) Webanfragen an den Load-Balancer, um dessen IP-Adresse zu kontaktieren.Führen Sie von Clients mit IPv4-Verbindung den folgenden Befehl aus:
while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0; done
Beachten Sie den vom Befehl
curlzurückgegebenen Text. Im Text wird der Name der Backend-VM angezeigt, die die Antwort generiert, z. B.Page served from: VM_NAME. Antworten stammen nur von Instanzen in den Instanzgruppenig-us-tcp-80oderig-eu-tcp-80.Dies zeigt, dass TCP-Traffic, der an die IP-Adresse des Load-Balancers an Port 80 gesendet wird, von der Weiterleitungsregel
TCPverarbeitet wird.
Verhalten mit TCP-Anfragen an Port 8080 prüfen
Stellen Sie mit curl (über TCP an Port 8080) Webanfragen an den Load-Balancer, um dessen IP-Adresse zu kontaktieren.
Führen Sie von Clients mit IPv4-Verbindung den folgenden Befehl aus:
while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0:8080; done
Beachten Sie den vom Befehl
curlzurückgegebenen Text. Antworten stammen nur von Instanzen in den Instanzgruppenig-us-l3-defaultoderig-eu-l3-default.Dies zeigt, dass TCP-Traffic, der an die IP-Adresse des Load-Balancers an Port 8080 gesendet wird, von der Weiterleitungsregel
L3_DEFAULTverarbeitet wird.
Lokale Routingtabelle nach den IP-Adressen des Load-Balancers durchsuchen
Die lokalen Routingtabellen der Backend-VMs enthalten die IP-Adressen des globalen externen Passthrough-Network Load Balancers.
Wenn Sie die lokalen Routen auf der Backend-VM prüfen möchten, stellen Sie über SSH eine Verbindung zur Backend-VM her und führen Sie den folgenden Befehl aus:
ip route list table local
Die Ausgabe sieht so aus:
local 10.1.2.5 dev ens4 proto kernel scope host src 10.1.2.5 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 local 136.124.69.214 dev ens4 proto 66 scope host local 136.124.83.205 dev ens4 proto 66 scope host
Im vorherigen Beispiel sind 136.124.69.214 und 136.124.83.205 die IP-Adressen, die der Weiterleitungsregel des Load-Balancers zugewiesen sind. Die Zeileneinträge local 136.124.69.214 dev ens4 proto 66 scope host und local 136.124.83.205
dev ens4 proto 66 scope host in der lokalen Routingtabelle der VM ermöglichen es dem Backend, Pakete zu akzeptieren, die an die IP-Adressen des Load-Balancers gerichtet sind. Die Google Cloud Gastumgebung ist für das Hinzufügen dieses Eintrags verantwortlich.
Der Eintrag der lokalen Routingtabelle auf der Backend-VM akzeptiert das Paket für die lokale Hostzustellung. Der Netzwerk-Stack stellt es an die Anwendung zu, die darauf wartet. Die Antwortpakete der Anwendung werden dann direkt an den Client gesendet.
Die IP-Adresse des Load-Balancers ist nicht auf der Netzwerkschnittstelle der VM konfiguriert. Führen Sie den folgenden Befehl aus, um dies zu überprüfen:
ip addr list
Die Ausgabe sieht so aus: Die IP-Adressen (136.124.69.214 und 136.124.83.205) werden in der lokalen Routingtabelle angezeigt, sind aber nicht auf der Netzwerkschnittstelle konfiguriert.
1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens4: mtu 1460 qdisc fq_codel state UP group default qlen 1000 link/ether 42:01:0a:01:02:0d brd ff:ff:ff:ff:ff:ff altname enp0s4 inet 10.1.2.13/32 metric 100 scope global dynamic ens4 valid_lft 84283sec preferred_lft 84283sec inet6 fe80::4001:aff:fe01:20d/64 scope link valid_lft forever preferred_lft forever