Globalen externen Passthrough-Network-Load-Balancer für mehrere IP-Protokolle einrichten

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:

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.

  1. TCP-Load-Balancer auf Port 80

    Die Weiterleitungsregel dieses Load Balancers ist so konfiguriert, dass nur TCP-Traffic erfasst wird, der speziell an Port 80 eingeht.

    • 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 genau 80 ist.
    • Wenn diese Bedingungen erfüllt sind, wird dieses Paket von dieser TCP-Weiterleitungsregel erfasst und anhand des referenzierten Backend-Dienstes an ein Backend weitergeleitet.
  2. L3_DEFAULT-Load-Balancer für TCP:8080- und UDP-Traffic

    Die Weiterleitungsregel dieses Load Balancers verwendet das Protokoll L3_DEFAULT und 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- und UDP-Traffic die Back-End-VM-Instanzen erreichen kann. Obwohl die L3_DEFAULT-Weiterleitungsregel den gesamten IP-Protokoll-Traffic an allen Ports erfasst, beschränkt die Firewallregel den Load-Balancing-Traffic auf TCP:8080- und UDP-Traffic.
    • Das Paket wird dann anhand des referenzierten Backend-Dienstes an ein Backend weitergeleitet.

    Google Cloud priorisiert die spezifischere TCP-Regel auf Port 80, bevor der verbleibende Traffic zu einer L3_DEFAULT-Regel mit derselben IP-Adresse weitergeleitet wird.

Zwei globale externe Passthrough-Network-Load-Balancer leiten Traffic an VM-Instanzgruppen-Back-Ends weiter, die in den Regionen `us-west1` und `europe-west2` bereitgestellt werden.
Zwei globale externe Passthrough-Network-Load-Balancer für dasselbe IP-Adressenpaar, die jeweils eine andere Gruppe von IP-Protokollen und ‑Ports bedienen (zum Vergrößern klicken).

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.
  • Region: europe-west2

    • Subnetz: lb-subnet-eu, mit primärem IPv4-Adressbereich 10.1.3.0/24.

gcloud

  1. VPC-Netzwerk erstellen. In diesem Beispiel heißt das VPC-Netzwerk lb-network.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Erstellen Sie im VPC-Netzwerk (lb-network) Subnetze in zwei Regionen.

    Erstellen Sie ein Subnetz mit dem Namen lb-subnet-us für die Back-Ends in der Region us-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-west1
    

    Verwenden 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-west1
    

    Verwenden 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-west1
    

    Erstellen Sie ein Subnetz mit dem Namen lb-subnet-eu für die Back-Ends in der Region europe-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-west2
    

    Verwenden 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-west2
    

    Verwenden 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:

  1. Reservieren Sie die erste globale externe IP-Adresse mit dem Namen lb-ipv4-ag0 in der Verfügbarkeitsgruppe 0.

    gcloud beta compute addresses create lb-ipv4-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV4
    
  2. Reservieren Sie die zweite globale externe IP-Adresse lb-ipv4-ag1 in 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:

  1. Reservieren Sie die erste globale externe IP-Adresse mit dem Namen lb-ipv6-ag0 in der Verfügbarkeitsgruppe 0.

    gcloud beta compute addresses create lb-ipv6-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV6
    
  2. Reservieren Sie die zweite globale externe IP-Adresse lb-ipv6-ag1 in 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:

  • 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/0 für IPv4-Traffic und ::/0 fü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/0
    
  • Fü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

  1. Instanzvorlage in der Region us-west1 erstellen

    Verwenden 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'
    
  2. Instanzvorlage in der Region europe-west2 erstellen

    Verwenden 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

  1. 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
    
  2. 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

  1. Erstellen Sie eine TCP-Systemdiagnose, die für die Generierung von TCP:80 Prüfungen konfiguriert ist.

    gcloud compute health-checks create tcp hc-tcp-80 \
      --global \
      --port=80
    
  2. 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
    
  3. Fügen Sie die Instanzgruppen als Backends zum Backend-Dienst hinzu.

    Fügen Sie dem Backend-Dienst die Instanzgruppe in der Zone us-west1-a hinzu.

    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 \
        --global
    

    Fügen Sie dem Backend-Dienst die Instanzgruppe in der Zone europe-west2-a hinzu.

    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 \
        --global
    
  4. Erstellen 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:

  • 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/0 für IPv4-Traffic und ::/0 fü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.

  1. Damit IPv4-Traffic Back-Ends in den Instanzgruppen ig-us-l3-default und ig-eu-l3-default erreichen 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/0
    
  2. Damit IPv6-Traffic Back-Ends in den Instanzgruppen ig-us-l3-default und ig-eu-l3-default erreichen 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

  1. Instanzvorlage in der Region us-west1 erstellen

    Verwenden 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'
    
  2. Instanzvorlage in der Region europe-west2 erstellen

    Verwenden 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

  1. 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
    
  2. 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

  1. Erstellen Sie eine TCP-Systemdiagnose, die für die Generierung von TCP:8080 Prüfungen konfiguriert ist.

    gcloud compute health-checks create tcp hc-tcp-8080 \
      --global \
      --port=8080
    
  2. 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
    
  3. Fügen Sie die Instanzgruppen als Backends zum Backend-Dienst hinzu.

    Fügen Sie dem Backend-Dienst die Instanzgruppe in der Zone us-west1-a hinzu.

    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 \
        --global
    

    Fügen Sie dem Backend-Dienst die Instanzgruppe in der Zone europe-west2-a hinzu.

    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 \
        --global
    
  4. Erstellen Sie eine globale Weiterleitungsregel, deren Feld ip-protocol auf L3_DEFAULT gesetzt 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

  1. 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-ipv4 oder lb-forwarding-rule-l3-default-ipv4 verwenden, um die externen IP-Adressen aufzurufen.

      gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \
          --global
    

    Dadurch 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_0 und IP_ADDRESS_AVAILABILITY_GROUP_1 bezeichnet.

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

  1. 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 curl zurü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 Instanzgruppen ig-us-tcp-80 oder ig-eu-tcp-80.

    Dies zeigt, dass TCP-Traffic, der an die IP-Adresse des Load-Balancers an Port 80 gesendet wird, von der Weiterleitungsregel TCP verarbeitet 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 curl zurückgegebenen Text. Antworten stammen nur von Instanzen in den Instanzgruppen ig-us-l3-default oder ig-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_DEFAULT verarbeitet 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

Nächste Schritte