Internen Passthrough-Netzwerk-Load-Balancer mit VM-Instanzgruppen-Back-Ends für mehrere Protokolle einrichten

Auf dieser Seite finden Sie eine Anleitung zum Erstellen interner Netzwerk-Load-Balancer für das Load-Balancing von Traffic für mehrere Protokolle.

Um einen Load-Balancer für mehrere Protokolle zu konfigurieren, einschließlich TCP und UDP, erstellen Sie eine Weiterleitungsregel mit dem 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 einen internen Passthrough-Netzwerk-Load-Balancer, um den Traffic auf eine Backend-VM in der Region us-west1 zu verteilen. Der Load-Balancer hat eine Weiterleitungsregel mit dem Protokoll L3_DEFAULT, um TCP, UDP, ICMP, ICMPv6, SCTP, ESP, AH und GRE zu verarbeiten.

Load-Balancing von IPv4- und IPv6-Traffic anhand der Protokolle, mit Backend-Diensten zur Verwaltung der Verbindungsverteilung auf eine einzelne zonale Instanzgruppe.
Interner Passthrough-Netzwerk-Load-Balancer für mehrere Protokolle (zum Vergrößern klicken)

Hinweise

Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Anleitung 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.

Load-Balancer für L3_DEFAULT-Traffic einrichten

Die Schritte in diesem Abschnitt beschreiben die folgenden Konfigurationen:

  • Ein Beispiel, das ein VPC-Netzwerk im benutzerdefinierten Modus namens lb-network verwendet. Sie können ein 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.
  • Ein Single-Stack-Subnetz (stack-type ist auf IPv4 gesetzt), das für IPv4-Traffic erforderlich ist. Beim Erstellen eines Single-Stack-Subnetzes in einem VPC-Netzwerk im benutzerdefinierten Modus wählen Sie einen IPv4-Subnetzbereich für das Subnetz aus. Für IPv6-Traffic benötigen wir außerdem ein Dual-Stack-Subnetz (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 INTERNAL. Dies bedeutet, dass neuen VMs in diesem Subnetz sowohl interne IPv4- als auch interne IPv6-Adressen zugewiesen werden können.
  • Firewall-Regeln, die eingehende Verbindung zu Backend-VMs ermöglichen
  • The backend instance group and the load balancer components used for this example are located in this region and subnet:
    • Region: us-west1
    • 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.
  • Eine Backend-VM in einer verwalteten Instanzgruppe in Zone us-west1-a.
  • Eine Client-VM zum Testen von Verbindungen zu den Back-Ends.
  • Einen internen Passthrough-Netzwerk-Load-Balancer mit den folgenden Komponenten:
    • Eine Systemdiagnose für den Backend-Dienst.
    • Ein Backend-Dienst in der Region us-west1, bei dem das Protokoll auf UNSPECIFIED gesetzt ist, um die Verbindungsverteilung zur zonalen Instanzgruppe zu verwalten.
    • Für eine Weiterleitungsregel mit dem Protokoll L3_DEFAULT und dem Port ALL.

Netzwerk, Region und Subnetz konfigurieren

Aktivieren Sie einen internen IPv6-Bereich des VPC-Netzwerks (Virtual Private Cloud), um Subnetze mit internen IPv6-Bereichen zu konfigurieren. Interne IPv6-Subnetzbereiche werden aus diesem Bereich zugewiesen. So erstellen Sie das Beispielnetzwerk und das Subnetz:

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 für Name lb-network ein.

  4. Führen Sie die folgenden Schritte aus, um interne IPv6-Adressbereiche in Subnetzen in diesem Netzwerk zu konfigurieren:

    1. Wählen Sie für Interner VPC-Netzwerk-IPv6-ULA-Bereich den Wert Aktiviert aus.
    2. Wählen Sie unter Internen IPv6-Bereich zuweisen die Option Automatisch oder Manuell aus.
  5. Wählen Sie unter Modus für Subnetzerstellung die Option Benutzerdefiniert aus.

  6. Legen Sie im Abschnitt Neues Subnetz folgende Konfigurationsparameter für das Subnetz fest:

    1. Geben Sie für Name lb-subnet ein.
    2. Wählen Sie bei Region die Option us-west1 aus.
    3. Wählen Sie zum Erstellen eines Dual-Stack-Subnetzes für IP-Stack-Typ IPv4 und IPv6 (Dual-Stack) aus.
    4. Geben Sie unter IPv4-Bereich 10.1.2.0/24 ein.
    5. Wählen Sie für Zugriffstyp IPv6 die Option Intern aus.
  7. Klicken Sie auf Fertig.

  8. Klicken Sie auf Erstellen.

Führen Sie die folgenden Schritte aus, um 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 für Name lb-network ein.

  4. Im Bereich Subnetze:

    • Legen Sie Modus für Subnetzerstellung auf Benutzerdefiniert fest.
    • Geben Sie im Bereich Neues Subnetz folgende Informationen ein:
      • Name: lb-subnet
      • Region: us-west1
      • IP-Stack-Typ: IPv4 (Einzel-Stack)
      • IP-Adressbereich: 10.1.2.0/24
    • Klicken Sie auf Fertig.
  5. Klicken Sie auf Erstellen.

gcloud

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

  1. Führen Sie den gcloud compute networks create-Befehl aus, um ein neues VPC-Netzwerk im benutzerdefinierten Modus zu erstellen.

    Verwenden Sie das --enable-ula-internal-ipv6-Flag, um interne IPv6-Bereiche in allen Subnetzen dieses Netzwerks zu konfigurieren. Mit dieser Option wird ein ULA-Präfix /48 aus dem Bereich fd20::/20 zugewiesen, der von Google Cloud für interne IPv6-Subnetzbereiche verwendet wird.

    gcloud compute networks create lb-network \
     --subnet-mode=custom \
     --enable-ula-internal-ipv6
    
  2. Erstellen Sie in lb-network ein Subnetz für Back-Ends in der Region us-west1.

    Führen Sie den gcloud compute networks subnets create-Befehl aus, um die Subnetze zu erstellen.

    gcloud compute networks subnets create lb-subnet \
     --network=lb-network \
     --range=10.1.2.0/24 \
     --region=us-west1 \
     --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL
    

Verwenden Sie für nur IPv4-Traffic die folgenden Befehle:

  1. Verwenden Sie zum Erstellen des benutzerdefinierten VPC-Netzwerks den gcloud compute networks create-Befehl:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Verwenden Sie den Befehl gcloud compute networks subnets create, um das Subnetz für Back-Ends in der Region us-west1 im Netzwerk lb-network zu erstellen.

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

API

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

  1. Erstellen Sie ein neues VPC-Netzwerk im benutzerdefinierten Modus: Stellen Sie eine POST-Anfrage an die Methode networks.insert.

    Zum Konfigurieren interner IPv6-Bereiche in allen Subnetzen dieses Netzwerks legen Sie enableUlaInternalIpv6 auf true fest. Mit dieser Option wird der Bereich /48 aus dem Bereich fd20::/20 zugewiesen, der von Google für interne IPv6-Subnetzbereiche verwendet wird.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
      "autoCreateSubnetworks": false,
      "name": "lb-network",
      "mtu": MTU,
      "enableUlaInternalIpv6": true,
    }
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID des Projekts, in dem das VPC-Netzwerk erstellt wird.
    • MTU ist die maximale Übertragungseinheit des Netzwerks MTU kann entweder 1460 (Standardeinstellung) oder 1500 sein. Lesen Sie die maximale Übertragungseinheit, bevor Sie die MTU auf 1500 setzen.
  2. Stellen Sie eine POST-Anfrage an die Methode subnetworks.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    {
    "ipCidrRange": "10.1.2.0/24",
    "network": "lb-network",
    "name": "lb-subnet"
    "stackType": IPV4_IPV6,
    "ipv6AccessType": Internal
    }
    

