Utiliser le transfert de protocole

Google Compute Engine accepte le transfert de protocole, qui vous permet de créer des objets de règle de transfert capables d'envoyer des paquets à une instance cible non NAT. Chaque instance cible contient une seule instance de machine virtuelle (VM). Celle-ci reçoit et gère le trafic à partir des règles de transfert correspondantes.

Le transfert de protocole peut être utilisé dans plusieurs cas, comme par exemple :

  • Hébergement virtuel par IP

    Vous pouvez configurer plusieurs règles de transfert afin qu'elles pointent vers une instance cible unique, vous permettant ainsi d'utiliser plusieurs adresses IP externes avec une seule instance de VM. Cette solution peut s'avérer utile si vous souhaitez diffuser des données à partir d'une seule instance de machine virtuelle, mais via différentes adresses IP externes. Elle se révèle particulièrement utile pour configurer l'hébergement virtuel SSL.

  • Réseaux privés virtuels (VPN)

    Consultez la page VPN pour en savoir plus sur les règles de transfert avec un VPN.

  • Adresses IP virtuelles privées

    Vous pouvez utiliser le transfert de protocole pour règles de transfert régional privé avec des adresses privées RFC 1918. Utilisez cette fonctionnalité pour configurer des règles de transfert privées qui envoient le trafic TCP ou UDP à une instance cible dans la même région. Les règles de transfert privées au sein d'une région peuvent pointer vers des instances cibles ou des services de backend, et vous pouvez passer de l'un à l'autre à volonté.

  • Équilibrage de charge

    Consultez la section Équilibrage de charge pour savoir comment transférer du trafic vers un équilibreur de charge.

Pour l'hébergement virtuel par IP, les réseaux privés virtuels (VPN) et l'équilibrage de charge, Google Compute Engine accepte le transfert de protocole des protocoles suivants :

Pour les adresses IP virtuelles privées, seuls les protocoles TCP et UDP sont acceptés :

Le transfert de protocole est facturé aux mêmes tarifs que le service d'équilibrage de charge. Consultez la page de tarification pour plus d'informations.

Démarrage rapide

Dans ce guide, nous partons du principe que vous maîtrisez bash.

Pour créer une règle de transfert envoyant du trafic vers une seule instance, procédez comme suit :

  1. Créez une instance cible.

    Votre instance cible contiendra une seule instance de VM, mais celle-ci peut exister au moment où vous créez l'instance cible ou être créée ultérieurement.

  2. Créez une règle de transfert.

    Votre instance cible doit exister avant de créer une règle de transfert. Si les paquets entrants correspondent à l'adresse IP, au protocole et (le cas échéant) à la plage de ports desservie par votre règle de transfert, la règle de transfert dirigera ce trafic vers votre instance cible.

Le reste de ce guide décrit les étapes ci-dessus de manière exhaustive :

  1. Configuration d'un serveur Apache sur une instance de VM.
  2. Création d'une instance cible et des règles de transfert correspondantes.
  3. Envoi du trafic vers une seule instance cible.

À la fin de ce guide de démarrage rapide, vous saurez comment configurer le transfert de protocole et vous aurez mis en place plusieurs règles de transfert pointant vers une seule instance cible.

Configurer une instance de VM et installer Apache

Pour commencer, créons une instance de VM sur laquelle Apache est installé.

  1. Créez des scripts de démarrage pour votre nouvelle instance.

    Selon votre système d'exploitation, le contenu de votre script de démarrage peut différer :

    • Si vous prévoyez d'utiliser une image Debian sur votre instance, exécutez la commande suivante :

      me@local:~$ echo "sudo apt-get update && sudo apt-get -y install apache2 && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir -p /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

    • Si vous prévoyez d'utiliser une image CentOS sur votre instance, exécutez la commande suivante :

      me@local:~$ echo "sudo yum -y install httpd && sudo service httpd restart && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

  2. Créez un tag pour votre future VM afin de pouvoir ultérieurement lui appliquer un pare-feu :

    me@local:~$ TAG="www-tag"
    
  3. Créez une nouvelle instance de VM afin de gérer le trafic pour vos règles de transfert :

    gcloud compute instances create pf-instance \
        --image-project debian-cloud --image-family debian-9 --tags $TAG \
        --metadata-from-file startup-script=$HOME/pf_startup.sh
    
  4. Créez une règle de pare-feu pour autoriser le trafic externe sur cette nouvelle instance de VM :

    gcloud compute firewall-rules create www-firewall --target-tags $TAG --allow tcp
    

