Configurer le transfert de protocole

Ce document explique comment configurer le transfert de protocole interne et externe. Avant de configurer le transfert de protocole, consultez la page Présentation du transfert de protocole.

Configurer le transfert de protocole externe

Cette section explique comment configurer le transfert de protocole externe à l'aide d'une règle de transfert pour transférer le trafic TCP vers une seule instance cible. Il existe des instructions distinctes pour le trafic IPv4 et IPv6.

Pour configurer le transfert de protocole externe, vous devez créer une instance cible contenant une seule instance de VM. Vous créez ensuite une règle de transfert externe régionale qui transfère le trafic vers l'instance cible.

IPv4

Par souci de simplicité, cet exemple utilise le réseau et les sous-réseaux par défaut.

  1. Créez une règle de pare-feu permettant au trafic externe d'atteindre l'instance cible.

    gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \
     --target-tags=allow-ipv4-ext \
     --allow=tcp:80 \
     --source-ranges=0.0.0.0/0
    
  2. Créez une VM. Dans cet exemple, nous configurons un serveur Apache sur la VM.

    gcloud compute instances create VM_INSTANCE_NAME \
     --zone=ZONE \
     --image-family=debian-10 \
     --image-project=debian-cloud \
     --tags=allow-ipv4-ext \
     --metadata=startup-script='#! /bin/bash
     sudo apt-get update
     sudo apt-get install apache2 -y
     sudo a2ensite default-ssl
     sudo a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     sudo systemctl restart apache2'
    
  3. Créez une instance cible contenant la VM créée à l'étape précédente. Vous devez créer une instance cible avant de pouvoir créer un objet de règle de transfert, car la règle de transfert doit faire référence à une ressource cible existante.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
       --instance=VM_INSTANCE_NAME \
       --zone=ZONE
    
  4. Réservez une adresse IPv4 statique externe.

    gcloud compute addresses create IPV4_ADDRESS \
      --region=REGION
    
  5. Créez la règle de transfert qui transfère le trafic TCP vers l'instance cible. La règle de transfert doit être créée dans la même région que l'instance cible.

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
      --load-balancing-scheme=EXTERNAL \
      --region=REGION \
      --ip-protocol=TCP \
      --address=IPV4_ADDRESS \
      --ports=80 \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE
    
  6. Testez votre configuration.

    1. Obtenez l'adresse IP de votre règle de transfert.

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
        --region=REGION
      
    2. Envoyez des requêtes Web à l'équilibreur de charge à l'aide de curl pour contacter son adresse IP. Remplacez IP_ADDRESS par l'adresse IP de l'étape précédente.

      $ while true; do curl -m1 IP_ADDRESS; done
      

      Le résultat ressemble à ce qui suit, le nom affiché étant celui de la VM de backend qui génère la réponse.

      Page served from: VM_INSTANCE_NAME.
      

IPv6

La gestion du trafic IPv6 nécessite un sous-réseau à double pile avec une instance de VM à double pile pour le backend d'instance cible.

  1. Créez un réseau VPC en mode personnalisé.

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom
    
  2. Dans le réseau VPC, créez un sous-réseau à double pile.

    gcloud compute networks subnets create SUBNET_NAME \
      --network=VPC_NAME \
      --range=192.168.11.0/24 \
      --stack-type=IPV4_IPV6 \
      --ipv6-access-type=EXTERNAL \
      --region=REGION
    

    La plage 192.168.11.0/24 n'est qu'un exemple de plage IPv4. Vous pouvez saisir n'importe quelle plage IPv4 principale pour le nouveau sous-réseau, au format CIDR. Pour en savoir plus, consultez la section sur les plages de sous-réseaux IPv4.

  3. Créez une règle de pare-feu permettant au trafic externe d'atteindre l'instance cible.

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ipv6-ext \
      --allow=tcp:80 \
      --source-ranges=::/0
    
  4. Créez une VM à double pile.

    gcloud compute instances create VM_INSTANCE_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ipv6-ext \
      --metadata=startup-script='#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo 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
      sudo systemctl restart apache2'
    
  5. Créez une instance cible contenant la VM créée à l'étape précédente.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  6. Réservez une plage d'adresses IPv6 statique externe.

    gcloud compute addresses create IPV6_ADDRESS \
      --region=REGION \
      --subnet=SUBNET_NAME \
      --ip-version=IPV6 \
      --endpoint-type=NETLB
    
  7. Créez une règle de transfert IPv6 qui transfère le trafic TCP vers l'instance cible. La règle de transfert doit être créée dans la même région que l'instance cible.

    gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
      --load-balancing-scheme=EXTERNAL \
      --subnet=SUBNET_NAME \
      --ip-version=IPV6 \
      --region=REGION \
      --address=IPV6_ADDRESS \
      --network-tier=PREMIUM \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE \
      --ip-protocol=TCP \
      --ports=80
    
  8. Testez votre configuration.

    1. Obtenez l'adresse IP de la règle de transfert.

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. Envoyez des requêtes Web à l'équilibreur de charge à l'aide de curl pour contacter son adresse IP. Remplacez IPV6_ADDRESS par l'adresse IP de l'étape précédente.

      curl -6 'http://[IPV6_ADDRESS]:80'
      

      Le résultat ressemble à ce qui suit, le nom affiché étant celui de la VM de backend qui génère la réponse.

      Page served from: VM_INSTANCE_NAME.
      

Configurer le transfert de protocole interne

Cette section explique comment configurer le transfert de protocole interne à l'aide d'une règle de transfert pour transférer le trafic TCP vers une seule instance cible. Il existe des instructions distinctes pour le trafic IPv4 et IPv6.