Verwenden Sie für nur IPv4-Traffic die folgenden Schritte:

  1. Stellen Sie eine POST-Anfrage an die Methode networks.insert. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
    "name": "lb-network",
    "autoCreateSubnetworks": false
    }
    
  2. Stellen Sie zwei POST-Anfragen an die Methode subnetworks.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
    {
    "name": "lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "ipCidrRange": "10.1.2.0/24",
    "privateIpGoogleAccess": false
    }
    

Firewallregeln konfigurieren

In diesem Beispiel werden die folgenden Firewallregeln verwendet:

  • fw-allow-lb-access: Eine Eingangsregel, die für alle Ziele im VPC-Netzwerk gilt und Traffic von Quellen in den Bereichen 10.1.2.0/24 zulässt. Durch diese Regel wird eingehender Traffic von jedem Client im Subnetz zugelassen.

  • fw-allow-lb-access-ipv6: Eine Regel für eingehenden Traffic, die für alle Ziele im VPC-Netzwerk gilt und Traffic von Quellen im IPv6-Bereich im Subnetz zulässt. Durch diese Regel wird eingehender IPv6-Traffic von jedem Client im Subnetz zugelassen.

  • fw-allow-ssh: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und eingehende SSH-Verbindungen an TCP-Port 22 von jeder Adresse aus ermöglicht. Sie können einen restriktiveren IP-Quellbereich für diese Regel auswählen. Geben Sie dazu beispielsweise nur die IP-Bereiche des Systems an, von dem aus Sie SSH-Sitzungen initiieren. In diesem Beispiel wird das Ziel-Tag allow-ssh verwendet, um die VMs zu identifizieren, auf die sie angewendet werden soll.

  • fw-allow-health-check: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und Traffic von den Google Cloud-Systemen für Systemdiagnosen zulässt (130.211.0.0/22 und 35.191.0.0/16). In diesem Beispiel wird das Ziel-Tag allow-health-check verwendet, um die Instanzen zu identifizieren, auf die sie angewendet werden soll.

  • fw-allow-health-check-ipv6: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und Traffic von den Google Cloud-Systemen für Systemdiagnosen zulässt (2600:2d00:1:b029::/64). In diesem Beispiel wird das Ziel-Tag allow-health-check-ipv6 verwendet, um die Instanzen zu identifizieren, auf die sie angewendet werden soll.

