Configurer la double pile IPv6 pour Cloud Service Mesh

Cette page explique comment équilibrer la charge du trafic IPv6 sur Cloud Service Mesh à l'aide d'équilibreurs de charge basés sur des proxys Traffic Director (TD), ainsi que comment passer d'un déploiement basé sur IPv4 à un déploiement à double pile (IPv4 et IPv6) et comment passer d'un déploiement à double pile à IPv4.

Dans les déploiements à double pile, vous pouvez indiquer si IPv4 ou IPv6 est envoyé au backend du service. Le proxy ou le client gRPC teste chaque chemin de données dans l'ordre de préférence que vous avez défini, puis sélectionne celui qui correspond à vos préférences et à ce qui est compatible.

Les fonctionnalités à double pile sont compatibles avec gRPC 1.66.1 et versions ultérieures pour C++ et Python, 1.12 et versions ultérieures pour Node et 1.71 et versions ultérieures pour Go. Java n'est pas compatible pour le moment.

Versions de gRPC sans prise en charge de la double pile (c'est-à-dire, Go et les versions antérieures à la version 1.66 (dans d'autres langues) n'utilisent que la première adresse de chaque point de terminaison, dans l'ordre envoyé par TD.

Avant de commencer

Ce guide suppose que vous avez déjà:

Configurer le service de backend IPv6

Dans cette section, vous allez configurer les éléments suivants:

  • Deux groupes de backend (groupes d'instances, groupes d'instances gérés ou groupes de points de terminaison réseau), un dans chacune des deux zones différentes de la même région.
  • Deux instances de VM dans chaque groupe de backend
  • Une vérification d'état pour examiner l'état de l'instance
  • Règles de pare-feu permettant aux vérifications de l'état d'atteindre les backends.
  • Un service de backend
  • Le service de backend à inclure pour les deux groupes de backend configurés.

Configurer un sous-réseau pour vos backends

La commande suivante alloue des plages d'adresses internes pour IPv4 et IPv6, et permet d'allouer des VM sur le sous-réseau avec l'un ou l'autre type d'adresse.

Notez que seuls les sous-réseaux en mode personnalisé sont acceptés. Le mode automatique n'est pas pris en charge. Vous pouvez passer en mode personnalisé pour l'ensemble du réseau VPC, puis renseigner les backends IPv6 (MIG ou NEG).

  1. Créez un réseau à double pile:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. Créez un sous-réseau à double pile pour les VM de 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
    

    Remplacez les éléments suivants :

    • SUBNET : Nom du nouveau sous-réseau.
    • NETWORK: nom du réseau VPC qui contiendra le nouveau sous-réseau.
    • PRIMARY_IPv4_RANGE : plage d'adresses IPv4 principales pour le nouveau sous-réseau, au format CIDR. Pour en savoir plus, consultez la section sur les plages de sous-réseaux IPv4.
    • IPv6_ACCESS_TYPE: type d'accès IPv6. Il peut s'agir de EXTERNAL ou de INTERNAL.
    • REGION: région dans laquelle le nouveau sous-réseau sera créé. Google Cloud

Configurer des backends

Vous pouvez choisir d'utiliser des groupes d'instances gérés (MIG), des groupes d'instances non gérés ou des groupes de points de terminaison du réseau (NEG).

MIG

  1. Créez un groupe d'instances géré avec 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. Créez un groupe d'instances géré pour un proxy de passerelle:

    gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-gateway-template
    
  3. Créez un groupe d'instances géré 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. Ajoutez un port nommé au groupe d'instances géré:

    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
    

    Nous utilisons des vérifications de l'état distinctes pour l'équilibrage de charge et l'autoréparation. Les vérifications de l'état liées à l'équilibrage de charge sont généralement configurées pour être plus agressives, car elles déterminent si une VM reçoit du trafic utilisateur et si vous souhaitez rediriger rapidement le trafic si nécessaire.

    Les vérifications de l'état pour l'autoréparation entraînent le remplacement proactif des VM défaillantes par Compute Engine. Ces vérifications de l'état doivent donc être plus conservatrices que celles destinées à l'équilibrage de charge. Notez que l'autoréparation des VM à double pile sera basée sur les vérifications d'état IPv4.

  5. Créez une vérification d'état :

    gcloud compute health-checks create http dualstack-health-check-http \
    
  6. Assurez-vous que les règles de pare-feu autorisent les vérifications de l'état:

    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. Appliquez la vérification de l'état en configurant une règle d'autoréparation pour votre MIG:

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

Le paramètre initial-delay permet de retarder l'autoréparation et la potentielle recréation prématurée de la VM si celle-ci est en cours de démarrage. Le délai initial commence au moment où le champ currentAction de la VM passe à VERIFYING.

