IPv6-Dual-Stack für Cloud Service Mesh konfigurieren

Auf dieser Seite erfahren Sie, wie Sie IPv6-Traffic in Cloud Service Mesh mit proxybasierten Load-Balancern von Traffic Director (TD) ausgleichen. Außerdem wird beschrieben, wie Sie von IPv4-basierten Bereitstellungen zu Dual-Stack -Bereitstellungen (IPv4 und IPv6) migrieren und wie Sie von Dual-Stack zu IPv4 migrieren.

Bei Dual-Stack-Bereitstellungen können Sie angeben, ob IPv4 oder IPv6 an das Service-Backend gesendet werden soll. Der Proxy oder gRPC-Client testet jeden Datenpfad in Ihrer bevorzugten Reihenfolge und wählt den aus, der Ihren Präferenzen entspricht und unterstützt wird.

Dual-Stack-Funktionen werden in gRPC 1.66.1 und höher für C++ und Python, 1.12 und höher für Node und 1.71 und höher für Go unterstützt. Java wird derzeit nicht unterstützt.

Versionen von gRPC ohne Dual-Stack-Unterstützung (z.B. Go und Versionen vor 1.66 in anderen Sprachen) verwenden nur die erste Adresse jedes Endpunkts in der von TD gesendeten Reihenfolge.

Hinweis

In dieser Anleitung wird davon ausgegangen, dass Sie Folgendes bereits getan haben:

IPv6-Backend-Dienst einrichten

In diesem Abschnitt konfigurieren Sie Folgendes:

  • Zwei Backend-Gruppen (entweder Instanzgruppen, verwaltete Instanzgruppen oder Netzwerk-Endpunktgruppen), eine in jeder von zwei verschiedenen Zonen in derselben Region.
  • Zwei VM-Instanzen in jeder Backend-Gruppe.
  • Eine Systemdiagnose zur Prüfung der Instanzintegrität.
  • Firewallregeln, mit denen Systemdiagnosen Backends erreichen können.
  • Ein Backend-Dienst.
  • Der Backend-Dienst, der die beiden konfigurierten Backend-Gruppen enthält.

Subnetz für Backends einrichten

Mit dem folgenden Befehl werden interne Adressbereiche für IPv4 und IPv6 zugewiesen. VMs im Subnetz können entweder mit dem einen oder dem anderen Adresstyp zugewiesen werden.

Es werden nur Subnetze im benutzerdefinierten Modus unterstützt. Der automatische Modus wird nicht unterstützt. Sie können für das gesamte VPC-Netzwerk in den benutzerdefinierten Modus wechseln und dann die IPv6-Backends (verwaltete Instanzgruppen oder Netzwerk-Endpunktgruppen) auffüllen.

  1. Dual-Stack-Netzwerk erstellen:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. Dual-Stack-Subnetz für Backend-VMs erstellen:

    gcloud compute networks subnets create SUBNET \
        --network=NETWORK \
        --range=PRIMARY_IPv4_RANGE \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=IPv6_ACCESS_TYPE \
        --region=REGION
    

    Ersetzen Sie Folgendes:

    • SUBNET: ein Name für das neue Subnetz.
    • NETWORK: der Name des VPC-Netzwerks mit dem neuen Subnetz.
    • PRIMARY_IPv4_RANGE: der primäre IPv4-Bereich für das neue Subnetz in CIDR-Notation. Weitere Informationen finden Sie unter IPv4-Subnetzbereiche.
    • IPv6_ACCESS_TYPE: der IPv6-Zugriffstyp. Er kann EXTERNAL oder INTERNAL sein.
    • REGION: die Google Cloud Region, in der das neue Subnetz erstellt wird.

Backends einrichten

Sie können entweder verwaltete Instanzgruppen, nicht verwaltete Instanzgruppen, oder Netzwerk-Endpunktgruppen verwenden.

Verwaltete Instanzgruppe

  1. Verwaltete Instanzgruppe mit dual-stack-gateway-template erstellen:

    gcloud alpha compute instance-templates create dual-stack-gateway-template \
    --region=REGION \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=dual-stack-http-server \
    --network=NETWORK \
    --subnet=SUBNET \
    --stack-type=IPV4_IPV6 \
    --service-proxy=enabled,scope=gateway-proxy
    
  2. Verwaltete Instanzgruppe für Gateway-Proxy erstellen:

    gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-gateway-template
    
  3. Verwaltete Instanzgruppe für Backend erstellen:

    gcloud compute instance-templates create dual-stack-backend-template \
      --region=REGION \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=dual-stack-http-server \
      --network=NETWORK \
      --subnet=SUBNET \
      --stack-type=IPV4_IPV6 \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype <html><body><h1>'\`dual-stack-server\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
    
    gcloud compute instance-groups managed create dual-stack-ZONE-backend-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-backend-template
    
  4. Benannten Port zur verwalteten Instanzgruppe hinzufügen:

    gcloud compute instance-groups set-named-ports us-ig-1 \
      --named-ports http:80 \
      --zone ZONE \
    
    gcloud compute instance-groups set-named-ports us-ig-2 \
      --named-ports http:80 \
      --zone ZONE
    

    Wir verwenden separate Systemdiagnosen für das Load-Balancing und für die automatische Reparatur. Systemdiagnosen für das Load-Balancing sind in der Regel aggressiver konfiguriert, da sie darüber entscheiden, ob eine VM Nutzertraffic empfängt und ob Sie Traffic bei Bedarf schnell umleiten möchten.

    Bei Systemdiagnosen für die automatische Reparatur hingegen werden von Compute Engine fehlerhafte VMs proaktiv ausgetauscht. Daher sollte diese Systemdiagnose konservativer sein als jene für das Load-Balancing. Die automatische Reparatur für Dual-Stack-VMs basiert auf IPv4-Systemdiagnosen.

  5. Systemdiagnose erstellen:

    gcloud compute health-checks create http dualstack-health-check-http \
    
  6. Achten Sie darauf, dass Firewallregeln Systemdiagnosen zulassen:

    IPv4

    gcloud compute firewall-rules create dual-stack-allow-ipv4-health-check \
    --network=NETWORK \
    --action=ALLOW \
    --direction=INGRESS \
    --source-ranges=35.191.0.0/16,130.211.0.0/22 \
    --target-tags=dual-stack-http-server \
    --rules=tcp:22,80
    

    IPv6

    gcloud compute firewall-rules create dual-stack-allow-ipv6-health-check \
    --network=NETWORK \
    --action=ALLOW \
    --direction=INGRESS \
    --source-ranges=::/0 \
    --target-tags=dual-stack-http-server \
    --rules=tcp:22,80
    
  7. Wenden Sie die Systemdiagnose auf die verwaltete Instanzgruppe an. Konfigurieren Sie dazu eine Richtlinie zur automatischen Reparatur:

    gcloud compute instance-groups managed update us-mig-1 \
      --health-check dualstack-health-check-http \
      --initial-delay 300 \
      --zone us-central1-a
    

Mit der Einstellung für die anfängliche Verzögerung wird eine potenzielle vorzeitige Neuerstellung der VM durch die automatische Reparatur verzögert, wenn die VM gerade gestartet wird. Der Timer für die anfängliche Verzögerung beginnt, wenn sich das Feld currentAction der VM in VERIFYING ändert.

Nicht verwaltete Instanzgruppen

  1. Instanzgruppen konfigurieren:

    gcloud compute instance-groups unmanaged create us-ig-1 \
    --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged create us-ig-2 \
    --zone us-central1-b
    
  2. Zwei Dual-Stack-VM-Instanzen in jeder Instanzgruppe erstellen:

    gcloud compute instances create inst-us-central1-1 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-a \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create inst-us-central1-2 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-a \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create inst-us-central1-3 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-b \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create inst-us-central1-4 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-b \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6
    

    Die IPv6-Adresse wird automatisch zugewiesen.

  3. VMs zu Instanzgruppen hinzufügen:

    gcloud compute instance-groups unmanaged add-instances us-ig-1 \
    --instances inst-us-central1-1,inst-us-central1-2 \
    --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged add-instances us-ig-2 \
    --instances inst-us-central1-3,inst-us-central1-4 \
    --zone us-central1-b
    

NEG

  1. Backend hinzufügen, bei dem --network-endpoint-type GCE_VM_IP_PORT ist:

    gcloud compute network-endpoint-groups create us-neg-lb-1 \
      --network=NETWORK SUBNET \
      --zone=us-central1-a --network-endpoint-type=GCE_VM_IP_PORT \
    
    gcloud compute network-endpoint-groups create us-neg-lb-2 \
      --network=NETWORK SUBNET \
      --zone=us-central1-b  --network-endpoint-type=GCE_VM_IP_PORT
    
  2. Endpunkte zur Netzwerk-Endpunktgruppe hinzufügen:

    gcloud compute network-endpoint-groups update us-neg-lb-1 \--zone=us-central1-a \
    --add-endpoint 'instance=inst-us-central1-1,ip=IPV4_ADRS_1, ipv6=IPV6_ADRS_1,port=80' \
    --add-endpoint 'instance=inst-us-central1-2,ip=IPV4_ADRS_2, ipv6=IPV6_ADRS_2,port=80' \
    
    gcloud compute network-endpoint-groups update us-neg-lb-2 --zone=us-central1-b \
    --add-endpoint 'instance=inst-us-central1-3,ip=IPV4_ADRS_3, ipv6=IPV6_ADRS_3,port=80' \
    --add-endpoint 'instance=inst-us-central1-4,ip=IPV4_ADRS_4,ipv6=IPV6_ADRS_4,port=80'
    