Ohne diese Firewallregeln blockiert die Standardregel zum Ablehnen von eingehendem Traffic den eingehenden Traffic zu den Backend-Instanzen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite der Firewall-Richtlinien auf.

    Zu den Firewall-Richtlinien

  2. So lassen Sie zu, dass IPv4-TCP-, UDP- und ICMP-Traffic die Backend-Instanzgruppe ig-a erreicht:

    • Klicken Sie auf Firewallregel erstellen.
    • Name: fw-allow-lb-access
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Alle Instanzen im Netzwerk
    • Quellfilter: IPv4-Bereiche.
    • IPv4-Quellbereiche: 10.1.2.0/24
    • Wählen Sie unter Protokolle und Ports die Option Angegebene Protokolle und Ports aus.
      • Wählen Sie TCP aus und geben Sie ALL ein.
      • Wählen Sie UDP aus.
      • Wählen Sie Andere aus und geben Sie ICMP ein.
  3. Klicken Sie auf Erstellen.

  4. So lassen Sie eingehende SSH-Verbindungen zu:

    • Klicken Sie auf Firewallregel erstellen.
    • Name: fw-allow-ssh
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Zieltags
    • Zieltags: allow-ssh
    • Quellfilter: IPv4-Bereiche.
    • IPv4-Quellbereiche: 0.0.0.0/0
    • Protokolle und Ports: Wählen Sie Angegebene Protokolle und Ports aus und geben Sie tcp:22 ein.
  5. Klicken Sie auf Erstellen.

  6. So lassen Sie zu, dass IPv6-TCP-, UDP- und ICMP-Traffic die Backend-Instanzgruppe ig-a erreicht:

    • Klicken Sie auf Firewallregel erstellen.
    • Name: fw-allow-lb-access-ipv6
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Alle Instanzen im Netzwerk
    • Quellfilter: IPv6-Bereiche
    • IPv6-Quellbereiche: IPV6_ADDRESS zugewiesen in lb-subnet
    • Wählen Sie unter Protokolle und Ports die Option Angegebene Protokolle und Ports aus.
      • Wählen Sie TCP aus und geben Sie 0-65535 ein.
      • Wählen Sie UDP aus.
      • Wählen Sie Sonstige aus und geben Sie für das ICMPv6-Protokoll 58 ein.
  7. Klicken Sie auf Erstellen.

  8. So lassen Sie Google Cloud IPv6-Systemdiagnosen zu:

    • Klicken Sie auf Firewallregel erstellen.
    • Name: fw-allow-health-check-ipv6
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Zieltags
    • Zieltags: allow-health-check-ipv6
    • Quellfilter: IPv6-Bereiche
    • Quell-IPv6-Bereiche: 2600:2d00:1:b029::/64
    • Protokolle und Ports: Alle zulassen
  9. Klicken Sie auf Erstellen.

  10. So lassen Sie Google Cloud IPv4-Systemdiagnosen zu:

    • Klicken Sie auf Firewallregel erstellen.
    • Name: fw-allow-health-check
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Zieltags
    • Zieltags: allow-health-check
    • Quellfilter: IPv4-Bereiche.
    • IPv4-Quellbereiche: 130.211.0.0/22 und 35.191.0.0/16
    • Protokolle und Ports: Alle zulassen
  11. Klicken Sie auf Erstellen.

gcloud

  1. Damit der IPv4-TCP-Traffic die Backend-Instanzgruppe ig-a erreichen kann, erstellen Sie die folgende Regel:

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. Erstellen Sie mithilfe des Netzwerk-Tags allow-ssh eine fw-allow-ssh-Firewallregel, um SSH-Verbindungen zu VMs zuzulassen. Wenn Sie source-ranges weglassen, bezieht Google Cloud die Regel auf jede Quelle.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Damit der IPv6-Traffic die Backend-Instanzgruppe ig-a erreichen kann, erstellen Sie die folgende Regel:

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=IPV6_ADDRESS \
        --rules=all
    

    Ersetzen Sie IPV6_ADDRESS durch die in lb-subnet zugewiesene IPv6-Adresse.

  4. Erstellen Sie die Firewallregel fw-allow-health-check, um Google Cloud-Systemdiagnosen zuzulassen.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    
  5. Erstellen Sie die Regel fw-allow-health-check-ipv6, um Google Cloud IPv6-Systemdiagnosen zuzulassen.

    gcloud compute firewall-rules create fw-allow-health-check-ipv6 \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --target-tags=allow-health-check-ipv6 \
       --source-ranges=2600:2d00:1:b029::/64 \
       --rules=tcp,udp,icmp
    

API

  1. Zum Erstellen der Firewallregel fw-allow-lb-access senden Sie eine POST-Anfrage an die Methode firewalls.insert. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-lb-access",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "10.1.2.0/24"
    ],
    "allPorts": true,
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  2. Erstellen Sie die Firewallregel fw-allow-lb-access-ipv6. Stellen Sie dazu eine POST-Anfrage an die Methode firewalls.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
     "name": "fw-allow-lb-access-ipv6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "priority": 1000,
     "sourceRanges": [
       "IPV6_ADDRESS"
     ],
     "allPorts": true,
     "allowed": [
       {
          "IPProtocol": "tcp"
        },
        {
          "IPProtocol": "udp"
        },
        {
          "IPProtocol": "58"
        }
     ],
     "direction": "INGRESS",
     "logConfig": {
        "enable": false
     },
     "disabled": false
    }
    

    Ersetzen Sie IPV6_ADDRESS durch die in lb-subnet zugewiesene IPv6-Adresse.

  3. Senden Sie zum Erstellen der Firewallregel fw-allow-ssh eine POST-Anfrage an die Methode firewalls.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-ssh",
         "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "0.0.0.0/0"
    ],
    "targetTags": [
      "allow-ssh"
    ],
    "allowed": [
     {
       "IPProtocol": "tcp",
       "ports": [
         "22"
       ]
     }
    ],
    "direction": "INGRESS",
    "logConfig": {
     "enable": false
    },
    "disabled": false
    }
    
  4. Senden Sie zum Erstellen der Firewallregel fw-allow-health-check eine POST-Anfrage an die Methode firewalls.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
    ],
    "targetTags": [
      "allow-health-check"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  5. Erstellen Sie die Firewallregel fw-allow-health-check-ipv6. Stellen Sie dazu eine POST-Anfrage an die Methode firewalls.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check-ipv6",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "2600:2d00:1:b029::/64"
    ],
    "targetTags": [
      "allow-health-check-ipv6"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    

Backend-VMs und Instanzgruppen erstellen

Für dieses Load-Balancing-Szenario erstellen Sie eine zonal verwaltete Compute Engine-Instanzgruppe und installieren 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 INTERNAL) aus dem Subnetz. Weitere Informationen zu IPv6-Anforderungen finden Sie in der Übersicht über internen 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 interne Passthrough-Network-Load-Balancer verwendet werden, müssen die entsprechende Linux-Gastumgebung, Windows-Gastumgebung oder andere Prozesse ausführen, die gleichwertige Funktionen bereitstellen.

Zur Vereinfachung der Anleitung führen die Backend-VMs Debian GNU/Linux 10 aus.

Erstellen Sie die Instanzgruppe

Console

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

  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 vm-a1 ein.
    3. Das Bootlaufwerk sollte auf ein Debian-Image wie Debian GNU/Linux 12 (bookworm) eingestellt sein. Diese Anleitungen verwenden Befehle, die nur für Debian verfügbar sind, z. B. apt-get.
    4. Maximieren Sie den Bereich Erweiterte Optionen.
    5. Maximieren Sie den Bereich Verwaltung und kopieren Sie das folgende Script in das Feld Startscript. 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. Maximieren Sie den Bereich Netzwerk und geben Sie Folgendes an:

      1. Fügen Sie unter Netzwerk-Tags allow-ssh und allow-health-check-ipv6 hinzu.
      2. Klicken Sie unter Netzwerkschnittstellen auf die Schnittstelle Standard und konfigurieren Sie die folgenden Felder:
        • Netzwerk: lb-network
        • Subnetzwerk: lb-subnet
        • IP-Stack-Typ: IPv4 und IPv6 (Dual-Stack)
    7. Klicken Sie auf Erstellen.

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

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

    Zu Instanzvorlagen

  2. Klicken Sie auf Instanzvorlage erstellen.

    1. Geben Sie im Feld Name vm-a1 ein.
    2. Das Bootlaufwerk sollte auf ein Debian-Image wie Debian GNU/Linux 12 (bookworm) eingestellt sein. Diese Anleitungen verwenden Befehle, die nur für Debian verfügbar sind, z. B. apt-get.
    3. Maximieren Sie den Bereich Erweiterte Optionen.
    4. Maximieren Sie den Bereich Verwaltung und kopieren Sie das folgende Script in das Feld Startscript. 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
      
    5. Maximieren Sie den Bereich Netzwerk und geben Sie Folgendes an:

      1. Fügen Sie unter Netzwerk-Tags allow-ssh und allow-health-check hinzu.
      2. Klicken Sie unter Netzwerkschnittstellen auf die Schnittstelle Standard und konfigurieren Sie die folgenden Felder:
        • Netzwerk: lb-network
        • Subnetzwerk: lb-subnet
        • IP-Stack-Typ: IPv4 (Einzel-Stack)
    6. Klicken Sie auf Erstellen.

  3. 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-a ein.
    4. Wählen Sie für Standort die Option Einzelne Zone aus.
    5. Wählen Sie us-west1 als Region aus.
    6. Wählen Sie us-west1-a als Zone aus.
    7. Wählen Sie bei Instanzvorlage die Option vm-a1 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 vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPv4_IPv6 \
        --tags=allow-ssh \
        --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'
    

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

    gcloud compute instance-templates create vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --tags=allow-ssh \
        --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. Erstellen Sie mit dem Befehl gcloud compute instance-groups managed create eine verwaltete Instanzgruppe in der Zone.

    gcloud compute instance-groups managed create ig-a \
        --zone us-west1-a \
        --size 2 \
        --template vm-a1
    

