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

In dieser Anleitung wird erläutert, wie Sie Backend-Dienst-basierte externe Passthrough Network-Load-Balancer erstellen, die TCP-, UDP-, ESP-, GRE-, ICMP- und ICMPv6-Traffic verteilen. Sie können eine solche Konfiguration verwenden, wenn Sie Traffic mithilfe von anderen IP-Protokollen als TCP oder UDP ausgleichen möchten. Zielpoolbasierte externe Passthrough-Network-Load-Balancer unterstützen diese Funktion nicht.

Wenn Sie einen externen Passthrough-Network-Load-Balancer für andere IP-Protokolle als TCP oder UDP konfigurieren möchten, erstellen Sie eine Weiterleitungsregel mit einem auf L3_DEFAULT gesetzten Protokoll. Diese Weiterleitungsregel verweist auf einen Backend-Dienst, für den das Protokoll auf UNSPECIFIED gesetzt ist.

In diesem Beispiel verwenden wir zwei externe Passthrough-Network-Load-Balancer, um den Traffic auf Backend-VMs in zwei zonal verwaltete Instanzgruppen in der Region us-central1 zu verteilen. Beide Load-Balancer empfangen Traffic über dieselbe externe IP-Adresse.

Ein Load-Balancer hat eine Weiterleitungsregel mit dem Protokoll TCP und Port 80 und der andere Load-Balancer eine Weiterleitungsregel mit dem Protokoll L3_DEFAULT. TCP-Traffic, der an der IP-Adresse an Port 80 ankommt, wird von der Weiterleitungsregel TCP verarbeitet. Anderer Traffic, der nicht mit der TCP-spezifischen Weiterleitungsregel übereinstimmt, wird von der Weiterleitungsregel L3_DEFAULT verarbeitet.

Externer Passthrough-Network-Load-Balancer mit zonal verwalteten Instanzgruppen
Externer Passthrough-Network-Load-Balancer mit zonal verwalteten Instanzgruppen

In diesem Szenario wird der Traffic auf fehlerfreie Instanzen verteilt. Dafür erstellen Sie TCP-Systemdiagnosen, damit der Traffic nur an fehlerfreie Instanzen gesendet wird.

Der externe Passthrough-Network-Load-Balancer ist ein regionaler Load-Balancer. Alle Load-Balancer-Komponenten müssen sich in derselben Region befinden.

Hinweis

Installieren Sie die Google Cloud CLI. Eine vollständige Übersicht über das Tool finden Sie im Leitfaden zur gcloud CLI. Befehle für das Load-Balancing finden Sie im Referenzhandbuch für die API und gcloud.

Wenn Sie die gcloud CLI noch nicht ausgeführt haben, führen Sie zuerst den Befehl gcloud init zur Authentifizierung aus.

In dieser Anleitung wird davon ausgegangen, dass Sie mit Bash vertraut sind.

Netzwerk und Subnetze einrichten

In dem Beispiel auf dieser Seite wird ein VPC-Netzwerk im benutzerdefinierten Modus mit dem Namen lb-network verwendet. Sie können ein VPC-Netzwerk im automatischen Modus verwenden, wenn Sie nur IPv4-Traffic verarbeiten möchten. Für IPv6-Traffic ist jedoch ein Subnetz im benutzerdefinierten Modus erforderlich.

Für IPv6-Traffic ist außerdem ein Dual-Stack-Subnetz erforderlich (stack-type ist auf IPv4_IPv6 gesetzt). Wenn Sie ein Dual-Stack-Subnetz in einem VPC-Netzwerk im benutzerdefinierten Modus erstellen, wählen Sie einen IPv6-Zugriffstyp für das Subnetz aus. In diesem Beispiel setzen wir den Parameter ipv6-access-type des Subnetzes auf EXTERNAL. Dies bedeutet, dass neuen VMs in diesem Subnetz sowohl externe IPv4-Adressen als auch externe IPv6-Adressen zugewiesen werden können.

Die Back-Ends und die für dieses Beispiel verwendeten Load-Balancer-Komponenten befinden sich in dieser Region und in diesem Subnetz:

  • Region: us-central1
  • Subnetz: lb-subnet, mit primärem IPv4-Adressbereich 10.1.2.0/24. Obwohl Sie auswählen, welcher IPv4-Adressbereich im Subnetz konfiguriert wurde, wird der IPv6-Adressbereich automatisch zugewiesen. Google bietet einen (/64) IPv6-CIDR-Block mit fester Größe.