Dans cet exemple, vous créez une instance cible contenant une seule instance de VM dans laquelle un serveur Apache est installé. Vous créez ensuite une règle de transfert interne régionale qui transfère le trafic vers l'instance cible.

IPv4

Par souci de simplicité, cet exemple utilise le réseau et les sous-réseaux par défaut.

  1. Créez une règle de pare-feu permettant au trafic interne d'atteindre l'instance cible.

    gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \
      --target-tags=allow-ipv4-int \
      --allow=tcp \
      --source-ranges=0.0.0.0/0
    
  2. Créez une règle de pare-feu pour autoriser la connectivité SSH aux VM avec le tag réseau allow-ssh. Cela permet d'établir une connexion SSH à la VM cliente.

    gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \
      --target-tags=allow-ssh \
      --allow=tcp:22 \
      --source-ranges=0.0.0.0/0
    
  3. Créez une VM.

    gcloud compute instances create VM_INSTANCE_NAME \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ipv4-int \
      --metadata=startup-script='#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      sudo systemctl restart apache2'
    
  4. Créez une instance cible contenant la VM créée à l'étape précédente. Vous devez créer une instance cible avant de pouvoir créer un objet de règle de transfert, car la règle de transfert doit faire référence à une ressource cible existante.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --zone=ZONE
    
  5. Créez la règle de transfert qui transfère le trafic TCP vers l'instance cible. La règle de transfert doit être créée dans la même région que l'instance cible.

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL \
      --network-tier=PREMIUM \
      --region=REGION \
      --ip-protocol=TCP \
      --ports=80 \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE
    
  6. Créez une VM cliente de test.

    gcloud compute instances create CLIENT_VM_NAME \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ssh
    

    Vous pouvez maintenant tester la configuration du transfert de protocole en envoyant le trafic de cette VM cliente vers l'adresse IP de la règle de transfert.

  7. Testez votre configuration.

    1. Obtenez l'adresse IP de votre règle de transfert.

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. Établissez une connexion SSH avec la VM cliente.

      gcloud compute ssh CLIENT_VM_NAME \
      --zone=ZONE
      
    3. Envoyez des requêtes à l'équilibreur de charge à l'aide de curl pour contacter son adresse IP.

      $ while true; do curl -m1 IP_ADDRESS; done
      

      Le résultat ressemble à ce qui suit, le nom affiché étant celui de la VM de backend qui génère la réponse.

      Page served from: VM_INSTANCE_NAME.
      

IPv6

La gestion du trafic IPv6 nécessite un sous-réseau à double pile avec une instance de VM à double pile pour le backend d'instance cible.

  1. Créez un réseau VPC en mode personnalisé avec l'option --enable-ula-internal-ipv6 pour configurer des plages IPv6 internes sur n'importe quel sous-réseau de ce réseau.

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6
    
  2. Dans le réseau VPC, créez un sous-réseau à double pile.

    gcloud compute networks subnets create SUBNET_NAME \
      --network=VPC_NAME \
      --range=192.168.11.0/24 \
      --region=REGION \
      --stack-type=IPV4_IPV6 \
      --ipv6-access-type=INTERNAL
    

    La plage 192.168.11.0/24 n'est qu'un exemple de plage IPv4. Vous pouvez saisir n'importe quelle plage IPv4 principale pour le nouveau sous-réseau, au format CIDR. Pour en savoir plus, consultez la section sur les plages de sous-réseaux IPv4.

  3. Créez une règle de pare-feu permettant au trafic interne d'atteindre l'instance cible.

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ipv6-int \
      --allow=tcp \
      --source-ranges=::/0
    
  4. Créez une règle de pare-feu pour autoriser la connectivité SSH aux VM en utilisant le tag réseau allow-ssh.

    gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ssh \
      --allow=tcp:22 \
      --source-ranges=0.0.0.0/0
    

    Cette règle de pare-feu est appliquée à une VM cliente (créée à l'une des étapes suivantes) à laquelle vous vous connecterez via SSH pour envoyer du trafic HTTP à l'adresse IP de la règle de transfert.

  5. Créez une VM à double pile.

    gcloud compute instances create VM_INSTANCE_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ipv6-int \
      --metadata=startup-script='#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo 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
      sudo systemctl restart apache2'
    
  6. Créez une instance cible contenant la VM créée à l'étape précédente.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  7. Créez une règle de transfert IPv6 qui transfère le trafic TCP vers l'instance cible. La règle de transfert doit être créée dans la même région que l'instance cible.

    gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL \
      --network-tier=PREMIUM \
      --network=VPC_NAME \
      --subnet=SUBNET_NAME \
      --region=REGION \
      --ip-protocol=TCP \
      --ports=80 \
      --target-instance=TARGET_INSTANCE_NAME \
      --target-instance-zone=ZONE \
      --ip-version=IPV6
    
  8. Créez une VM cliente.

    gcloud compute instances create CLIENT_VM_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ssh
    
  9. Testez votre configuration.

    1. Obtenez l'adresse IP de la règle de transfert.

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. Établissez une connexion SSH avec la VM cliente.

      gcloud compute ssh CLIENT_VM_NAME \
       --zone=ZONE
      
    3. Envoyez une requête HTTP à l'adresse IP de la règle de transfert à l'aide de curl.

      curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80'
      

      Le résultat ressemble à ce qui suit. Le nom de la VM de backend générant la réponse est affiché dans le texte.

      Page served from: VM_INSTANCE_NAME.
      

Étapes suivantes