Vous avez correctement configuré une instance de VM. Vous pouvez maintenant commencer la configuration du transfert de protocole.

Créer une instance cible et les règles de transfert correspondantes

  1. Créez une instance cible.

    Les instances cibles contiennent une seule instance de VM, qui reçoit et gère le trafic provenant d'une règle de transfert. Les instances cibles ne disposent pas de règles NAT. Vous pouvez donc les utiliser pour configurer directement vos connexions VPN à l'aide de protocoles IPsec.

    Vous devez créer une instance cible avant de pouvoir créer un objet de règle de transfert, car les règles de transfert doivent faire référence à une ressource cible existante. Il est impossible de créer une règle de transfert qui dirige le trafic vers une ressource cible non existante. Dans cet exemple, nous allons créer une instance cible comme suit :

    gcloud compute target-instances create pf-target-instance --instance pf-instance
    
  2. Créez des objets de règle de transfert.

    Un objet de règle de transfert dirige le trafic correspondant au protocole IP et au port vers une instance cible spécifiée. Pour en savoir plus, consultez la documentation relative aux règles de transfert.

    Pour cet exemple, les commandes suivantes créeront trois règles de transfert, chacune avec une adresse IP éphémère qui transmet le trafic TCP à votre instance cible. Si vous disposez d'adresses IP externes statiques, vous pouvez les utiliser avec ces règles de transfert grâce au paramètre --address IP-ADDRESS.

    gcloud compute forwarding-rules create pf-rule1 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule2 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule3 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    

Et voilà ! Vous pouvez maintenant commencer à envoyer du trafic vers votre instance cible.

Envoyer du trafic vers une instance

  1. Obtenez les adresses IP externes de vos nouvelles règles de transfert.

    Exécutez la commande gcloud compute forwarding-rules list pour obtenir les adresses IP externes de vos règles de transfert. En guise d'exemple, le tableau suivant répertorie les adresses IP éphémères allouées aux règles de transfert créées précédemment.

    Si vous avez choisi d'utiliser des adresses IP réservées, elles seront listées ici à la place des adresses IP éphémères.

    gcloud compute forwarding-rules list
    
    NAME     REGION      IP_ADDRESS     IP_PROTOCOL TARGET
    pf-rule1 us-central1 [ADDRESS_1]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule2 us-central1 [ADDRESS_2]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule3 us-central1 [ADDRESS_3]    TCP         us-central1-a/targetInstances/pf-target-instance

    Notez ces adresses IP pour l'étape suivante.

  2. Configurez les hôtes virtuels Apache de l'instance de VM afin de fournir différentes informations en fonction de l'URL de destination.

    Tout d'abord, connectez-vous en SSH à votre instance :

    gcloud compute ssh pf-instance
    

    Ensuite, éditez le fichier /etc/apache2/sites-enabled/000-default.conf et ajoutez les lignes suivantes. Pour les lignes VirtualHostcd … , reportez les adresses IP vues lors de l'étape précédente.

    <VirtualHost [ADDRESS_1]>
     DocumentRoot /var/www1
     <Directory /var/www1>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_2]>
     DocumentRoot /var/www2
     <Directory /var/www2>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_3]>
     DocumentRoot /var/www3
     <Directory /var/www3>
      Require all granted
     </Directory>
    </VirtualHost>
    

    Enfin, redémarrez Apache :

    user@myinst:~$ sudo /etc/init.d/apache2 restart
    
  3. Essayez d'envoyer du trafic vers votre instance.

    À partir de votre machine locale, nous allons envoyer une requête aux adresses IP externes desservies par les règles de transfert créées plus haut.

    Utilisez curl pour envoyer du trafic aux adresses IP. La réponse pourra être w1, w2 ou w3, en fonction de l'adresse IP.

    me@local:~$curl [ADDRESS_1]
    w1
    
    me@local:~$ curl [ADDRESS_2]
    w2
    
    me@local:~$ curl [ADDRESS_3]
    w3
    

    Et voilà ! Vous avez réussi la configuration de votre premier transfert de protocole !

Règles de transfert