Systemdiagnosen konfigurieren

  1. Systemdiagnose für den Backend-Dienst erstellen:

      gcloud compute health-checks create http[s] my-health-check 
    --global
    --request-path '/'
    --port SERVICE_PORT

    Ersetzen Sie SERVICE_PORT durch die Portnummer zwischen 1 und 65535.

  2. Firewallregel erstellen, um Systemdiagnosen zuzulassen:

    gcloud compute firewall-rules create allow-scan-probe \
        --action allow \
        --description "allow-scan-probe" \
        --rules tcp:SERVICE_PORT \
        --source-ranges 2600:2d00:1:b029::/64 \
        --priority 10 \
        --network=NETWORK
    

Der Bereich 2600:2d00:1:b029::/64 wird für die Quell-IP-Adressen der Systemdiagnosen verwendet, um den Zustand der VMs zu prüfen. Beachten Sie, dass 2600:2d00:1:b029::/64 als Quell-IP-Adresse für IPv6-Systemdiagnosen verwendet wird, um den Zustand der Backend-VMs des Netzwerk-Load-Balancings zu prüfen.

Backend-Dienst mit Backends erstellen und aktualisieren

  1. Backend-Dienst erstellen:

    gcloud compute backend-services create my-backend-service \
    --ip-address-selection-policy PREFER_IPV6  \
    --global \
    --health-checks my-health-check \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED \
    --timeout=5m
    
  2. Dem Backend-Dienst die Backends hinzufügen:

    gcloud compute backend-services add-backend my-backend-service \
    --instance-group us-ig-1 \
    --instance-group-zone us-central1-a \
    --global \
    
    gcloud compute backend-services add-backend my-backend-service \
    --instance-group us-ig-2 \
    --instance-group-zone us-central1-b \
    --global
    

Cloud Service Mesh-Dienst einrichten

In diesem Abschnitt wird beschrieben, wie Sie einen IPv6-Dienst in Traffic Director konfigurieren. Der Dienst kann Teil einer Service Mesh-Konfiguration sein oder zum Konfigurieren eines Service-Gateways verwendet werden, z. B. einer VM, auf der Envoy ausgeführt wird.

Nachdem die Backend-Dienste mit PREFER_IPV6 konfiguriert wurden, können Sie eine Appnet-Gateway-Ressource erstellen.

Gateway-Ressource erstellen

  1. Erstellen Sie in einer Datei mit dem Namen dual-stack-gateway.yaml die Gateway-Spezifikation für HTTP-Traffic:

    cat <<EOF | tee dual-stack-gateway.yaml
    name: dual-stack-gateway
    scope: gateway-proxy
    ipVersion: IPV6
    ports:
    - 80
    type: OPEN_MESH
    EOF
    
  2. Erstellen Sie die Gateway-Ressource aus der Spezifikation dual-stack-gateway.yaml:

    gcloud network-services gateways import dual-stack-gateway \
      --source=dual-stack-gateway.yaml \
      --location=global
    

Routing mit HTTPRoute einrichten

  1. Erstellen Sie in einer Datei mit dem Namen dual-stack-http_route.yaml die HTTPRoute-Spezifikation:

    cat <<EOF | tee dual-stack-http-route.yaml
    name: dual-stack-http-route
    hostnames:
    - dual-stack-server
    gateways:
    - projects/PROJECT_ID/locations/global/gateways/dual-stack-gateway
    rules:
    - action:
        destinations:
        - serviceName: "projects/PROJECT_ID/locations/global/backendServices/dual-stack-backend-service"
    EOF
    
  2. Verwenden Sie die Spezifikation in dual-stack-http-route.yaml, um die HTTPRoute-Ressource zu erstellen.

    gcloud network-services http-routes import dual-stack-http-route \
      --source=dual-stack-http-route.yaml \
      --location=global
    
  3. Um die End-to-End-Verbindung zu prüfen, stellen Sie per SSH eine Verbindung zur VM von der verwalteten Instanzgruppe des Gateways her und führen Sie den folgenden Befehl aus:

    curl -H 'Host: dual-stack-server' http://[::]
    

    Die Ausgabe sieht etwa so aus:

    <!doctype <html><body><h1>'`dual-stack-server`'</h1></body></html>
    

Von IPv4 zu Dual-Stack migrieren

Damit Sie von IPv4 zu Dual-Stack migrieren können, müssen die folgenden Voraussetzungen erfüllt sein:

  • Vorhandene Einzel-Stack-VM-Instanzgruppen us-ig-1 und us-ig-2 mit IPV4_ONLY-Stack mit vorhandenen VMs
  • Ein einzelner IPv4-Backend-Dienst my-ipv4-backend-service, der auf us-ig-1 und us-ig-2 verweist
  • Ein IPV4_ONLY-VM-Subnetz
  • Eine Gateway-Ressource, die mit einer IPv4-Adressversion konfiguriert ist

Subnetz auf Dual-Stack aktualisieren

Aktualisieren Sie das vorhandene Subnetz für das Backend, um IPv6 zu unterstützen:

gcloud compute networks subnets update SUBNET \
  --stack-type IPV4_IPV6 \
  --ipv6-access-type=IPv6_ACCESS_TYPE \

Ersetzen Sie Folgendes:

  • SUBNET: ein Name für das neue Subnetz.
  • IPv6_ACCESS_TYPE: der IPv6-Zugriffstyp. Er kann EXTERNAL oder INTERNAL sein.

Jede VM auf Dual-Stack aktualisieren

gcloud compute instances network-interfaces update EXISTING_VM_NAME \
  --stack-type=IPV4_IPV6 \
  --zone=us-central1

Ersetzen Sie EXISTING_VM_NAME durch den Namen Ihrer vorhandenen VM.

Jeder Instanzgruppe neue Dual-Stack-VMs hinzufügen

  1. Neue VM-Instanzen erstellen:

    gcloud compute instances create my-new-vm-1 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-a \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create my-new-vm-2 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-b \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_IPV6
    
  2. Neue Instanzen zu Instanzgruppen hinzufügen:

    gcloud compute instance-groups unmanaged add-instances us-ig-1 \
      --instances my-new-vm-1 \
      --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged add-instances us-ig-2 \
      --instances my-new-vm-2 \
      --zone us-central1-b
    
  3. IPv6-Backend-Dienst erstellen:

    gcloud compute backend-services create dual-stack-backend-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --protocol=HTTP \
      --health-checks=dual-stack-health-check-http \
      --ip-address-selection-policy=PREFER_IPV6
    
  4. Aktualisierte Instanzgruppe dem neu erstellten Dual-Stack-Backend-Dienst hinzufügen:

    gcloud compute backend-services add-backend dual-stack-backend-service \
      --instance-group=us-ig-1 \
      --instance-group-zone=ZONE \
      --global
    
    gcloud compute backend-services add-backend dual-stack-backend-service \
      --instance-group=us-ig-2 \
      --instance-group-zone=ZONE \
      --global
    

Von Dual-Stack zu IPv4 migrieren

Damit Sie von Dual-Stack zu IPv4 migrieren können, müssen die folgenden Voraussetzungen erfüllt sein:

  • Vorhandene Dual-Stack-VM-Instanzgruppen us-ig-1 und us-ig-2 mit IPV4_IPV6-Stack mit vorhandenen VMs
  • Ein einzelner IPv6-Backend-Dienst my-ipv6-backend-service, der auf us-ig-1 und us-ig-2 verweist
  • Ein IPV4_IPV6-VM-Subnetz
  • Eine Gateway-Ressource

Jede VM auf IPv4 downgraden

gcloud compute instances network-interfaces update EXISTING_VM_NAME \
  --stack-type=IPV4_ONLY \
  --zone=us-central1

Jeder Instanzgruppe neue IPv4-Stack-VMs hinzufügen

  1. Neue VM-Instanzen erstellen:

    gcloud compute instances create my-new-vm-1 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-a \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_ONLY \
    
    gcloud compute instances create my-new-vm-2 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-b \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_ONLY
    
  2. Neue Instanzen zu Instanzgruppen hinzufügen:

    gcloud compute instance-groups unmanaged add-instances us-ig-1 \
      --instances my-new-vm-1 \
      --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged add-instances us-ig-2 \
      --instances my-new-vm-2 \
      --zone us-central1-b
    
  3. IPv4-Backend-Dienst erstellen:

    gcloud compute backend-services create my-ipv4-backend-service \
      –ip-address-selection-policy IPV4_ONLY \
      --global \
      --health-checks my-health-check \
      --load-balancing-scheme INTERNAL_SELF_MANAGED \
      --timeout=5m
    
  4. Aktualisierte Instanzgruppen dem neu erstellten IPv4-Backend-Dienst hinzufügen:

    gcloud compute backend-services add-backend my-ipv4-backend-service \
      --instance-group us-ig1 \
      --instance-group-zone us-central1-a \
      --global \
    
    gcloud compute backend-services add-backend my-ipv4-backend-service \
      --instance-group us-ig2 \
      --instance-group-zone us-central1-b \
      --global
    

    Jetzt können sowohl IPv4- als auch IPv6-Backend-Dienste Traffic verarbeiten. Aktualisieren Sie die URL-Zuordnung, um einen Teil des Clienttraffics an den neuen IPv4-Backend-Dienst weiterzuleiten.