In diesem Dokument erfahren Sie, wie Sie einen globalen externen Passthrough-Network Load Balancer erstellen, um den Traffic auf zonale NEG-Backends zu verteilen, die in mehreren Regionen bereitgestellt werden.
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 einen globalen externen Passthrough-Network Load Balancer mit zonalen NEG-Backends, die in den Regionen us-west1 und europe-west2 bereitgestellt werden.
Informationen zur Funktionsweise eines globalen externen Passthrough-Network-Load-Balancers finden Sie im Abschnitt Architektur im Übersichtshandbuch.
In diesem Beispiel werden die folgenden Komponenten konfiguriert:
vier Back-End-VMs:
vm-us-1undvm-us-2in der Zoneus-west1-avm-eu-1undvm-eu-2in der Zoneeurope-west2-a
Zwei zonale NEGs mit
GCE_VM_IP-Endpunkten:- Hängen Sie
nic0vonvm-us-1undvm-us-2an die NEG in der Zoneus-west1-aan. - Hängen Sie
nic0vonvm-eu-1undvm-eu-2an die NEG in der Zoneeurope-west2-aan.
- Hängen Sie
Ein einzelner globaler externer Passthrough-Network Load Balancer, um den
TCP:80-Traffic zwischen den vier Netzwerkendpunkten auszugleichen.
Netzwerk und Subnetze einrichten
Im Beispiel wird ein VPC-Netzwerk im benutzerdefinierten Modus namens lb-network mit Subnetzen in zwei verschiedenen Regionen verwendet.
Sie können einen globalen externen Passthrough-Network Load Balancer so konfigurieren, dass er GCE_VM_IP-Netzwerkendpunkte hat, die auf die Netzwerkschnittstelle einer VM verweisen können. Deren Stacktyp kann entweder „Nur IPv4“ oder „Dual-Stack“ sein.
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 |
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 Netzwerkendpunkte 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-west1Erstellen Sie ein Subnetz mit dem Namen
lb-subnet-eufür die Netzwerkendpunkte in der Regioneurope-west2.Verwenden Sie für nur IPv4-Traffic 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 für IPv4- und IPv6-Traffic 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-west2
Firewallregeln erstellen
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 firewall-allow-traffic-ipv4 \ --network=lb-network \ --target-tags=allow-traffic \ --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 firewall-allow-traffic-ipv6 \ --network=lb-network \ --target-tags=allow-traffic \ --allow=tcp:80 \ --source-ranges=::/0
Backend-VMs erstellen
Für dieses Load-Balancing-Beispiel erstellen Sie vier VMs, wie im Abschnitt Einrichtung – Übersicht beschrieben.
In diesem Beispiel ist die nic0-Schnittstelle der VM dem VPC-Netzwerk lb-network und einem der Subnetze (lb-subnet-us oder lb-subnet-eu) zugeordnet. Die Netzwerkschnittstelle, auf die vom GCE_VM_IP-Endpunkt verwiesen wird, muss sich im selben VPC-Subnetz befinden, das der zonalen NEG zugeordnet ist.
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 |
gcloud
Erstellen Sie die vier VMs, indem Sie den gcloud compute instances create-Befehl viermal ausführen und die folgenden vier Kombinationen für VM_NAME, REGION, ZONE und SUBNET verwenden.
Das Bash-Skript ist für alle vier VMs identisch.
| VM_NAME | REGION | ZONE | SUBNET |
|---|---|---|---|
vm-us-1 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-us-2 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-eu-1 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
vm-eu-2 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
Verwenden Sie den folgenden Befehl, um Backend-VMs mit Nur-IPv4-Netzwerkschnittstellen zu erstellen.
gcloud compute instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_ONLY \
--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 instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
--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 NEGs mit GCE_VM_IP-Endpunkten erstellen
Für dieses Load-Balancing-Beispiel erstellen Sie zwei zonale NEGs mit GCE_VM_IP-Endpunkten.
- Zonale NEG
neg-usin Zoneus-west1-a. Das zonale NEG besteht aus zwei Netzwerkendpunkten:- Hängen Sie
nic0vonvm-us-1undvm-us-2an die zonale NEGneg-usan.
- Hängen Sie
- Zonale NEG
neg-euineurope-west2-a. Das zonale NEG besteht aus zwei Netzwerkendpunkten:- Hängen Sie
nic0vonvm-eu-1undvm-eu-2an die zonale NEGneg-euan.
- Hängen Sie
Wenn Sie eine neue zonale NEG mit GCE_VM_IP-Endpunkten erstellen, müssen Sie die NEG explizit mit einem VPC-Subnetz verknüpfen, bevor Sie der NEG Endpunkte hinzufügen können. Der Load Balancer stellt Pakete an die Netzwerkschnittstelle im VPC-Subnetz zu, das mit der NEG verknüpft ist. In diesem Beispiel verweisen die Endpunkte der zonalen NEG auf nic0 der VMs.
gcloud
Erstellen Sie eine zonale
GCE_VM_IP-NEG mit dem Namenneg-usin der Zoneus-west1-a.gcloud compute network-endpoint-groups create neg-us \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-a \ --network=lb-network \ --subnet=lb-subnet-usFügen Sie der zonalen NEG
neg-usEndpunkte hinzu.gcloud compute network-endpoint-groups update neg-us \ --zone=us-west1-a \ --add-endpoint='instance=vm-us-1' \ --add-endpoint='instance=vm-us-2'Erstellen Sie eine zonale
GCE_VM_IP-NEG mit dem Namenneg-euin der Zoneeurope-west2-a.gcloud compute network-endpoint-groups create neg-eu \ --network-endpoint-type=gce-vm-ip \ --zone=europe-west2-a \ --network=lb-network \ --subnet=lb-subnet-euFügen Sie der zonalen NEG
neg-euEndpunkte hinzu.gcloud compute network-endpoint-groups update neg-eu \ --zone=europe-west2-a \ --add-endpoint='instance=vm-eu-1' \ --add-endpoint='instance=vm-eu-2'
Globale externe IP-Adressen reservieren
Für einen globalen externen Passthrough-Network-Load Balancer sind zwei globale externe IP-Adressen erforderlich, eine aus jeder Verfügbarkeitsgruppe. Diese beiden IP-Adressen werden dann an die Weiterleitungsregel des Load-Balancers angehängt.
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 konfigurieren
Zum Einrichten eines globalen externen Passthrough-Network Load Balancers müssen Sie eine Systemdiagnose, einen Backend-Dienst und eine Weiterleitungsregel erstellen.
gcloud
TCP-Systemdiagnose erstellen, die für die Generierung von
TCP:80-Tests konfiguriert istgcloud 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 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
Fügen Sie dem Backend-Dienst die zonalen NEGs als Backends hinzu.
Fügen Sie dem Backend-Dienst die zonale NEG in der Zone
us-west1-ahinzu.gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-us \ --network-endpoint-group-zone=us-west1-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globalFügen Sie dem Backend-Dienst die zonale NEG in der Zone
europe-west2-ahinzu.gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-eu \ --network-endpoint-group-zone=europe-west2-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globalErstellen Sie eine globale Weiterleitungsregel, um
TCP:80-Traffic zu verarbeiten. 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-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
Für IPv6-Traffic:
gcloud beta compute forwarding-rules create lb-forwarding-rule-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
Load-Balancer testen
Rufen Sie die reservierten IP-Adressen ab, die der Weiterleitungsregel zugeordnet sind.
gcloud beta compute forwarding-rules describe lb-forwarding-rule-ipv4 \ --globalDadurch werden zwei IP-Adressen zurückgegeben, eine für jede Verfügbarkeitsgruppe. Diese IP-Adressen werden als
IP_ADDRESS_AVAILABILITY_GROUP_0undIP_ADDRESS_AVAILABILITY_GROUP_1bezeichnet.Senden Sie Traffic an eine der beiden IP-Adressen.
curl http://IP_ADDRESS_AVAILABILITY_GROUP_0
curl http://IP_ADDRESS_AVAILABILITY_GROUP_1
Je nach Standort und Back-End-Status sollten Sie Antworten von den Back-End-VMs in verschiedenen Regionen sehen.
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 Cloud de Confiance 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