Les règles de transfert fonctionnent conjointement avec les pools cibles et les instances cibles pour prendre en charge les fonctionnalités d'équilibrage de charge et de transfert de protocole. Pour utiliser l'équilibrage de charge ou le transfert de protocole, vous devez créer une règle de transfert qui dirige du trafic vers des pools cibles spécifiques (pour l'équilibrage de charge) ou des instances cibles (pour le transfert de protocole). Il est impossible d'utiliser ces fonctionnalités sans recourir à des règles de transfert.

Les ressources des règles de transfert sont stockées dans la collection "Règles de transfert". Chaque règle de transfert correspond à une adresse IP, à un protocole et, le cas échéant, à une plage de ports spécifiques pour un pool ou une instance cible unique. Lorsque du trafic est envoyé à une adresse IP externe desservie par une règle de transfert, celle-ci dirige ce trafic vers le pool ou les instances cibles correspondants. Vous pouvez créer jusqu'à 50 objets de règle de transfert par projet.

Voici quelques éléments à garder à l'esprit lorsque vous utilisez des règles de transfert :

  • Le nom d'une règle de transfert doit être unique au sein du projet, comporter entre 1 et 63 caractères et correspondre à l'expression régulière : [a-z]([-a-z0-9]*[a-z0-9])?. Le premier caractère doit donc être une lettre minuscule et tous les caractères suivants doivent être un tiret, une lettre minuscule ou un chiffre, sauf le dernier caractère, qui ne peut pas être un tiret.

  • Si vous ne spécifiez pas de protocole de règle de transfert, TCP est utilisé par défaut. Notez également que certains protocoles ne peuvent être utilisés qu'avec des pools cibles ou avec des instances cibles :

    • Si vous utilisez les protocoles ESP, AH, SCTP ou ICMP, vous devez spécifier une instance cible. Il n'est pas possible de spécifier un pool cible lorsque vous utilisez ces protocoles.
    • Si vous utilisez les protocoles TCP ou UDP, vous pouvez spécifier un pool cible ou une instance cible.
  • Il n'est possible de spécifier des plages de ports qu'avec les protocoles TCP, UDP et SCTP.

Ajouter une règle de transfert

Pour ajouter une nouvelle règle de transfert, vous pouvez utiliser la commande gcloud compute forwarding-rules create ou créer une requête HTTP POST dans la collection de règles de transfert. Voici un exemple de création d'une règle de transfert vers une instance cible à l'aide de l'outil de ligne de commande gcloud :

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --load-balancing-scheme internal | external \
    --region [REGION] \
    [--target-instance-zone [ZONE]] \
    --ip-protocol TCP --ports 80 \
    --target-instance [TARGET_INSTANCE]

Si vous omettez le paramètre --target-instance-zone, l'outil de ligne de commande gcloud vous invite à choisir une zone, si vous n'avez pas défini la propriété compute/zone avec la commande gcloud config set compute/zone. Pour en savoir plus, consultez la page Définir une zone ou une région par défaut.

Lorsque le schéma d'équilibrage de charge est interne, la commande gcloud compute forwarding-rules create prend en charge la définition d'une instance comme cible.

Voici un exemple de création d'une règle de transfert vers un pool cible :

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --target-pool [TARGET_POOL] \
    [--region [REGION]]

Si vous omettez le paramètre --region, l'outil de ligne de commande gcloud vous invite à choisir une région, si vous n'avez pas défini la propriété compute/region avec la commande gcloud config set compute/region. Pour en savoir plus, consultez la page Définir une zone ou une région par défaut.

Pour obtenir une description complète des paramètres que vous pouvez utiliser, utilisez la commande create des règles de transfert ou saisissez gcloud compute forwarding-rules create --help.

Pour ajouter une règle de transfert à l'aide de l'API, effectuez une requête HTTP POST sur l'URI suivant :

https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules

Le corps de votre requête doit contenir les champs suivants :

{
 "name": "example-forwarding-rule",
 "IPAddress": "`10.1.1.1",
 "IPProtocol": "TCP",
 "portRange": "80",
 "target": "zones/us-central1-f/targetInstances/example-target-instances"
}

Obtenir la liste des règles de transfert

Pour obtenir la liste des règles de transfert à l'aide de l'outil de ligne de commande gcloud, utilisez la commande list :

gcloud compute forwarding-rules list

Dans l'API, envoyez une requête HTTP GET vide à l'URI suivant :

https://www.googleapis.com/compute/v1/project/myproject/regions/us-central1/forwardingRules

Obtenir des informations sur les règles de transfert

Pour obtenir des informations sur une règle de transfert spécifique via l'outil de ligne de commande gcloud, utilisez la commande describe :

gcloud compute forwarding-rules describe [FORWARDING_RULE] [--region [REGION] | --global]

Si vous omettez les paramètres --region ou --global, l'outil de ligne de commande gcloud suppose que vous utilisez une règle de transfert régional et vous invite à choisir une région, au cas où vous n'auriez pas défini la propriété compute/region avec gcloud config set compute/region. Pour en savoir plus, consultez la page Définir une zone ou une région par défaut.

Dans l'API, envoyez une requête HTTP GET vide à l'URI suivant :

https://www.googleapis.com/compute/v1/project/myproject/regions/us-central1/forwardingRules/example-forwarding-rule

Mettre à jour la cible d'une règle de transfert

Si vous avez déjà créé une règle de transfert, mais que vous souhaitez modifier le pool cible qu'elle utilise, vous pouvez effectuer cette opération à l'aide de la commande set-target via l'outil de ligne de commande gcloud :

gcloud compute forwarding-rules set-target [FORWARDING_RULE] --target-pool [TARGET_POOL] \
    [--region [REGION] | --global]

Dans l'API, envoyez une requête HTTP POST à l'adresse URI suivante :

https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/example-forwarding-rule/setTarget

Votre corps de requête doit contenir l'URL de l'instance cible ou de la ressource de pool cible. Voici, pour les pools cibles, un exemple du format des URI :

{
  "target": "https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/example-target-pool"
}

Supprimer des règles de transfert

Pour supprimer une règle de transfert avec l'outil de ligne de commande gcloud, utilisez la commande delete :

gcloud compute forwarding-rules delete [FORWARDING_RULE] [--region [REGION] | --global]

Pour supprimer une règle de transfert avec l'API, envoyez une requête HTTP DELETE à l'URI suivant, avec un corps de requête vide :

https://www.googleapis.com/compute/v1/project/myproject/regions/us-central1/forwardingRules/example-forwarding-rule

Instances cibles

Une ressource d'instance cible contient une instance de VM qui gère le trafic à partir d'une ou plusieurs règles de transfert et est idéale pour transférer certains types de trafic de protocole devant être gérés par une source unique (ESP et AH, par exemple). Vous pouvez également utiliser une instance cible pour les protocoles TCP et UDP. Aucune règle NAT n'est appliquée aux instances cibles. Elles peuvent donc être utilisées pour le trafic nécessitant un trafic IPsec non NAT pour des réseaux privés virtuels (VPN).

Les instances cibles doivent être hébergées dans la même région que la règle de transfert. Les instances cibles doivent également se trouver dans la même zone que l'instance de la machine virtuelle. Par exemple, si votre règle de transfert réside dans us-central1 et que l'instance que vous voulez utiliser réside dans us-central1-a, l'instance cible doit se situer dans us-central1-a. Si l'instance résidait dans us-central1-b, l'instance cible devrait également résider dans us-central1-b.

Ajouter une instance cible

Pour ajouter une nouvelle instance cible, vous pouvez utiliser la commande gcloud compute target-instances ou créer une requête HTTP POST vers la collection targetInstances. Il n'est pas possible de créer des ressources d'instance cible via la console GCP. Voici un exemple de création d'une instance cible à l'aide de l'outil de ligne de commande gcloud :

gcloud compute target-instances create [TARGET_INSTANCE] --instance INSTANCE

Si vous omettez le paramètre --zone, l'outil de ligne de commande gcloud vous invite à choisir une zone, si vous n'avez pas défini la propriété compute/zone avec la commande gcloud config set compute/zone. Pour en savoir plus, consultez la page Définir une zone ou une région par défaut.

Pour obtenir une description complète des paramètres disponibles, utilisez la commande create des règles de transfert ou saisissez gcloud compute target-instances create --help.

Dans l'API, effectuez une requête HTTP POST à l'URI suivant :

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances

Avec le corps de requête suivant :

body = {
  "name": "example-target-instance",
  "instance": "zones/us-central1-f/instances/example-instance"
}

Obtenir la liste des instances cibles

Pour obtenir la liste des instances cibles grâce à l'outil de ligne de commande gcloud, utilisez la commande list :

gcloud compute target-instances list

Dans l'API, envoyez une requête HTTP GET vide à l'URI suivant :

https://www.googleapis.com/compute/v1/projects/myproject/aggregatedList/targetInstances

Obtenir des informations sur une instance cible

Pour obtenir des informations sur une instance cible spécifique à l'aide de l'outil de ligne de commande gcloud, utilisez la commande describe :

gcloud compute target-instances describe [TARGET_INSTANCE]

Dans l'API, envoyez une requête HTTP GET vide à l'URI suivant :

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances/<target-instance>

Supprimer une instance cible

Pour supprimer une instance cible, vous devez d'abord vous assurer qu'elle n'est référencée par aucune règle de transfert. Si c'est le cas, vous devez tout d'abord supprimer la règle de transfert afin qu'il n'y ait plus de référence.

Une fois que l'instance cible n'est plus référencée par aucune règle de transfert, vous pouvez la supprimer à l'aide de la commande delete via l'outil de ligne de commande gcloud :

gcloud compute target-instances delete [TARGET_INSTANCE]

Dans l'API, envoyez une requête HTTP DELETE vide à l'URI suivant :

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances/<target-instance>

Transfert de protocole pour adresses IP virtuelles privées

Le transfert de protocole peut être utilisé pour des règles de transfert régional pour adresses privées (RFC 1918). Utilisez cette fonctionnalité pour configurer des règles de transfert privées qui envoient le trafic TCP ou UDP à une instance cible dans la même région. Les règles de transfert régional privé peuvent utiliser les instances cibles ou les services de backend, et vous pouvez passer de l'un à l'autre à volonté.

Chaque instance cible contient une seule instance backend. Celle-ci gère le trafic en se basant sur les règles de transfert correspondantes. Pour chaque instance cible, il n'est possible de configurer qu'une seule règle de transfert privée.

Règle de transfert privée avec instance cible (cliquez pour agrandir)
Règle de transfert privée avec instance cible (cliquez pour agrandir)

Le transfert de protocole avec règles de transfert privées est indiqué dans les cas suivants :

  • Vous souhaitez déployer une seule instance backend pour votre service et gérer vous-même les vérifications d'état et autres aspects.
  • Vous souhaitez conserver l'adresse IP privée d'une règle de transfert et souhaitez en modifier l'instance cible.
  • Vous souhaitez assurer la stabilité de votre déploiement en ayant la possibilité de passer facilement à plusieurs instances backend (service de backend) à partir d'une seule instance (instance cible), et ce, sans modifier l'adresse IP de votre règle de transfert privée.

Transition entre instance cible et service de backend

Vous pouvez mettre à jour une règle de transfert privée dirigeant du trafic vers une instance cible avec une seule instance de VM afin qu'elle dirige le trafic vers un service de backend, ou inversement. Lors de cette modification, l'adresse IP de la règle de transfert privée est conservée. Les connexions existantes peuvent être interrompues lors de la transition, car cette modification peut activer ou désactiver l'équilibrage de charge pour les instances de service de backend.

Transition d'un service de backend à une instance cible (cliquez pour agrandir)
Transition d'un service de backend à une instance cible (cliquez pour agrandir)

Vous pouvez effectuer une transition entre une instance cible et un service de backend uniquement avec des règles de transfert privées. Cela est impossible avec des règles de transfert externes.

Mettre à jour la cible d'une règle de transfert privée

Si votre règle de transfert est privée, vous pouvez modifier sa cible pour qu'elle cesse de désigner une instance cible au profit d'un service de backend :

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --backend-service my-backend-service

Vous pouvez ensuite procéder ainsi pour revenir à une instance cible :

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --target-instance my-target-instance

Résoudre les problèmes de transfert de protocole pour les règles de transfert privées

Restriction régionale

Le transfert de protocole pour règles de transfert privées est une fonctionnalité régionale. Tous les clients et les instances de VM cibles doivent être dans la même région.

Message d'erreur : "An internal target instance can only be the target of one forwarding rule" (Une instance cible interne ne peut être la cible que d'une règle de transfert)

Si le message d'erreur An internal target instance can only be the target of one forwarding rule s'affiche, vous tentez peut-être de configurer deux règles de transfert pointant vers la même instance cible. Il est impossible que plusieurs règles de transfert ciblent la même instance.

Restrictions

  • Pour les instances cibles avec règles de transfert privées, les seuls protocoles compatibles sont TCP et UDP.

Limites

  • Vous pouvez configurer jusqu'à 100 règles de transfert privées pointant vers des instances cibles par réseau.

  • Vous pouvez avoir cinq ports par règle de transfert privée.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine