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

Auf dieser Seite erfahren Sie, wie Sie IPv6-Traffic in Cloud Service Mesh mithilfe von Traffic Director (TD)-Proxy-basierten Load Balancern ausbalancieren. 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-Deployments können Sie angeben, ob IPv4 oder IPv6 an das Dienst-Backend gesendet wird. Der Proxy- oder gRPC-Client testet jeden Datenpfad in der von Ihnen angegebenen 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 sowie 1.71 und höher für Go unterstützt. Java wird derzeit nicht unterstützt.

gRPC-Versionen ohne Dual-Stack-Unterstützung (d.h. In Go und Versionen vor 1.66 in anderen Sprachen wird nur die erste Adresse jedes Endpunkts in der Reihenfolge verwendet, die von TD gesendet wurde.

Hinweise

In diesem Leitfaden wird davon ausgegangen, dass Sie bereits Folgendes haben:

IPv6-Backenddienst einrichten

In diesem Abschnitt konfigurieren Sie Folgendes:

  • Zwei Backendgruppen (entweder Instanzgruppen, verwaltete Instanzgruppen oder Netzwerkendpunktgruppen), jeweils eine in zwei verschiedenen Zonen innerhalb derselben Region.
  • Zwei VM-Instanzen in jeder Backendgruppe.
  • Eine Systemdiagnose zur Prüfung der Instanzintegrität.
  • Firewallregeln, die es Systemdiagnosen ermöglichen, Back-Ends zu erreichen.
  • Back-End-Dienst
  • Der Back-End-Dienst, der die beiden konfigurierten Back-End-Gruppen enthalten soll.

Subnetz für Back-Ends einrichten

Mit dem folgenden Befehl werden interne Adressbereiche sowohl für IPv4 als auch für IPv6 zugewiesen und VMs im Subnetz können mit beiden Adresstypen 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 (MIGs oder NEGs) einfügen.

  1. Dual-Stack-Netzwerk erstellen:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. Erstellen Sie ein Dual-Stack-Subnetz für Back-End-VMs:

    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.

Back-Ends einrichten

Sie können entweder verwaltete Instanzgruppen (MIG), nicht verwaltete Instanzgruppen oder Netzwerk-Endpunktgruppen (NEG) verwenden.

verwaltete Instanzgruppe

  1. So erstellen Sie eine verwaltete Instanzgruppe mit dual-stack-gateway-template:

    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 mit 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. Fügen Sie der verwalteten Instanzgruppe einen benannten Port hinzu:

    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 die automatische Reparatur. Systemdiagnosen für das Load Balancing sind in der Regel strenger konfiguriert, da sie festlegen, ob eine VM Nutzertraffic empfängt und ob Sie den Traffic bei Bedarf schnell umleiten möchten.

    Bei Systemdiagnosen für die automatische Reparatur 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. Erstellen Sie eine Systemdiagnose.

    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 MIG an. Konfigurieren Sie dazu eine Richtlinie für die automatische 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 „initial-delay“ wird die 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 startet, 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. Erstellen Sie in jeder Instanzgruppe zwei Dual-Stack-VM-Instanzen:

    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. Fügen Sie Instanzgruppen VMs hinzu:

    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. Fügen Sie ein Back-End hinzu, 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. So fügen Sie Endpunkte zu einer Netzwerk-Endpunktgruppe hinzu:

    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'
    

Systemdiagnose konfigurieren

  1. Erstellen Sie eine Systemdiagnose für den Back-End-Dienst:

      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. Erstellen Sie eine Firewallregel, 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 Status der Backend-VMs des Netzwerk-Load Balancing zu prüfen.

Backend-Dienst mit Backends erstellen und aktualisieren

  1. Erstellen Sie den Back-End-Dienst:

    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. Fügen Sie dem Backend-Dienst die Backends hinzu:

    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 gezeigt, wie Sie einen IPv6-Dienst in Traffic Director konfigurieren. Der Dienst kann Teil einer Service Mesh-Konfiguration sein oder zum Konfigurieren eines Service-Gateways wie einer VM mit Envoy verwendet werden.

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 dual-stack-gateway.yaml-Spezifikation:

    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 über das Gateway MIG eine SSH-Verbindung zur VM 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 VM-Instanzgruppen mit einem einzelnen Stack us-ig-1 und us-ig-2 mit IPV4_ONLY-Stack mit vorhandenen VMs
  • Ein einzelner IPv4-Backenddienst 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-Adresse konfiguriert ist

Subnetz auf Dual-Stack umstellen

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 umstellen

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.

Fügen Sie jeder Instanzgruppe neue Dual-Stack-VMs hinzu.

  1. Erstellen Sie neue VM-Instanzen:

    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. Fügen Sie die neuen Instanzen den Instanzgruppen hinzu:

    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. Erstellen Sie einen IPv6-Backend-Dienst:

    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. Fügen Sie die aktualisierte Instanzgruppe dem neu erstellten Dual-Stack-Back-End-Dienst hinzu:

    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 umstellen

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

Fügen Sie jeder Instanzgruppe neue IPv4-Stack-VMs hinzu

  1. Erstellen Sie neue VM-Instanzen:

    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. Fügen Sie die neuen Instanzen den Instanzgruppen hinzu:

    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. Erstellen Sie einen IPv4-Backend-Dienst:

    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. Fügen Sie die aktualisierten Instanzgruppen dem neu erstellten IPv4-Backenddienst hinzu:

    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
    

    Sowohl IPv4- als auch IPv6-Backenddienste können jetzt Traffic bereitstellen. Aktualisieren Sie die URL-Zuordnung, um einen Teil des Clienttraffics an den neuen IPv4-Backend-Dienst weiterzuleiten.