API

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

  1. Erstellen Sie eine VM. Stellen Sie dazu POST-Anfragen an die Methode instances.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check-ipv6",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4_IPV6",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    

Führen Sie die folgenden Schritte aus, um IPv4-Traffic zu verarbeiten.

  1. Erstellen Sie eine VM. Stellen Sie dazu POST-Anfragen an die Methode instances.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    
  2. Erstellen Sie eine Instanzgruppe. Stellen Sie dazu eine POST-Anfrage an die Methode instanceGroups.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups
    
    {
    "name": "ig-a",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
    }
    
  3. Fügen Sie jeder Instanzgruppe Instanzen hinzu. Stellen Sie dazu eine POST-Anfrage an die Methode instanceGroups.addInstances.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances
    
    {
    "instances": [
    {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1"
    }
    ]
    }
    

Client-VM erstellen

In diesem Beispiel wird eine Client-VM erstellt, die sich in derselben Region wie die Backend-VMs (Server) befindet. Der Client validiert die Konfiguration des Load-Balancers und demonstriert das erwartete Verhalten, wie im Abschnitt "Test" beschrieben.

Für IPv4- und IPv6-Traffic:

Console

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

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.

  3. Legen Sie als Name vm-client-ipv6 fest.

  4. Setzen Sie Zone auf us-west1-a.

  5. Maximieren Sie den Abschnitt Erweiterte Optionen und nehmen Sie die folgenden Änderungen vor:

    • Maximieren Sie Netzwerk und fügen Sie dann allow-ssh zu den Netzwerk-Tags hinzu.
    • Klicken Sie unter Netzwerkschnittstellen auf Bearbeiten, nehmen Sie die folgenden Änderungen vor und klicken Sie dann auf Fertig:
      • Netzwerk: lb-network
      • Subnetz: lb-subnet
      • IP-Stack-Typ: IPv4 und IPv6 (Dual-Stack)
      • Primäre interne IP: sitzungsspezifisch (automatisch)
      • Externe IP: sitzungsspezifisch
  6. Klicken Sie auf Erstellen.

gcloud

Die Client-VM kann sich in einer beliebigen Zone in derselben Region wie der Load-Balancer befinden. Außerdem kann sie jedes Subnetz in dieser Region verwenden. In diesem Beispiel befindet sich der Client in der Zone us-west1-a und verwendet dasselbe Subnetz wie die Backend-VMs.

gcloud compute instances create vm-client-ipv6 \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --stack-type=IPV4_IPV6 \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

Stellen Sie eine POST-Anfrage an die Methode instances.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client-ipv6",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "stackType": "IPV4_IPV6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

Für IPv4-Traffic.

Console

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

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.

  3. Geben Sie für Name vm-client ein.

  4. Geben Sie für Zone den Wert us-west1-a ein.

  5. Maximieren Sie den Bereich Erweiterte Optionen.

  6. Klicken Sie auf Netzwerk und konfigurieren Sie dann die folgenden Felder:

    1. Geben Sie bei Netzwerk-Tags den Wert allow-ssh ein.
    2. Wählen Sie für Netzwerkschnittstellen Folgendes aus:
      • Netzwerk: lb-network
      • Subnetz: lb-subnet
  7. Klicken Sie auf Erstellen.

gcloud

Die Client-VM kann sich in einer beliebigen Zone in derselben Region wie der Load-Balancer befinden. Außerdem kann sie jedes Subnetz in dieser Region verwenden. In diesem Beispiel befindet sich der Client in der Zone us-west1-a und verwendet dasselbe Subnetz wie die Backend-VMs.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

