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, par exemple :
Hébergement virtuel par adresses IP
Vous pouvez configurer plusieurs règles de transfert pour qu'elles pointent vers une seule instance cible, ce qui vous permet d'utiliser plusieurs adresses IP externes avec une seule instance de VM. Vous pouvez l'utiliser dans des scénarios dans lesquels vous souhaitez exposer des données à partir d'une seule instance de VM, mais via différentes adresses IP externes. Cela se révèle particulièrement utile pour configurer l'hébergement virtuel SSL.
Réseaux privés virtuels (VPN)
Consultez les sections :
Adresses IP virtuelles privées
Vous pouvez utiliser le transfert de protocole pour les règles de transfert régional privées avec des plages de sous-réseaux VPC. 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 Concepts des règles de transfert pour en savoir plus sur le transfert du trafic vers un équilibreur de charge.
Pour l'hébergement virtuel par adresses IP, les réseaux privés virtuels (VPN) et l'équilibrage de charge, Compute Engine accepte le transfert de protocole des protocoles suivants :
AH
: spécifie le protocole d'en-tête d'authentification IP ou AH.ESP
: spécifie le protocole de charge utile de sécurité avec encapsulation IP ou ESP.ICMP
: spécifie le protocole de message de contrôle Internet ou ICMP.SCTP
: spécifie le protocole de transmission de contrôle de flux ou SCTP.TCP
: spécifie le protocole de contrôle de transmission ou TCP.UDP
: spécifie le protocole de datagramme utilisateur ou UDP.
Pour les adresses IP virtuelles privées, seuls les protocoles TCP et UDP sont pris en charge :
TCP
: spécifie le protocole de contrôle de transmission ou TCP.UDP
: spécifie le protocole de datagramme utilisateur ou UDP.
Le transfert de protocole est facturé aux mêmes tarifs que le service d'équilibrage de charge. Pour plus d'informations, consultez la page Tarifs.
Avant de commencer
Assurez-vous de disposer des autorisations appropriées pour créer des règles de transfert.
Assurez-vous qu'une condition de gestion de l'authentification et des accès (IAM) n'accorde pas de conditions aux membres leur permettant de ne créer que des règles de transfert internes. Si une telle condition est active, la création de la règle de transfert échoue et une erreur d'autorisation s'affiche.
Pour en savoir plus, consultez la page Présentation du contrôle des accès.
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 :
Créez une instance cible.
Votre instance cible est une instance de VM unique, mais cette instance peut exister au moment où vous créez l'instance cible, ou elle peut être créée par la suite.
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 :
- Configuration d'un serveur Apache sur une instance de VM
- Création d'une instance cible et des règles de transfert correspondantes
- 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 créer une instance de VM unique avec Apache, procédez comme suit :
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 update && sudo apt -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.shSi 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
Créez un tag pour votre future VM afin de pouvoir ultérieurement lui appliquer un pare-feu :
me@local:~$ TAG="www-tag"
Créez une instance de VM pour gérer le trafic de 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
Créez une règle de pare-feu pour autoriser le trafic externe vers cette 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
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. Vous ne pouvez pas 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
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 plus d'informations, consultez la documentation relative aux règles de transfert.
Dans cet exemple, les commandes suivantes créent 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 à l'option
--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
Vous pouvez maintenant commencer à envoyer du trafic vers votre instance cible.
Envoyer du trafic vers une instance
Obtenez les adresses IP externes de vos nouvelles règles de transfert.
Exécutez
gcloud compute forwarding-rules list
pour obtenir les adresses IP externes de vos règles de transfert. Par exemple, le tableau suivant répertorie les adresses IP éphémères qui sont attribué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.
Configurez les hôtes virtuels Apache de l'instance de VM pour diffuser différentes informations en fonction de l'URL de destination.
Commencez par vous connecter à votre instance :
gcloud compute ssh pf-instance
Ensuite, modifiez le fichier
/etc/apache2/sites-enabled/000-default.conf
et ajoutez les lignes suivantes. Pour les lignesVirtualHost
cd .., utilisez les adresses IP notées à 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
Essayez d'envoyer du trafic vers votre instance.
Sur votre ordinateur local, envoyez une requête aux adresses IP externes desservies par les règles de transfert que vous avez créées.
Utilisez
curl
pour envoyer le trafic vers les adresses IP. La réponse renvoiew1
,w2
ouw3
en fonction de l'adresse IP.me@local:~$curl [ADDRESS_1] w1
me@local:~$ curl [ADDRESS_2] w2
me@local:~$ curl [ADDRESS_3] w3
La configuration de votre transfert de protocole est prête.
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). Vous ne pouvez pas 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 fait correspondre une adresse IP, un protocole et, le cas échéant, une plage de ports spécifiques avec 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 de 1 à 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 minuscule et tous les caractères suivants doivent être soit un tiret, soit une lettre minuscule, soit un chiffre, à l'exception du 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
ouICMP
, vous devez spécifier une instance cible. Vous ne pouvez pas spécifier un pool cible lorsque vous utilisez ces protocoles. - Si vous utilisez les protocoles
TCP
ouUDP
, vous pouvez spécifier un pool cible ou une instance cible.
- Si vous utilisez les protocoles
Il n'est possible de spécifier des plages de ports qu'avec les protocoles
TCP
,UDP
etSCTP
.
Ajouter une règle de transfert
Pour ajouter une règle de transfert, vous pouvez utiliser la commande gcloud compute forwarding-rules create
ou créer une requête HTTP POST
pour la collection 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 l'option --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 gcloud config set compute/zone
. Pour en savoir plus, consultez la section Définir les propriétés par défaut.
La commande gcloud compute forwarding-rules create
permet de définir une instance cible en tant que cible lorsque le schéma d'équilibrage de charge est interne.
L'exemple suivant illustre la 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 l'option --region
, l'outil de ligne de commande gcloud
vous invite à choisir une zone si vous n'avez pas défini la propriété compute/region
avec gcloud config set compute/region
. Pour en savoir plus, consultez la section Définir les propriétés par défaut.
Pour obtenir une description complète des options que vous pouvez utiliser, consultez la section concernant 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, envoyez une requête HTTP POST
à l'URI suivant :
https://compute.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"
}
Pour savoir comment répertorier des règles de transfert, obtenir des informations sur une règle de transfert spécifique ou supprimer des règles de transfert, consultez les pages suivantes de la documentation de référence sur le SDK gcloud
et l'API :
- gcloud compute forwarding-rules
- Ressource REST : forwardingRules
- Ressource REST : globalForwardingRules
Instances cibles
Une ressource Instance cible contient une instance de VM qui gère le trafic provenant d'une ou plusieurs règles de transfert. Elle est idéale pour transférer certains types de trafic protocole gérés par une source unique (par exemple, ESP
et AH
), mais vous pouvez également utiliser une instance cible pour les protocoles TCP
et UDP
.
Les instances cibles ne sont pas associées à une règle NAT. Elles peuvent donc être utilisées pour le trafic nécessitant un trafic IPsec non NAT pour les réseaux VPN.
Les instances cibles doivent se trouver 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 VM. Par exemple, si votre règle de transfert est dans us-central1
et que l'instance que vous souhaitez utiliser est dans us-central1-a
, l'instance cible doit être dans us-central1-a
. Si l'instance se trouve dans us-central1-b
, l'instance cible doit également être dans us-central1-b
.
Ajouter une instance cible
Pour ajouter une instance cible, vous pouvez utiliser la commande gcloud compute target-instances
ou créer des requêtes HTTP POST
dans la collection targetInstances.
Vous ne pouvez pas créer des ressources d'instance cible à l'aide de Cloud Console. L'exemple suivant illustre la 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 l'option --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 gcloud config set compute/zone
. Pour en savoir plus, consultez la section Définir les propriétés par défaut.
Pour obtenir une description complète des options que vous pouvez utiliser, consultez la commande create
ou saisissez gcloud compute target-instances create --help
.
Dans l'API, envoyez une requête HTTP POST
à l'adresse URI suivante :
https://compute.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"
}
Pour savoir comment répertorier les instances cibles, obtenir des informations sur une instance cible spécifique ou supprimer une instance cible, consultez les pages suivantes de la documentation de référence sur le SDK gcloud
et l'API :
Transfert de protocole pour adresses IP virtuelles privées
Le transfert de protocole peut être utilisé pour des règles de transfert régional privées. 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.
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.
Vous pouvez effectuer une transition entre une instance cible et un service de backend uniquement avec des règles de transfert privées. Cela n'est pas possible avec le transfert de protocole qui utilise 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 revenir à une instance cible :
gcloud compute forwarding-rules set-target my-forwarding-rule
--target-instance my-target-instance
Appliquer des paramètres de transfert de protocole à un projet, un dossier ou une organisation
Utilisez une règle d'administration pour limiter les types de transfert de protocole pouvant être créés dans votre organisation. Définissez la contrainte de règle d'administration suivante :
constraints/compute.restrictProtocolForwardingCreationForTypes
Lorsque vous définissez la contrainte compute.restrictProtocolForwardingCreationForTypes
, vous spécifiez les types de transfert de protocole non autorisés. Pour obtenir la liste des types disponibles, consultez la section décrivant les restrictions sur la création de transfert de protocole.
Configurer une règle d'administration
Console
Pour définir une règle d'administration de transfert de protocole à partir de la console, procédez comme suit :
- Dans Google Cloud Console, accédez à la page Règles d'administration.
- Dans le champ Filtre, saisissez
protocol
et sélectionnez constraints/compute.restrictProtocolForwardingCreationForTypes. - Cliquez sur Restreindre le transfert de protocole en fonction du type d'adresse IP.
- Cliquez sur Modifier pour modifier vos contraintes de règle de transfert de protocole existantes.
- Pour créer une règle personnalisée, sélectionnez Personnaliser.
- Une fois les modifications effectuées, cliquez sur Enregistrer pour appliquer les paramètres de contrainte.
gcloud
Pour définir une règle d'administration de transfert de protocole, utilisez la commande gcloud resource-manager org-policies
enable-enforce
.
Trouvez l'ID de votre organisation.
gcloud organizations list
Créez le fichier de règle, comme indiqué dans les exemples suivants.
Répertorier les valeurs à refuser
{ "constraint": "constraints/compute.restrictProtocolForwardingCreationForTypes", "listPolicy": { "deniedValues": [ "INTERNAL", "EXTERNAL" ] } }
Autoriser les règles de transfert internes
{ "constraint": "constraints/compute.restrictProtocolForwardingCreationForTypes", "listPolicy": { "deniedValues": [ "EXTERNAL" ] } }
Refuser toutes les règles de transfert
{ "constraint": "constraints/compute.restrictProtocolForwardingCreationForTypes", "listPolicy": { "allValues": "DENY" } }
Définissez la contrainte dans votre organisation. Remplacez
ORGANIZATION_ID
par votre ID d'organisation.gcloud resource-manager org-policies set-policy POLICY_FILE \ --organization=ORGANIZATION_ID
Vous pouvez également appliquer une règle d'administration de transfert de protocole à un dossier ou à un projet avec les options
--folder
ou--project
, associées respectivement à l'ID du dossier et l'ID du projet.Pour les dossiers, exécutez la commande suivante :
gcloud resource-manager org-policies set-policy POLICY_FILE \ --folder=FOLDER_ID
Pour les projets, exécutez la commande suivante :
gcloud resource-manager org-policies set-policy POLICY_FILE \ --project=PROJECT_ID
Remplacez les éléments suivants :
FOLDER_ID
: l'ID de votre dossier.PROJECT_ID
: l'ID de votre projet.
Une fois la règle définie, elle est appliquée lorsque vous ajoutez les règles de transfert Google Cloud correspondantes.
La contrainte n'est pas appliquée aux configurations de transfert de protocole existantes.
Si vous tentez de créer un transfert de protocole d'un type qui ne respecte pas la contrainte, la tentative échoue et un message d'erreur est généré. Le message d'erreur s'affiche au format suivant :
Constraint constraints/compute.restrictProtocolForwardingCreationForTypes violated for projects/PROJECT_NAME. Forwarding Rule projects/PROJECT_NAME/region/REGION/forwardingRules/FORWARDING_RULE_NAME of type SCHEME is not allowed.
Si vous définissez plusieurs contraintes restrictProtocolForwardingCreationForTypes
à différents niveaux de ressources et que vous définissez le champ inheritFromParent
sur true
, les contraintes sont appliquées de manière hiérarchique.
Pour en savoir plus sur la définition des règles d'administration, y compris la description des options disponibles, consultez les pages Créer et gérer des règles d'administration et Utiliser des contraintes.
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 essayez 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 jusqu'à 5 ports par règle de transfert privée.