Gehen Sie so vor, um das Netzwerk und das Subnetz zu erstellen:

Console

Führen Sie die folgenden Schritte aus, um IPv4- und IPv6-Traffic zu unterstützen:

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Klicken Sie auf VPC-Netzwerk erstellen.

  3. Geben Sie als Namen lb-network ein.

  4. Im Bereich Subnetze:

    • Legen Sie Modus für Subnetzerstellung auf Benutzerdefiniert fest.
    • Konfigurieren Sie im Abschnitt Neues Subnetz die folgenden Felder und klicken Sie auf Fertig:
      • Name: lb-subnet
      • Region: us-central1
      • IP-Stack-Typ: IPv4 und IPv6 (Dual-Stack)
      • IPv4-Bereich: 10.1.2.0/24
        Sie können zwar einen IPv4-Adressbereich für das Subnetz konfigurieren, Sie können aber nicht den Bereich der IPv6-Adressen für das Subnetz auswählen. Google bietet einen (/64) IPv6-CIDR-Block mit fester Größe.
      • IPv6-Zugriffstyp: Extern
  5. Klicken Sie auf Erstellen.

Führen Sie die folgenden Schritte aus, um nur IPv4-Traffic zu unterstützen:

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Klicken Sie auf VPC-Netzwerk erstellen.

  3. Geben Sie als Namen lb-network ein.

  4. Im Bereich Subnetze:

    • Legen Sie Modus für Subnetzerstellung auf Benutzerdefiniert fest.
    • Konfigurieren Sie im Abschnitt Neues Subnetz die folgenden Felder und klicken Sie auf Fertig:
      • Name: lb-subnet
      • Region: us-central1
      • IP-Stack-Typ: IPv4 (Einzel-Stack)
      • IPv4-Bereich: 10.1.2.0/24
  5. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie das VPC-Netzwerk im benutzerdefinierten Modus:

    gcloud compute networks create lb-network \
        --subnet-mode=custom
    
  2. Erstellen Sie im Netzwerk lb-network ein Subnetz für Back-Ends in der Region us-central1.

    Verwenden Sie für IPv4- und IPv6-Traffic den folgenden Befehl, um ein Dual-Stack-Subnetz zu erstellen:

    gcloud compute networks subnets create lb-subnet \
      --stack-type=IPV4_IPv6 \
      --ipv6-access-type=EXTERNAL \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

    Verwenden Sie für nur IPv4-Traffic den folgenden Befehl:

    gcloud compute networks subnets create lb-subnet \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

Zonale verwaltete Instanzgruppen erstellen

Für dieses Load-Balancing-Szenario erstellen Sie zwei zonal verwaltete Compute Engine-Instanzgruppen und installieren auf jeder Instanz einen Apache-Webserver.

Konfigurieren Sie die Backend-VMs als Dual-Stack, um sowohl IPv4- als auch IPv6-Traffic zu verarbeiten. Setzen Sie den stack-type der VM auf IPv4_IPv6. Die VMs übernehmen außerdem die Einstellung ipv6-access-type (im Beispiel EXTERNAL) aus dem Subnetz. Weitere Informationen zu IPv6-Anforderungen finden Sie in der Übersicht über externen Passthrough-Network-Load-Balancer: Weiterleitungsregeln.

Wenn Sie vorhandene VMs als Back-Ends verwenden möchten, aktualisieren Sie die VMs mit dem Befehl gcloud compute instances network-interfaces update auf Dual-Stack.

Instanzen, die als Backend-VMs für externe Passthrough-Network-Load-Balancer verwendet werden, müssen die entsprechende Linux-Gastumgebung, Windows-Gastumgebung oder andere Prozesse ausführen, die gleichwertige Funktionen bereitstellen.

Instanzgruppe für TCP-Traffic an Port 80 erstellen

