Configurare IPv6 dual-stack per Cloud Service Mesh

Questa pagina mostra come bilanciare il carico del traffico IPv6 su Cloud Service Mesh utilizzando i bilanciatori del carico basati su proxy di Traffic Director (TD), nonché come eseguire la migrazione dai deployment basati su IPv4 a quelli a doppio stack (IPv4 e IPv6) e come eseguire la migrazione dal doppio stack a IPv4.

Nei deployment a doppio stack, hai la possibilità di indicare se IPv4 o IPv6 viene inviato al backend del servizio. Il client proxy o gRPC testa ogni percorso dati in base al tuo ordine di preferenza e seleziona quello in linea con le tue preferenze e con ciò che è supportato.

Le funzionalità di dual-stack sono supportate in gRPC 1.66.1 e versioni successive per C++ e Python, 1.12 e versioni successive per Node e 1.71 e versioni successive per Go. Al momento Java non è supportato.

Versioni di gRPC senza supporto dual-stack (ad es. Go e le versioni precedenti alla 1.66 in altre lingue) utilizzeranno solo il primo indirizzo di ogni endpoint, nell'ordine inviato da TD.

Prima di iniziare

Questa guida presuppone che tu abbia già:

Configura il servizio di backend IPv6

In questa sezione configuri quanto segue:

  • Due gruppi di backend (gruppi di istanze, gruppi di istanze gestite o gruppi di endpoint di rete), uno in ciascuna di due zone diverse all'interno della stessa regione.
  • Due istanze VM in ogni gruppo di backend.
  • Un controllo di integrità per verificare l'integrità dell'istanza.
  • Regole firewall che consentono ai controlli di integrità di raggiungere i backend.
  • Un servizio di backend.
  • Il servizio di backend da includere nei due gruppi di backend configurati.

Configura una subnet per i tuoi backend

Il seguente comando alloca intervalli di indirizzi interni sia per IPv4 che per IPv6 e consente di allocare le VM nella subnet con entrambi i tipi di indirizzo.

Tieni presente che sono supportate solo le sottoreti in modalità personalizzata. Non è supportata la modalità automatica. Puoi passare alla modalità personalizzata per l'intera rete VPC e poi compilare i backend IPv6 (MIG o NEG).

  1. Crea una rete a doppio stack:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. Crea una subnet a doppio stack per le VM di backend:

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

    Sostituisci quanto segue:

    • SUBNET: un nome per la nuova subnet.
    • NETWORK: il nome della rete VPC che conterrà la nuova subnet.
    • PRIMARY_IPv4_RANGE: l'intervallo IPv4 principale per la nuova subnet, in notazione CIDR. Per ulteriori informazioni, consulta Intervalli di subnet IPv4.
    • IPv6_ACCESS_TYPE: il tipo di accesso IPv6. Può essere EXTERNAL o INTERNAL.
    • REGION: la Google Cloud regione in cui verrà creata la nuova sottorete.

Configurare i backend

Puoi scegliere di utilizzare i gruppi di istanze gestite (MIG), i gruppi di istanze non gestite o i gruppi di endpoint di rete (NEG).

gruppo di istanze gestite

  1. Crea un gruppo di istanze gestite con 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. Crea un gruppo di istanze gestite del proxy gateway:

    gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-gateway-template
    
  3. Crea un gruppo di istanze gestite di backend:

    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. Aggiungi una porta denominata al gruppo di istanze gestite:

    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
    

    Utilizziamo controlli di integrità separati per il bilanciamento del carico e per la riparazione automatica. I controlli di integrità per il bilanciamento del carico sono tipicamente configurati in modo da essere più aggressivi, in quanto determinano se una VM riceve traffico utente e se vuoi reindirizzare rapidamente il traffico, se necessario.

    Il controllo di integrità per la riparazione automatica fa sì che Compute Engine sostituisca proattivamente le VM che non funzionano, pertanto questo controllo di integrità sarà più prudente rispetto a quello del bilanciamento del carico. Tieni presente che la riparazione automatica per le VM a doppio stack si baserà su controlli di integrità IPv4.

  5. Crea un controllo di integrità:

    gcloud compute health-checks create http dualstack-health-check-http \
    
  6. Assicurati che le regole del firewall consentano i controlli di integrità:

    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. Applica il controllo di integrità configurando un criterio di riparazione automatica per il gruppo di istanze gestite:

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

L'impostazione iniziale-ritardo impedisce alla riparazione automatica di ricreare potenzialmente prematuramente la VM se è in corso l'avvio. Il timer del ritardo iniziale inizia quando il campo currentAction della VM diventa VERIFYING.

Gruppi di istanze non gestite

  1. Configura i gruppi di istanze:

    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. Crea due istanze VM dual stack in ogni gruppo di istanze:

    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
    

    L'indirizzo IPv6 verrà assegnato automaticamente.

  3. Aggiungi VM ai gruppi di istanze:

    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. Aggiungi un backend in cui --network-endpoint-type è GCE_VM_IP_PORT:

    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. Aggiungi endpoint al gruppo di endpoint di rete:

    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'
    