Stellen Sie eine POST-Anfrage an die Methode instances.insert. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances
 {
    "name": "vm-client",
    "tags": {
      "items": [
        "allow-ssh"
      ]
  },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
      {
        "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
        "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "external-nat",
            "networkTier": "PREMIUM"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "autoDelete": true,
        "deviceName": "vm-client",
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
          "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
          "diskSizeGb": "10"
        }
      }
    ],
    "scheduling": {
      "preemptible": false
     },
    "deletionProtection": false
  }
  

Load-Balancer-Komponenten konfigurieren

Load-Balancer für mehrere Protokolle erstellen

gcloud

  1. Erstellen Sie eine HTTP-Systemdiagnose für Port 80. Diese Systemdiagnose wird verwendet, um den Status von Back-Ends in der ig-a-Instanzgruppe zu prüfen.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. Erstellen Sie einen Backend-Dienst, dessen Protokoll auf UNSPECIFIED gesetzt ist.

    gcloud compute backend-services create be-ilb-l3-default \
        --load-balancing-scheme=internal \
        --protocol=UNSPECIFIED \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. Fügen Sie die Instanzgruppe dem Backend-Dienst hinzu:

    gcloud compute backend-services add-backend be-ilb-l3-default \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. Für IPv6-Traffic: Erstellen Sie eine Weiterleitungsregel mit dem Protokoll L3_DEFAULT, um den gesamten unterstützten IPv6-Protokolltraffic zu verarbeiten. Alle Ports müssen mit L3_DEFAULT-Weiterleitungsregeln konfiguriert werden.

    gcloud compute forwarding-rules create fr-ilb-ipv6 \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --subnet=lb-subnet \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1 \
       --ip-version=IPV6
    
  5. Für IPv4-Traffic: Erstellen Sie eine Weiterleitungsregel mit dem Protokoll L3_DEFAULT, um den gesamten unterstützten IPv4-Protokoll-Traffic zu verarbeiten. Alle Ports müssen mit L3_DEFAULT-Weiterleitungsregeln konfiguriert werden. Verwenden Sie 10.1.2.99 als interne IP-Adresse.

    gcloud compute forwarding-rules create fr-ilb-l3-default \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --network=lb-network \
       --subnet=lb-subnet \
       --address=10.1.2.99 \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1
    

API

  1. Erstellen Sie die Systemdiagnose. Stellen Sie dazu eine POST-Anfrage an die Methode regionHealthChecks.insert. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks
    
    {
    "name": "hc-http-80",
    "type": "HTTP",
    "httpHealthCheck": {
     "port": 80
    }
    }
    
  2. Erstellen Sie den regionalen Backend-Dienst. Stellen Sie dazu eine POST-Anfrage an die Methode regionBackendServices.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    
    {
    "name": "be-ilb-l3-default",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UNSPECIFIED",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  3. Für IPv6-Traffic: Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST-Anfrage an die Methode forwardingRules.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-ipv6",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "ipVersion": "IPV6",
    "networkTier": "PREMIUM"
    }
    
  4. Für IPv4-Traffic: Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST-Anfrage an die Methode forwardingRules.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-l3-default",
    "IPAddress": "10.1.2.99",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "networkTier": "PREMIUM"
    }
    

Load-Balancer testen

Die folgenden Tests zeigen Ihnen, wie Sie die Konfiguration des Load-Balancers validieren und das erwartete Verhalten ermitteln können.

Verbindung von Client-VM testen

Dieser Test nimmt von einer separaten Client-VM Verbindung mit dem Load-Balancer auf, also nicht von einer Backend-VM des Load-Balancers.

gcloud: IPv6

  1. Stellen Sie eine Verbindung zur Client-VM-Instanz her.

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. Beschreiben Sie die IPv6-Weiterleitungsregel fr-ilb-ipv6. Beachten Sie IPV6_ADDRESS in der Beschreibung.

    gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
    
  3. Führen Sie von Clients mit IPv6-Verbindung den folgenden Befehl aus: Ersetzen Sie IPV6_ADDRESS durch die sitzungsspezifische IPv6-Adresse in der Weiterleitungsregel fr-ilb-ipv6.

    curl -m 10 -s http://IPV6_ADDRESS:80
    

    Wenn die zugewiesene IPv6-Adresse beispielsweise [fd20:1db0:b882:802:0:46:0:0/96]:80 lautet, sollte der Befehl so aussehen:

    curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
    