Console

  1. Erstellen Sie eine Instanzvorlage. Rufen Sie in der Google Cloud Console die Seite Instanzvorlagen auf.

    Zu Instanzvorlagen

    1. Klicken Sie auf Instanzvorlage erstellen.
    2. Geben Sie für Name ig-us-template-tcp-80 ein.
    3. Das Bootlaufwerk sollte auf ein Debian-Image wie Debian GNU/Linux 10 (Buster) eingestellt sein. Diese Anleitungen verwenden Befehle, die nur für Debian verfügbar sind, z. B. apt-get.
    4. Klicken Sie auf Netzwerk, Laufwerke, Sicherheit, Verwaltung, einzelne Mandanten.
    5. Klicken Sie auf Verwaltung und kopieren Sie das folgende Skript in das Feld Startskript.

      #! /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
      
    6. Klicken Sie auf Netzwerk.

      1. Fügen Sie unter Netzwerktags network-lb-tcp-80 hinzu.
      2. Klicken Sie unter Netzwerkschnittstellen auf die Schnittstelle Standard und konfigurieren Sie die folgenden Felder:
        1. Netzwerk: lb-network
        2. Subnetzwerk: lb-subnet
    7. Klicken Sie auf Erstellen.

  2. Erstellen Sie eine verwaltete Instanzgruppe. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den Instanzgruppen

    1. Klicken Sie auf Instanzgruppe erstellen.
    2. Wählen Sie Neue verwaltete Instanzgruppe (zustandslos) aus. Weitere Informationen finden Sie unter Zustandslose oder zustandsorientierte MIGs.
    3. Geben Sie im Feld Name ig-us-tcp-80 ein.
    4. Wählen Sie unter Ort die Option Einzelne Zone aus.
    5. Wählen Sie us-central1 als Region aus.
    6. Wählen Sie us-central1-a als Zone aus.
    7. Wählen Sie unter Instanzvorlage ig-us-template-tcp-80 aus.
    8. Geben Sie an, wie viele Instanzen die Gruppe umfassen soll.

      Geben Sie für dieses Beispiel unter Autoscaling die folgenden Optionen an:

      • Wählen Sie für Autoscaling-Modus Off:do not autoscale aus.
      • Geben Sie für Maximale Anzahl von Instanzen den Wert 2 ein.
    9. Klicken Sie auf Erstellen.

gcloud

Bei den gcloud-Anleitungen in diesem Handbuch wird davon ausgegangen, dass Sie Cloud Shell oder eine andere Umgebung verwenden, in der Bash installiert ist.

  1. Erstellen Sie mit dem Befehl gcloud compute instance-templates create eine VM-Instanzvorlage mit HTTP-Server.

    Verwenden Sie den folgenden Befehl, um IPv4- und IPv6-Traffic zu verarbeiten.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --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'
    

    Wenn Sie nur IPv4-Traffic verarbeiten möchten, verwenden Sie den folgenden Befehl.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --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. Erstellen Sie mit dem Befehl gcloud compute instance-groups managed create eine verwaltete Instanzgruppe in der Zone.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template-tcp-80
    

Instanzgruppe für TCP-Port 8080, UDP-, ESP- und ICMP-Traffic erstellen

Console

  1. eine Instanzvorlage erstellen Rufen Sie in der Google Cloud Console die Seite Instanzvorlagen auf.

    Zu Instanzvorlagen

    1. Klicken Sie auf Instanzvorlage erstellen.
    2. Geben Sie im Feld Name ig-us-template-l3-default ein.
    3. Das Bootlaufwerk sollte auf ein Debian-Image wie Debian GNU/Linux 10 (Buster) eingestellt sein. Diese Anleitungen verwenden Befehle, die nur für Debian verfügbar sind, z. B. apt-get.
    4. Klicken Sie auf Netzwerk, Laufwerke, Sicherheit, Verwaltung, einzelne Mandanten.
    5. Klicken Sie auf Verwaltung und kopieren Sie das folgende Skript in das Feld Startskript. Mit dem Startskript wird der Apache-Server auch so konfiguriert, dass Port 8080 anstelle von Port 80 überwacht wird.

      #! /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
      
    6. Klicken Sie auf Netzwerk.

      1. Fügen Sie unter Netzwerktags network-lb-l3-default hinzu.
      2. Klicken Sie unter Netzwerkschnittstellen auf die Schnittstelle Standard und konfigurieren Sie die folgenden Felder:
        1. Netzwerk: lb-network
        2. Subnetzwerk: lb-subnet
    7. Klicken Sie auf Erstellen.

  2. Erstellen Sie eine verwaltete Instanzgruppe. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den Instanzgruppen

    1. Klicken Sie auf Instanzgruppe erstellen.
    2. Wählen Sie Neue verwaltete Instanzgruppe (zustandslos) aus. Weitere Informationen finden Sie unter Zustandslose oder zustandsorientierte MIGs.
    3. Geben Sie im Feld Name ig-us-l3-default ein.
    4. Wählen Sie unter Ort die Option Einzelne Zone aus.
    5. Wählen Sie us-central1 als Region aus.
    6. Wählen Sie us-central1-c als Zone aus.
    7. Wählen Sie unter Instanzvorlage ig-us-template-l3-default aus.
    8. Geben Sie an, wie viele Instanzen die Gruppe umfassen soll.

      Geben Sie für dieses Beispiel unter Autoscaling die folgenden Optionen an:

      • Wählen Sie für Autoscaling-Modus Off:do not autoscale aus.
      • Geben Sie für Maximale Anzahl von Instanzen den Wert 2 ein.
    9. Klicken Sie auf Erstellen.