Configurare il controllo di integrità

  1. Crea un controllo di integrità per il servizio di backend:

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

    Sostituisci SERVICE_PORT con il numero di porta, compreso tra 1 e 65535.

  2. Crea una regola firewall per consentire i controlli di integrità:

    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
    

L'intervallo 2600:2d00:1:b029::/64 viene utilizzato per gli indirizzi IP di origine dei controlli di integrità per verificare l'integrità delle VM. Tieni presente che 2600:2d00:1:b029::/64 viene utilizzato come indirizzo IP di origine per i controlli di integrità IPv6 per verificare l'integrità della VM di backend del bilanciamento del carico di rete.

Creare e aggiornare il servizio di backend con i backend

  1. Crea il servizio di backend:

    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. Aggiungi i backend al servizio di backend:

    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
    

Configurare un servizio Cloud Service Mesh

Questa sezione mostra come configurare un servizio IPv6 in Traffic Director. Il servizio può essere parte di una configurazione di Service Mesh o può essere utilizzato per configurare un gateway di servizio come una VM che esegue Envoy.

Ora che i servizi di backend con PREFER_IPV6 sono configurati, puoi creare una risorsa gateway appnet.

Crea una risorsa gateway

  1. In un file denominato dual-stack-gateway.yaml, crea la specifica di Gateway per il traffico HTTP:

    cat <<EOF | tee dual-stack-gateway.yaml
    name: dual-stack-gateway
    scope: gateway-proxy
    ipVersion: IPV6
    ports:
    - 80
    type: OPEN_MESH
    EOF
    
  2. Crea la risorsa Gateway dalla specifica dual-stack-gateway.yaml:

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

Configurare il routing con HTTPRoute

  1. In un file denominato dual-stack-http_route.yaml, crea la specifica HTTPRoute:

    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. Utilizza la specifica in dual-stack-http-route.yaml per creare la risorsa HTTPRoute.

    gcloud network-services http-routes import dual-stack-http-route \
      --source=dual-stack-http-route.yaml \
      --location=global
    
  3. Per verificare la connettività end-to-end, connettiti tramite SSH alla VM dal gateway MIG ed esegui il seguente comando:

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

    L'output è simile al seguente:

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

Eseguire la migrazione da IPv4 a doppio stack

Prima di poter eseguire la migrazione da IPv4 a IPv6 dual-stack, devi soddisfare i seguenti prerequisiti:

  • Gruppi di istanze VM a stack singolo esistenti us-ig-1 e us-ig-2 con IPV4_ONLY con VM esistenti
  • Un singolo servizio di backend IPv4 my-ipv4-backend-service che punta a us-ig-1 e us-ig-2
  • Una subnet VM IPV4_ONLY
  • Una risorsa gateway configurata con un indirizzo della versione IPv4

Esegui l'upgrade della subnet a dual-stack

Aggiorna la subnet esistente per il backend in modo che supporti IPv6:

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

Sostituisci quanto segue:

  • SUBNET: un nome per la nuova subnet.
  • IPv6_ACCESS_TYPE: il tipo di accesso IPv6. Può essere EXTERNAL o INTERNAL.

Esegui l'upgrade di ogni VM a dual-stack

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

Sostituisci EXISTING_VM_NAME con il nome della VM esistente.

Aggiungi nuove VM dual-stack a ogni gruppo di istanze

  1. Crea nuove istanze VM:

    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. Aggiungi le nuove istanze ai gruppi di istanze:

    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. Crea un servizio di backend IPv6:

    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. Aggiungi il gruppo di istanze aggiornato al servizio di backend a doppio stack appena creato:

    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
    

Eseguire la migrazione da dual-stack a IPv4

Prima di poter eseguire la migrazione dal dual-stack a IPv4, devi soddisfare i seguenti prerequisiti:

  • Gruppi di istanze VM dual-stack esistenti us-ig-1 e us-ig-2 con IPV4_IPV6 con VM esistenti
  • Un singolo servizio di backend IPv6 my-ipv6-backend-service che punta a us-ig-1 e us-ig-2
  • Una subnet VM IPV4_IPV6
  • Una risorsa gateway

Esegui il downgrade di ogni VM a IPv4

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

Aggiungi nuove VM con stack IPv4 a ogni gruppo di istanze

  1. Crea nuove istanze VM:

    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. Aggiungi le nuove istanze ai gruppi di istanze:

    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. Crea un servizio di backend IPv4:

    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. Aggiungi i gruppi di istanze aggiornati al servizio di backend IPv4 appena creato:

    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
    

    Ora sia i servizi di backend IPv4 sia quelli IPv6 possono gestire il traffico. Aggiorna la mappa URL per indirizzare una parte del traffico client al nuovo servizio di backend IPv4.