gcloud: IPv4

  1. Stellen Sie eine Verbindung zur Client-VM-Instanz her.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Beschreiben Sie die IPv4-Weiterleitungsregel fr-ilb.

    gcloud compute forwarding-rules describe fr-ilb --region=us-west1
    
  3. Stellen Sie mit curl eine Webanfrage an den Load-Balancer, um dessen IP-Adresse zu kontaktieren. Wiederholen Sie die Anfrage. So können Sie sehen, dass Antworten von verschiedenen Backend-VMs stammen. Der Name der VM, die die Antwort generiert, wird aufgrund des Inhalts von /var/www/html/index.html auf jeder Backend-VM im Text der HTML-Antwort angezeigt. Die erwarteten Antworten sehen so aus: Page served from: vm-a1.

    curl http://10.1.2.99
    

    Die Weiterleitungsregel ist für die Bereitstellung der Ports 80 und 53 konfiguriert. Um Traffic an diese Ports zu senden, hängen Sie nach der IP-Adresse einen Doppelpunkt (:) und die Portnummer an:

    curl http://10.1.2.99:80
    

IP-Adresse des Load-Balancers pingen

Dieser Test zeigt ein erwartetes Verhalten: Sie können die IP-Adresse des Load-Balancers per Ping kontaktieren.

gcloud: IPv6

  1. Stellen Sie eine Verbindung zur Client-VM-Instanz her.

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. Versuchen Sie, die IPv6-Adresse des Load-Balancers per Ping zu kontaktieren. Ersetzen Sie IPV6_ADDRESS durch die sitzungsspezifische IPv6-Adresse in der Weiterleitungsregel fr-ilb-ipv6.

    Sie erhalten eine Antwort und der Befehl ping funktioniert in diesem Beispiel.

    ping6 IPV6_ADDRESS
    

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

    ping6 2001:db8:1:1:1:1:1:1
    

    Die Ausgabe sieht in etwa so aus:

    @vm-client: ping IPV6_ADDRESS
    PING IPV6_ADDRESS (IPV6_ADDRESS) 56(84) bytes of data.
    64 bytes from IPV6_ADDRESS: icmp_seq=1 ttl=64 time=1.58 ms
    

gcloud: IPv4

  1. Stellen Sie eine Verbindung zur Client-VM-Instanz her.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Versuchen Sie, die IPv4-Adresse des Load-Balancers per Ping zu kontaktieren. Sie erhalten eine Antwort und der Befehl ping funktioniert in diesem Beispiel.

    ping 10.1.2.99
    

    Die Ausgabe sieht so aus:

    @vm-client: ping 10.1.2.99
    PING 10.1.2.99 (10.1.2.99) 56(84) bytes of data.
    64 bytes from 10.1.2.99: icmp_seq=1 ttl=64 time=1.58 ms
    64 bytes from 10.1.2.99: icmp_seq=2 ttl=64 time=0.242 ms
    64 bytes from 10.1.2.99: icmp_seq=3 ttl=64 time=0.295 ms
    

Zusätzliche Konfigurationsoptionen

In diesem Abschnitt wird die Konfiguration des Beispiels um alternative und zusätzliche Optionen erweitert. Alle Aufgaben sind optional. Sie können sie in beliebiger Reihenfolge ausführen.

Sie können eine statische interne IP-Adresse für Ihr Beispiel reservieren. Mit dieser Konfiguration können mehrere interne Weiterleitungsregeln dieselbe IP-Adresse mit unterschiedlichen Protokollen und unterschiedlichen Ports verwenden. Die Back-Ends Ihres Beispiel-Load-Balancers müssen sich weiterhin in der Region us-west1 befinden.

Im folgenden Diagramm wird die Architektur für dieses Beispiel dargestellt:

Load-Balancing von Traffic auf Basis der Protokolle mit Backend-Diensten zur Verwaltung der Verbindungsverteilung auf eine einzelne zonale Instanzgruppe.
Ein interner Passthrough-Netzwerk-Load-Balancer für mehrere Protokolle, die eine statische interne IP-Adresse verwenden (zum Vergrößern klicken)

Sie können auch die folgenden Konfigurationen für Weiterleitungsregeln verwenden:

  • Weiterleitungsregeln mit mehreren Ports:

    • Protokoll TCP mit Ports 80,8080
    • Protokoll L3_DEFAULT mit Ports ALL
  • Weiterleitungsregeln mit allen Ports:

    • Protokoll TCP mit Ports ALL
    • Protokoll L3_DEFAULT mit Ports ALL

Statische interne IPv4-Adresse reservieren

Reservieren Sie eine statische interne IP-Adresse für 10.1.2.99 und setzen Sie das Flag --purpose auf SHARED_LOADBALANCER_VIP. Das Flag --purpose ist erforderlich, damit viele Weiterleitungsregeln dieselbe interne IP-Adresse verwenden können.

gcloud

Führen Sie den Befehl gcloud compute addresses create aus:

gcloud compute addresses create internal-lb-ipv4 \
    --region us-west1 \
    --subnet lb-subnet \
    --purpose SHARED_LOADBALANCER_VIP \
    --addresses 10.1.2.99

API

Rufen Sie die Methode addresses.insert auf. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses

Der Anfragetext muss den addressType (der INTERNAL lauten sollte), den name der Adresse und den subnetwork enthalten, zu dem die IP-Adresse gehört. Sie müssen address als 10.1.2.99 angeben.

{
  "addressType": "INTERNAL",
  "name": "internal-lb-ipv4",
  "subnetwork": "regions/us-west1/subnetworks/lb-subnet",
  "purpose": "SHARED_LOADBALANCER_VIP",
  "address": "10.1.2.99"
}

Load-Balancer-Komponenten konfigurieren

Konfigurieren Sie drei Load-Balancer mit den folgenden Komponenten:

  • Der erste Load-Balancer hat eine Weiterleitungsregel mit dem Protokoll TCP und dem Port 80. TCP-Traffic, der bei der internen IP-Adresse an Port 80 ankommt, wird von der Weiterleitungsregel TCP verarbeitet.
  • Der zweite Load-Balancer hat eine Weiterleitungsregel mit dem Protokoll UDP und dem Port 53. UDP-Traffic, der bei der internen IP-Adresse an Port 53 ankommt, wird von der Weiterleitungsregel UDP verarbeitet.
  • Der dritte Load-Balancer hat eine Weiterleitungsregel mit dem Protokoll L3_DEFAULT und dem Port ALL. Anderer Traffic, der nicht von den Weiterleitungsregeln TCP oder UDP übereinstimmt, wird von der Weiterleitungsregel L3_DEFAULT verarbeitet.
  • Alle drei Load-Balancer haben in ihren Weiterleitungsregeln dieselbe statische interne IP-Adresse (internal-lb-ipv4).

Ersten Load-Balancer erstellen

Erstellen Sie den ersten Load-Balancer für TCP-Traffic an Port 80.

gcloud

  1. Erstellen Sie den Backend-Dienst für TCP-Traffic:

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. Fügen Sie die Instanzgruppe dem Backend-Dienst hinzu:

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. Erstellen Sie eine Weiterleitungsregel für den Backend-Dienst. Verwenden Sie die statische reservierte interne IP-Adresse (internal-lb-ipv4) als interne IP-Adresse.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

  1. Erstellen Sie den regionalen Backend-Dienst. Stellen Sie dazu eine POST-Anfrage an die Methode regionBackendServices.insert. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "TCP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    

  2. Create the forwarding rule by making a POST request to the forwardingRules.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "TCP",
    "ports": [
     "80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
    "networkTier": "PREMIUM"
    }
    

Zweiten Load-Balancer erstellen

Erstellen Sie den zweiten Load-Balancer für UDP-Traffic an Port 53.

gcloud

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

    gcloud compute backend-services create be-ilb-udp \
        --load-balancing-scheme=internal \
        --protocol=UDP \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. Fügen Sie die Instanzgruppe dem Backend-Dienst hinzu:

    gcloud compute backend-services add-backend be-ilb-udp \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. Erstellen Sie eine Weiterleitungsregel für den Backend-Dienst. Verwenden Sie die statische reservierte interne IP-Adresse (internal-lb-ipv4) als interne IP-Adresse.

    gcloud compute forwarding-rules create fr-ilb-udp \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=UDP \
        --ports=53 \
        --backend-service=be-ilb-udp \
        --backend-service-region=us-west1
    

API

  1. Erstellen Sie den regionalen Backend-Dienst. Stellen Sie dazu eine POST-Anfrage an die Methode regionBackendServices.insert. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb-udp",
    "backends": [
     {
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
      "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UDP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  2. Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST-Anfrage an die Methode forwardingRules.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-udp",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "UDP",
    "ports": [
     "53"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-udp",
    "networkTier": "PREMIUM"
    }
    

Dritten Load-Balancer erstellen

Erstellen Sie die Weiterleitungsregel des dritten Load-Balancers, um die statische reservierte interne IP-Adresse zu verwenden.

gcloud

Erstellen Sie die Weiterleitungsregel mit dem Protokoll L3_DEFAULT, um den gesamten anderen unterstützten IPv4-Protokoll-Traffic zu verarbeiten. Verwenden Sie die statische reservierte interne IP-Adresse (internal-lb-ipv4) als interne IP-Adresse.

gcloud compute forwarding-rules create fr-ilb-l3-default \
    --region=us-west1 \
    --load-balancing-scheme=internal \
    --network=lb-network \
    --subnet=lb-subnet \
    --address=internal-lb-ipv4 \
    --ip-protocol=L3_DEFAULT \
    --ports=ALL \
    --backend-service=be-ilb-l3-default \
    --backend-service-region=us-west1

API

Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST-Anfrage an die Methode forwardingRules.insert. Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-l3-default",
"IPAddress": "internal-lb-ipv4",
"IPProtocol": "L3_DEFAULT",
"ports": [
  "ALL"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
"networkTier": "PREMIUM"
}

Load-Balancer testen

Führen Sie zum Testen des Load-Balancers die Schritte im vorherigen Abschnitt aus.

Nächste Schritte