gcloud

Bei den gcloud-Anleitungen in diesem Handbuch wird davon ausgegangen, dass Sie Cloud Shell oder eine andere Umgebung verwenden, in der Bash installiert ist.

  1. Erstellen Sie mit dem Befehl gcloud compute instance-templates create eine VM-Instanzvorlage mit HTTP-Server.

    Mit dem Startskript wird der Apache-Server auch so konfiguriert, dass Port 8080 anstelle von Port 80 überwacht wird.

    Verwenden Sie den folgenden Befehl, um IPv4- und IPv6-Traffic zu verarbeiten.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --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'
    

    Wenn Sie nur IPv4-Traffic verarbeiten möchten, verwenden Sie den folgenden Befehl.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --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. Erstellen Sie mit dem Befehl gcloud compute instance-groups managed create eine verwaltete Instanzgruppe in der Zone.

    gcloud compute instance-groups managed create ig-us-l3-default \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template-l3-default
    

Firewallregeln konfigurieren

Erstellen Sie die folgenden Firewallregeln:

  • Firewallregeln, die externen TCP-Traffic zulassen, um Backend-Instanzen in der Instanzgruppe ig-us-tcp-80 an Port 80 (mit dem Zieltag network-lb-tcp-80) zu erreichen. Erstellen Sie separate Firewallregeln, um IPv4- und IPv6-Traffic zuzulassen.
  • Firewallregeln, die anderen externen Traffic (TCP an Port 8080, UDP, ESP und ICMP) erreichen können, um Backend-Instanzen in der Instanzgruppe ig-us-l3-default (mit Zieltag network-lb-l3-default) zu erreichen. Erstellen Sie separate Firewallregeln, um IPv4- und IPv6-Traffic zuzulassen.