Groupes d'instances non gérés

  1. Configurez des groupes d'instances:

    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. Créez deux instances de VM à double pile dans chaque groupe d'instances:

    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'adresse IPv6 sera attribuée automatiquement.

  3. Ajoutez des VM à des groupes d'instances:

    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. Ajoutez un backend où --network-endpoint-type est 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. Ajoutez des points de terminaison au groupe de points de terminaison du réseau:

    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'
    

Configurer la vérification de l'état

  1. Créez une vérification d'état pour le service de backend:

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

    Remplacez SERVICE_PORT par le numéro de port, compris entre 1 et 65 535.

  2. Créez une règle de pare-feu pour autoriser les vérifications de l'état:

    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
    

La plage 2600:2d00:1:b029::/64 est utilisée pour les adresses IP sources des outils de vérification de l'état afin de vérifier l'état des VM. Notez que 2600:2d00:1:b029::/64 est utilisé comme adresse IP source pour les vérificateurs d'état IPv6 afin de vérifier l'état des VM de backend de l'équilibrage de charge réseau.

Créer et mettre à jour un service de backend avec Backends

  1. Créez le service de 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. Ajoutez les backends au service de 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
    

Configurer un service Cloud Service Mesh

Cette section explique comment configurer un service IPv6 dans Traffic Director. Le service peut faire partie d'une configuration de service Mesh ou être utilisé pour configurer une passerelle de service telle qu'une VM exécutant Envoy.

Maintenant que les services backend avec PREFER_IPV6 sont configurés, vous pouvez créer une ressource de passerelle appnet.

Créer une ressource de passerelle

  1. Dans un fichier nommé dual-stack-gateway.yaml, créez la spécification de la passerelle pour le trafic HTTP:

    cat <<EOF | tee dual-stack-gateway.yaml
    name: dual-stack-gateway
    scope: gateway-proxy
    ipVersion: IPV6
    ports:
    - 80
    type: OPEN_MESH
    EOF
    
  2. Créez la ressource Gateway à partir de la spécification dual-stack-gateway.yaml:

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

Configurer le routage avec HTTPRoute

  1. Dans un fichier nommé dual-stack-http_route.yaml, créez la spécification 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. Utilisez la spécification dans dual-stack-http-route.yaml pour créer la ressource HTTPRoute.

    gcloud network-services http-routes import dual-stack-http-route \
      --source=dual-stack-http-route.yaml \
      --location=global
    
  3. Pour vérifier la connectivité de bout en bout, connectez-vous à la VM en SSH depuis la passerelle MIG et exécutez la commande suivante:

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

    Le résultat est semblable à :

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

Passer d'IPv4 à la double pile

Vous devez remplir les conditions préalables suivantes avant de pouvoir passer d'IPv4 à la double pile:

  • Groupes d'instances de VM à pile unique existants us-ig-1 et us-ig-2 avec pile IPV4_ONLY avec VM existantes
  • Un seul service de backend IPv4 my-ipv4-backend-service pointant vers us-ig-1 et us-ig-2
  • Un sous-réseau de VM IPV4_ONLY
  • Ressource de passerelle configurée avec une adresse de version IPv4

Passer le sous-réseau à double pile

Mettez à jour le sous-réseau existant du backend pour qu'il prenne en charge l'IPv6:

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

Remplacez les éléments suivants :

  • SUBNET : Nom du nouveau sous-réseau.
  • IPv6_ACCESS_TYPE: type d'accès IPv6. Il peut s'agir de EXTERNAL ou de INTERNAL.

Mettre à niveau chaque VM vers la double pile

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

Remplacez EXISTING_VM_NAME par le nom de votre VM existante.

Ajouter des VM à double pile à chaque groupe d'instances

  1. Créez des instances de 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. Ajoutez les nouvelles instances à des groupes d'instances:

    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. Créez un service de 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. Ajoutez le groupe d'instances mis à jour au service de backend Dual Stack nouvellement créé:

    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
    

Passer de la double pile à IPv4

Vous devez remplir les conditions préalables suivantes avant de pouvoir passer de la double pile à IPv4:

  • Groupes d'instances de VM à double pile existants us-ig-1 et us-ig-2 avec pile IPV4_IPV6 avec VM existantes
  • Un seul service de backend IPv6 my-ipv6-backend-service pointant vers us-ig-1 et us-ig-2
  • Sous-réseau de VM IPV4_IPV6
  • Une ressource de passerelle

Réduire chaque VM à IPv4

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

Ajouter des VM avec pile IPv4 à chaque groupe d'instances

  1. Créez des instances de 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. Ajoutez les nouvelles instances à des groupes d'instances:

    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. Créez un service de 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. Ajoutez les groupes d'instances mis à jour au service de backend IPv4 nouvellement créé:

    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
    

    Les services de backend IPv4 et IPv6 peuvent désormais gérer le trafic. Mettez à jour le mappage d'URL pour diriger une partie du trafic client vers le nouveau service de backend IPv4.