In diesem Beispiel werden Firewallregeln erstellt, die Traffic von allen Quellbereichen zulassen, um Ihre Backend-Instanzen an den konfigurierten Ports zu erreichen. Wenn Sie separate Firewallregeln speziell für die Systemdiagnosetests erstellen möchten, verwenden Sie die Quell-IP-Adressbereiche, die unter Übersicht über Systemdiagnosen: Prüfungs-IP-Bereiche und Firewallregeln dokumentiert sind.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Firewall auf.
    Zu den Firewall-Richtlinien
  2. Damit der IPv4-TCP-Traffic Back-Ends in der Instanzgruppe ig-us-tcp-80 erreichen kann, erstellen Sie die folgende Firewallregel.
    1. Klicken Sie auf Firewallregel erstellen.
    2. Geben Sie für allow-network-lb-tcp-80-ipv4 einen Namen ein.
    3. Wählen Sie unter Netzwerk das Netzwerk aus, für das die Firewallregel gelten soll (Standard).
    4. Wählen Sie unter Ziele Angegebene Zieltags aus.
    5. Geben Sie im Feld Zieltags network-lb-tcp-80 ein.
    6. Legen Sie unter Quellfilter die Option IPv4-Bereiche fest.
    7. Legen Sie für Quell-IP-Bereiche den Wert 0.0.0.0/0 fest, damit Traffic von allen Quellen zulässig ist. Dadurch können sowohl der externe Traffic als auch die Systemdiagnose die Backend-Instanzen erreichen.
    8. Wählen Sie unter Protokolle und Ports die Option Angegebene Protokolle und Ports aus. Klicken Sie anschließend das Kästchen TCP an und geben Sie 80 ein.
    9. Klicken Sie auf Erstellen. Es kann einen Moment dauern, bis die neue Firewallregel in der Console angezeigt wird. Klicken Sie gegebenenfalls auf Aktualisieren, damit die Regel aufgeführt wird.
  3. Damit IPv4 UDP-, ESP- und ICMP-Traffic Back-Ends in der Instanzgruppe ig-us-l3-default erreichen kann, erstellen Sie die folgende Firewallregel.
    1. Klicken Sie auf Firewallregel erstellen.
    2. Geben Sie für allow-network-lb-l3-default-ipv4 einen Namen ein.
    3. Wählen Sie unter Netzwerk das Netzwerk aus, für das die Firewallregel gelten soll (Standard).
    4. Wählen Sie unter Ziele Angegebene Zieltags aus.
    5. Geben Sie im Feld Zieltags network-lb-l3-default ein.
    6. Legen Sie unter Quellfilter die Option IPv4-Bereiche fest.
    7. Legen Sie für Quell-IP-Bereiche den Wert 0.0.0.0/0 fest, damit Traffic von allen Quellen zulässig ist. Dadurch können sowohl der externe Traffic als auch die Systemdiagnose die Backend-Instanzen erreichen.
    8. Wählen Sie unter Protokolle und Ports die Option Angegebene Protokolle und Ports aus.
      1. Klicken Sie das Kästchen TCP an und geben Sie 8080 ein.
      2. Klicken Sie das Kästchen UDP an.
      3. Klicken Sie das Kästchen Andere Protokolle an und geben Sie esp, icmp ein.
    9. Klicken Sie auf Erstellen. Es kann einen Moment dauern, bis die neue Firewallregel in der Console angezeigt wird. Klicken Sie gegebenenfalls auf Aktualisieren, damit die Regel aufgeführt wird.
  4. Damit der IPv6-TCP-Traffic der Instanzgruppe ig-us-tcp-80 erreichen kann, erstellen Sie die folgende Firewallregel.
    1. Klicken Sie auf Firewallregel erstellen.
    2. Geben Sie für allow-network-lb-tcp-80-ipv6 einen Namen ein.
    3. Wählen Sie unter Netzwerk das Netzwerk aus, für das die Firewallregel gelten soll (Standard).
    4. Wählen Sie unter Ziele Angegebene Zieltags aus.
    5. Geben Sie im Feld Zieltags network-lb-tcp-80 ein.
    6. Legen Sie unter Quellfilter die Option IPv6-Bereiche fest.
    7. Legen Sie unter Quell-IPv6-Bereiche den Wert ::/0 fest, damit Traffic von allen Quellen zulässig ist. Dadurch können sowohl der externe Traffic als auch die Systemdiagnose die Backend-Instanzen erreichen.
    8. Wählen Sie unter Protokolle und Ports die Option Angegebene Protokolle und Ports aus. Klicken Sie das Kästchen neben TCP an und geben Sie 80 ein.
    9. Klicken Sie auf Erstellen. Es kann einen Moment dauern, bis die neue Firewallregel in der Console angezeigt wird. Klicken Sie gegebenenfalls auf Aktualisieren, damit die Regel aufgeführt wird.
  5. Erstellen Sie die folgende Firewallregel, damit IPv6 UDP-, ESP- und ICMPv6-Traffic Back-Ends in der Instanzgruppe ig-us-l3-default erreicht. Durch diese Firewallregel können auch TCP-Systemdiagnoseprüfungen die Instanzen auf Port 8080 erreichen.
    1. Klicken Sie auf Firewallregel erstellen.
    2. Geben Sie für allow-network-lb-l3-default-ipv6 einen Namen ein.
    3. Wählen Sie unter Netzwerk das Netzwerk aus, für das die Firewallregel gelten soll (Standard).
    4. Wählen Sie unter Ziele Angegebene Zieltags aus.
    5. Geben Sie im Feld Zieltags network-lb-l3-default ein.
    6. Legen Sie unter Quellfilter die Option IPv6-Bereiche fest.
    7. Legen Sie unter Quell-IPv6-Bereiche den Wert ::/0 fest, damit Traffic von allen Quellen zulässig ist. Dadurch können sowohl der externe Traffic als auch die Systemdiagnose die Backend-Instanzen erreichen.
    8. Wählen Sie unter Protokolle und Ports die Option Angegebene Protokolle und Ports aus.
      1. Klicken Sie das Kästchen neben TCP an und geben Sie 8080 ein.
      2. Klicken Sie das Kästchen neben UDP an.
      3. Klicken Sie das Kästchen neben Sonstige Protokolle an und geben Sie esp, 58 ein.
    9. Klicken Sie auf Erstellen. Es kann einen Moment dauern, bis die neue Firewallregel in der Console angezeigt wird. Klicken Sie gegebenenfalls auf Aktualisieren, damit die Regel aufgeführt wird.

gcloud

  1. Damit der IPv4-TCP-Traffic Back-Ends in der Instanzgruppe ig-us-tcp-80 erreichen kann, erstellen Sie die folgende Firewallregel.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. Damit IPv4 UDP-, ESP- und ICMP-Traffic Back-Ends in der Instanzgruppe ig-us-l3-default erreichen kann, erstellen Sie die folgende Firewallregel. Durch diese Firewallregel können auch TCP-Systemdiagnoseprüfungen die Instanzen auf Port 8080 erreichen.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,icmp \
        --source-ranges=0.0.0.0/0
    
  3. Damit der IPv6-TCP-Traffic der Instanzgruppe ig-us-tcp-80 erreichen kann, erstellen Sie die folgende Firewallregel.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=::/0
    
  4. Erstellen Sie die folgende Firewallregel, damit IPv6 UDP-, ESP- und ICMPv6-Traffic Back-Ends in der Instanzgruppe ig-us-l3-default erreicht. Durch diese Firewallregel können auch TCP-Systemdiagnoseprüfungen die Instanzen auf Port 8080 erreichen.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,58 \
        --source-ranges=::/0
    

Load-Balancer konfigurieren

Als Nächstes richten Sie die Load-Balancer ein. Konfigurieren Sie einen Load-Balancer zum Verarbeiten von TCP-Traffic an Port 80 und einen weiteren zum Verarbeiten von TCP an Port 8080, UDP, ESP und ICMP-Traffic. Beide Load-Balancer verwenden dieselbe externe IP-Adresse für ihre Weiterleitungsregeln.

Durch entsprechende Konfiguration eines Load-Balancers erhalten die Backend-VM-Instanzen Pakete für die von Ihnen konfigurierte statische externe IP-Adresse. Wenn Sie ein von Compute Engine bereitgestelltes Image verwenden, werden die Instanzen automatisch für diese IP-Adresse konfiguriert. Wenn Sie ein anderes Image verwenden, müssen Sie diese Adresse als Alias auf eth0 oder als Loopback auf den einzelnen Instanzen konfigurieren.

Console

gcloud

  1. Reservieren einer statischen externen IP-Adresse.

    Für IPv4-Traffic: Erstellen Sie eine statische externe IP-Adresse für die Load-Balancer.

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    Für IPv6-Traffic: Erstellen Sie einen statischen externen IPv6-Adressbereich für Ihre Load-Balancer. Das verwendete Subnetz muss ein Dual-Stack-Subnetz mit einem externen IPv6-Subnetzbereich sein.

    gcloud compute addresses create network-lb-ipv6 \
        --region us-central1 \
        --subnet lb-subnet \
        --ip-version IPV6 \
        --endpoint-type NETLB
    
  2. Erstellen Sie eine TCP-Systemdiagnose für Port 80. Diese Systemdiagnose wird verwendet, um den Status von Back-Ends in der ig-us-tcp-80-Instanzgruppe zu prüfen.

    gcloud compute health-checks create tcp tcp-health-check-80 \
        --region us-central1 \
        --port 80
    
  3. Erstellen Sie eine TCP-Systemdiagnose für Port 8080. Diese Systemdiagnose wird verwendet, um den Status von Back-Ends in der ig-us-l3-default-Instanzgruppe zu prüfen.

    gcloud compute health-checks create tcp tcp-health-check-8080 \
        --region us-central1 \
        --port 8080
    
  4. Erstellen Sie den ersten Load-Balancer für TCP-Traffic an Port 80.

    1. Erstellen Sie einen Backend-Dienst, dessen Protokoll auf TCP gesetzt ist.

      gcloud compute backend-services create backend-service-tcp-80 \
          --protocol TCP \
          --health-checks tcp-health-check-80 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Fügen Sie die Backend-Instanzgruppe dem Backend-Dienst hinzu:

      gcloud compute backend-services add-backend backend-service-tcp-80 \
          --instance-group ig-us-tcp-80 \
          --instance-group-zone us-central1-a \
          --region us-central1
      
    3. Für IPv4-Traffic: Erstellen Sie eine Weiterleitungsregel, um eingehenden TCP-Traffic an Port 80 an den Backend-Dienst weiterzuleiten. TCP ist das Standardprotokoll der Weiterleitungsregel und muss nicht explizit festgelegt werden.

      Verwenden Sie die in Schritt 1 reservierte IP-Adresse als statische externe IP-Adresse des Load-Balancers.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports 80 \
          --address network-lb-ipv4 \
          --backend-service backend-service-tcp-80
      
    4. Für IPv6-Traffic: Erstellen Sie eine Weiterleitungsregel, um eingehenden TCP-Traffic an Port 80 an den Backend-Dienst weiterzuleiten. TCP ist das Standardprotokoll der Weiterleitungsregel und muss nicht explizit festgelegt werden.

      Verwenden Sie den in Schritt 1 reservierten IPv6-Adressbereich als statische externe IP-Adresse des Load-Balancers. Das verwendete Subnetz muss ein Dual-Stack-Subnetz mit einem externen IPv6-Subnetzbereich sein.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports 80 \
          --backend-service backend-service-tcp-80
      
  5. Erstellen Sie den zweiten Load-Balancer für TCP an Port 8080, UDP-, ESP- und ICMP-Traffic.

    1. Erstellen Sie einen Backend-Dienst, dessen Protokoll auf UNSPECIFIED gesetzt ist.

      gcloud compute backend-services create backend-service-l3-default \
          --protocol UNSPECIFIED \
          --health-checks tcp-health-check-8080 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Fügen Sie die Backend-Instanzgruppe dem Backend-Dienst hinzu:

      gcloud compute backend-services add-backend backend-service-l3-default \
          --instance-group ig-us-l3-default \
          --instance-group-zone us-central1-c \
          --region us-central1
      
    3. Für IPv4-Traffic: Erstellen Sie eine Weiterleitungsregel, dessen Protokoll L3_DEFAULT gesetzt ist, um den gesamten verbleibenden unterstützten IP-Protokoll-Traffic zu verarbeiten (TCP an Port 8080, UDP, ESP und ICMP). Alle Ports müssen mit L3_DEFAULT-Weiterleitungsregeln konfiguriert werden.

      Verwenden Sie dieselbe externe IPv4-Adresse, die Sie für den vorherigen Load Balancer verwendet haben.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --address network-lb-ipv4 \
          --backend-service backend-service-l3-default
      
    4. Für IPv6-Traffic: Erstellen Sie eine Weiterleitungsregel, dessen Protokoll auf L3_DEFAULT gesetzt ist, um den gesamten verbleibenden unterstützten IP-Protokoll-Traffic zu verarbeiten (TCP an Port 8080, UDP, ESP und ICMP). Alle Ports müssen mit L3_DEFAULT-Weiterleitungsregeln konfiguriert werden.

      Verwenden Sie den in Schritt 1 reservierten IPv6-Adressbereich als statische externe IP-Adresse des Load-Balancers. Das verwendete Subnetz muss ein Dual-Stack-Subnetz mit einem externen IPv6-Subnetzbereich sein.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --backend-service backend-service-l3-default
      

Load-Balancer testen

Nachdem Sie den Load-Balancing-Dienst konfiguriert haben, können Sie Traffic an die externe IP-Adresse des Load-Balancers senden und den Traffic an die Backend-Instanzen verteilen.

Externe IP-Adresse des Load-Balancers ermitteln

Console

  1. Wechseln Sie auf der Load-Balancing-Seite Erweitert und gehen Sie zum Tab Weiterleitungsregeln.
    Zum Tab "Weiterleitungsregeln"
  2. Suchen Sie die vom Load-Balancer verwendete Weiterleitungsregel.
  3. Notieren Sie sich die in der Spalte IP-Adresse angegebene externe IP-Adresse für jede IPv4- und IPv6-Weiterleitungsregel.

gcloud: IPv4

Geben Sie den folgenden Befehl ein, um die externe IP-Adresse der vom Load-Balancer verwendeten Weiterleitungsregel aufzurufen.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv4 \
    --region us-central1

In diesem Beispiel wird für beide Weiterleitungsregeln dieselbe IPv4-Adresse verwendet. Daher funktioniert auch die Verwendung von forwarding-rule-l3-default-ipv4.

gcloud: IPv6

Geben Sie den folgenden Befehl ein, um die externe IPv6-Adresse der vom Load-Balancer verwendeten Weiterleitungsregel forwarding-rule-tcp-80-ipv6 aufzurufen:

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv6 \
    --region us-central1

In diesem Beispiel wird für beide Weiterleitungsregeln dieselbe IPv6-Adresse verwendet. Daher funktioniert auch die Verwendung von forwarding-rule-l3-default-ipv6.

Traffic an den Load-Balancer senden

Dieses Verfahren sendet externen Traffic an den Load-Balancer. Führen Sie die folgenden Tests aus, um sicherzustellen, dass der TCP-Traffic an Port 80 das Load-Balancing über die Instanzgruppe ig-us-tcp-80 ausführt, während der gesamte Traffic (TCP an Port 8080, UDP, ESP und ICMP) von der ig-us-l3-default-Instanzgruppe verarbeitet wird.

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; done
      
    • Führen Sie von Clients mit IPv6-Verbindung den folgenden Befehl aus:

      $ while true; do curl -m1 http://IPV6_ADDRESS; done
      

      Wenn die zugewiesene IPv6-Adresse beispielsweise [2001:db8:1:1:1:1:1:1/96] lautet, sollte der Befehl so aussehen:

      $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
      
  2. Beachten Sie den vom Befehl curl zurückgegebenen Text. Der Name der Back-End-VM, die die Antwort generiert, wird in diesem Text angezeigt. Beispiel: Page served from: VM_NAME Antworten sollten nur von Instanzen in der Instanzgruppe ig-us-tcp-80 stammen.

    Wenn anfangs keine Antwort zurückgegeben wird, müssen Sie vor einem erneuten Versuch unter Umständen etwa 30 Sekunden warten, bis die Konfiguration vollständig geladen ist und die Instanzen als fehlerfrei markiert werden:

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 IPV4_ADDRESS:8080; done
    
  • Führen Sie von Clients mit IPv6-Verbindung den folgenden Befehl aus:

    $ while true; do curl -m1 http://IPV6_ADDRESS; done
    

    Wenn die zugewiesene IPv6-Adresse beispielsweise [2001:db8:1:1:1:1:1:1/96] lautet, sollte der Befehl so aussehen:

    $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
    

Beachten Sie den vom Befehl curl zurückgegebenen Text. Antworten sollten nur von Instanzen in der Instanzgruppe ig-us-l3-default stammen.

Dies zeigt, dass der gesamte Traffic, der an die IP-Adresse des Load-Balancers an Port 8080 gesendet wird, nur von Back-Ends in der Instanzgruppe ig-us-l3-default verarbeitet wird.

Verhalten mit ICMP-Anfragen prüfen

Um das Verhalten bei ICMP-Traffic zu prüfen, erfassen Sie die Ausgabe des Befehls tcpdump, um zu bestätigen, dass nur Back-End-VMs in der Instanzgruppe ig-us-l3-default ICMP-Anfragen verarbeiten, die an den Load-Balancer gesendet werden.

  1. Stellen Sie eine SSH-Verbindung zu den Backend-VMs her.

    1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
      Zur Seite "VM-Instanzen"

    2. Klicken Sie in der Liste der VM-Instanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf SSH.

  2. Führen Sie den folgenden Befehl aus, um tcpdump zu verwenden und ICMP-Traffic zu überwachen.

    sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    Lassen Sie das SSH-Fenster geöffnet.

  3. Wiederholen Sie die Schritte 1 und 2 für alle vier Backend-VMs.

  4. Stellen Sie ICMP-Anfragen an den Load-Balancer,

    Zum Testen der IPv4-Antworten verwenden Sie ping, um die IPv4-Adresse des Load-Balancers zu kontaktieren.

    ping IPV4_ADDRESS
    

    Zum Testen der IPv6-Antworten verwenden Sie ping6, um die IPv6-Adresse des Load-Balancers zu kontaktieren.

    ping6 IPV6_ADDRESS
    

    Wenn die zugewiesene IPv6-Adresse beispielsweise [2001:db8:1:1:1:1:1:1/96] lautet, sollte der Befehl so aussehen:

    ping6 2001:db8:1:1:1:1:1:1
    
  5. Kehren Sie zum offenen SSH-Fenster der einzelnen VMs zurück und beenden Sie den Erfassungsbefehl tcpdump. Sie können dazu Strg + C verwenden.

  6. Prüfen Sie für jede VM die Ausgabe des Befehls tcpdump in der Datei icmpcapture.pcap.

    sudo tcpdump -r ~/icmpcapture.pcap -n
    

    Für Back-End-VMs in der Instanzgruppe ig-us-l3-default sollten Dateieinträge wie die folgenden angezeigt werden:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64
    22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64
    22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64
    22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64
    22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64
    22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64
    ...
    

    Für Back-End-VMs in der Instanzgruppe ig-us-tcp-80 sollten Sie sehen, dass keine Pakete empfangen wurden, und die Datei sollte leer sein:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    

Nächste Schritte