Créer des VM avec plusieurs interfaces réseau

Par défaut, chaque instance de machine virtuelle (VM) d'un réseau cloud privé virtuel (VPC) possède une seule interface réseau. Cependant, vous pouvez configurer une instance avec plusieurs interfaces réseau. Lorsque vous utilisez plusieurs interfaces réseau depuis une instance, chaque interface doit être associée à un sous-réseau qui se trouve dans un réseau VPC différent. Vous ne pouvez pas associer plusieurs interfaces réseau au même sous-réseau ou à des sous-réseaux qui se trouvent dans le même réseau VPC.

Si vous n'avez pas besoin de plusieurs interfaces réseau, suivez la procédure décrite sur la page Créer et démarrer une instance pour créer des instances avec la configuration réseau par défaut.

Pour en savoir plus sur les interfaces réseau multiples et leur fonctionnement, consultez la section Interfaces réseau multiples.

Avant de commencer

Rôles IAM

Pour créer une instance avec plusieurs interfaces réseau, vous devez posséder l'un des rôles suivants :

Créer et supprimer des instances et des modèles d'instance avec plusieurs interfaces dans un projet n'utilisant pas un environnement de VPC partagé : un utilisateur possédant, au niveau du projet, le rôle de propriétaire, d'éditeur ou d'administrateur d'instances Compute (v1) peut créer une instance avec plusieurs interfaces associées à des réseaux et sous-réseaux VPC appartenant au même projet.

Créer et supprimer des instances et des modèles d'instance avec plusieurs interfaces dans des environnements de VPC partagé : un utilisateur disposant du rôle de propriétaire, d'éditeur ou d'administrateur d'instances Compute (v1) sur le projet peuvent créer une instance avec plusieurs interfaces. Si l'une des interfaces est associée à un sous-réseau d'un projet hôte de VPC partagé, vous devez également disposer du rôle d'utilisateur de réseau de Compute (roles/compute.networkUser) au niveau du projet hôte de VPC partagé ou au niveau du sous-réseau de VPC partagé.

Pour en savoir plus sur les autorisations, consultez la documentation IAM de Compute Engine.

Créer des instances de VM avec plusieurs interfaces réseau

Pour obtenir des instructions générales sur la création d'instances, consultez la page Créer et démarrer une instance de VM.

La première interface créée est toujours nic0, et il s'agit toujours de l'interface par défaut. C'est un point important pour d'autres aspects de la mise en réseau Google Cloud. Par exemple,les équilibreurs de charge (à l'exception des équilibreurs de charge réseau passthrough) ne distribuent le trafic que vers nic0. Google Cloud

Console

  1. Accédez à la page Créer une instance dans Google Cloud Console.

    Accéder à la page Créer une instance

  2. Dans le champ Nom, saisissez un nom pour l'instance.

  3. Dans le champ Région, sélectionnez une région.

  4. Dans le champ Zone, sélectionnez une zone.

  5. Dans la section Options avancées, développez Mise en réseau, puis procédez comme suit :

    1. Dans la section Interfaces réseau, développez une interface réseau pour la modifier.

    2. Dans les champs Réseau et Sous-réseau, sélectionnez le réseau et le sous-réseau que vous souhaitez utiliser.

      Si vous souhaitez configurer des adresses IPv6 sur l'interface, sélectionnez un sous-réseau pour lequel une plage d'adresses IPv6 est configurée. Le type d'accès IPv6 du sous-réseau détermine si la VM reçoit une adresse IPv6 interne ou externe.

    3. Sélectionnez l'une des options suivantes pour le type de pile IP de l'interface:

      • IPv4 (pile unique)
      • IPv4 et IPv6 (double pile)
      • IPv6 (pile unique) (preview)
    4. Pour les interfaces avec des adresses IPv4, procédez comme suit:

      1. Dans le champ Adresse IPv4 interne principale, sélectionnez l'une des options suivantes :

        • Éphémère pour attribuer une nouvelle adresse IPv4 éphémère
        • Une adresse IPv4 interne statique réservée de la liste
        • Réserver une adresse IPv4 interne statique pour réserver et attribuer une nouvelle adresse IPv4 interne statique
      2. Dans le champ Adresse IPv4 externe, sélectionnez l'une des options suivantes :

        • Éphémère pour attribuer une nouvelle adresse IPv4 éphémère
        • Aucune pour ne pas attribuer d'adresse IPv4 externe
        • Une adresse IPv4 statique réservée dans la liste
        • Réserver une adresse IP externe statique pour réserver et attribuer une nouvelle adresse IP externe statique
    5. Pour les interfaces avec des adresses IPv6, procédez comme suit, en fonction du type d'accès du sous-réseau connecté:

      1. Dans le champ Adresse IPv6 interne principale, sélectionnez l'une des options suivantes :
        • Allocation automatique pour attribuer automatiquement une nouvelle adresse IPv6 interne éphémère
        • Une adresse IPv6 interne statique réservée de la liste
        • Réserver une adresse IPv6 interne statique pour réserver et attribuer une nouvelle adresse IPv6 interne statique
      2. Dans le champ Adresse IPv6 externe, sélectionnez l'une des options suivantes :
        • Allouer automatiquement pour attribuer automatiquement une nouvelle adresse IPv6 externe éphémère
        • Une adresse IPv6 externe statique réservée de la liste
        • Réserver une adresse IPv6 externe statique pour réserver et attribuer une nouvelle adresse IPv6 externe statique
    6. Pour terminer la modification de l'interface réseau, cliquez sur OK.

  6. Pour ajouter une autre interface, cliquez sur Ajouter une interface réseau.

  7. Poursuivez le processus de création de la VM.

  8. Cliquez sur Créer.

gcloud

Pour créer des interfaces réseau sur une nouvelle instance, utilisez la commande instances create.

Pour chaque interface, incluez l'option --network-interface suivie de toutes les clés réseau adéquates, telles que network, subnet, private-network-ip, address et external-ipv6-address. Pour consulter des exemples de création de VM avec plusieurs interfaces, consultez la section Exemples de configurations.

Cet extrait n'illustre que l'option --network-interface, qui n'est que l'un des nombreux paramètres que vous pouvez renseigner lorsque vous créez une instance.

Pour connaître les types de machines compatibles avec le nombre d'interfaces réseau dont vous avez besoin, consultez le tableau Nombre maximal d'interfaces réseau.

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        private-network-ip=INTERNAL_IPV4_ADDRESS \
        address=EXTERNAL_IPV4_ADDRESS | no-address, \
        internal-ipv6-address=INTERNAL_IPV6_ADDRESS \
    ...
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
        external-ipv6-prefix-length=96 \
        ipv6-network-tier=PREMIUM \
    ...

Remplacez les éléments suivants :

  • INSTANCE_NAME : le nom de l'instance de VM à créer.
  • ZONE : zone où l'instance est créée
  • NETWORK : réseau auquel l'interface est associée.
  • SUBNET : sous-réseau auquel l'interface est associée.
  • STACK_TYPE : type de pile pour l'interface.

    La valeur par défaut est IPV4_ONLY. Spécifiez IPV4_IPV6 pour configurer une interface à double pile ou IPV6_ONLY pour configurer une interface IPv6 uniquement (Preview).

  • Valeurs pour les interfaces avec des adresses IPv4:

    • INTERNAL_IPV4_ADDRESS : adresse IPv4 interne dont vous souhaitez que l'interface dispose dans le sous-réseau cible. Omettez si vous souhaitez simplement attribuer une adresse valide.
    • EXTERNAL_IPV4_ADDRESS: adresse IPv4 externe de l'interface.

      Vous devez avoir réservé une adresse IPv4 externe auparavant. Si vous ne souhaitez pas que l'interface ait une adresse IP externe, spécifiez "no-address" au lieu de address=EXTERNAL_IPV4_ADDRESS. Si vous souhaitez que l'interface reçoive une adresse IP externe éphémère, spécifiez address=''.

  • Valeurs pour les interfaces avec des adresses IPv6:

    • INTERNAL_IPV6_ADDRESS: adresse IPv6 interne dont vous souhaitez que l'interface dispose dans le sous-réseau cible. Vous devez avoir réservé une adresse IPv6 interne auparavant. Si aucune valeur n'est spécifiée,Google Cloud attribue automatiquement une adresse IPv6 interne à partir du sous-réseau.
    • EXTERNAL_IPV6_ADDRESS: adresse IPv6 externe dont vous souhaitez que l'interface dispose dans le sous-réseau cible. Vous devez avoir réservé une adresse IPv6 externe auparavant. Si aucune valeur n'est spécifiée,Google Cloud attribue automatiquement une adresse IPv6 externe à partir du sous-réseau.

API

Utilisez la méthode instances.insert pour créer une instance de VM avec plusieurs interfaces réseau.

  • Pour créer une instance de VM avec uniquement des adresses IPv4 internes, procédez comme suit:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "networkIP": "IPV4_ADDRESS",
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : identifiant du projet contenant l'instance.
    • ZONE : zone dans laquelle se trouve l'instance.
    • IPV4_ADDRESS : adresse IPv4 interne que vous souhaitez attribuer à l'interface réseau.
    • REGION : région qui contient l'instance.
    • SUBNET : sous-réseau où se trouve l'interface réseau.
  • Pour créer une instance de VM avec des adresses IPv4 et IPv6 internes, procédez comme suit:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV4_IPV6,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : identifiant du projet contenant l'instance.
    • ZONE : zone dans laquelle se trouve l'instance.
    • REGION : région qui contient l'instance.
    • SUBNET : sous-réseau où se trouve l'interface réseau.
    • IPV6_ADDRESS: adresse IPv6 interne dont vous souhaitez que l'interface dispose dans le sous-réseau cible. Vous devez avoir réservé une adresse IPv6 interne auparavant. Si aucune valeur n'est spécifiée,Google Cloud attribue automatiquement une adresse IPv6 interne à partir du sous-réseau.
  • Pour créer une instance de VM avec uniquement des adresses IPv6 internes (Preview), procédez comme suit:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV6_ONLY,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : identifiant du projet contenant l'instance.
    • ZONE : zone dans laquelle se trouve l'instance.
    • REGION : région qui contient l'instance.
    • SUBNET : sous-réseau où se trouve l'interface réseau.
    • IPV6_ADDRESS: adresse IPv6 interne dont vous souhaitez que l'interface dispose dans le sous-réseau cible. Vous devez avoir réservé une adresse IPv6 interne auparavant. Si aucune valeur n'est spécifiée,Google Cloud attribue automatiquement une adresse IPv6 interne à partir du sous-réseau.

Terraform

Vous pouvez utiliser une ressource Terraform pour créer une instance de VM avec plusieurs interfaces réseau.

Les arguments Terraform comportent des exemples de valeurs que vous pouvez modifier.

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace with your project ID in quotes
  zone         = "us-central1-b"
  name         = "backend-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = var.subnet_1 # Replace with self link to a subnetwork in quotes
    network_ip = "10.0.0.14"
  }
  network_interface {
    subnetwork = var.subnet_2 # Replace with self link to a subnetwork in quotes
    network_ip = "10.10.20.14"
  }
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Exemples de configurations

Les sections suivantes expliquent comment créer des VM avec plusieurs interfaces.

Configurer plusieurs interfaces réseau avec des adresses IPv4 uniquement

L'exemple de commande suivant crée une instance avec trois interfaces réseau.

 gcloud compute instances create vm1 --machine-type=n1-standard-4 \
    --network-interface '' \
    --network-interface network=net1,subnet=subnet-a,private-network-ip=10.10.10.2,address=EXTERNAL_IPV4_ADDRESS \
    --network-interface network=net2,subnet=subnet-b,private-network-ip=10.10.20.2,no-address

Les interfaces sont créées avec les caractéristiques suivantes :

  • nic0 est créée avec les paramètres par défaut. L'interface est associée à un sous-réseau du réseau VPC par défaut, avec une adresse IP interne allouée automatiquement et une adresse IP externe éphémère.

  • nic1 est associée au sous-réseau subnet-a dans le réseau net1, avec une adresse IPv4 interne 10.10.10.2 et une adresse IPv4 externe statique EXTERNAL_IPV4_ADDRESS.

  • nic2 est associée au sous-réseau subnet-b dans le réseau net2, avec une adresse IPv4 interne 10.10.20.2 et aucune adresse IP externe.

Pour obtenir une description complète de la commande gcloud compute instances create et de l'option --network-interface, consultez la documentation sur la commande.

Vous pouvez utiliser l'adresse IP de l'interface réseau que vous avez ajoutée pour configurer le transfert DNS. Pour en savoir plus sur la configuration des zones de transfert Cloud DNS, consultez la page Zones de transfert.

Configurer plusieurs interfaces réseau avec des adresses IPv4 et IPv6

L'exemple de commande suivant crée une instance à double pile avec deux interfaces réseau.

gcloud compute instances create vm1 \
    --network-interface network=dual-int,subnet=int-subnet,stack-type=IPV4_IPV6 \
    --network-interface network=dual-ext,subnet=ext-subnet,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=ZONE_A

Les interfaces sont créées avec les caractéristiques suivantes :

  • nic0 est associée au sous-réseau int-subnet dans le réseau dual-int, avec une adresse IPv4 interne éphémère et une adresse IPv6 interne éphémère.

  • nic1 est associée au sous-réseau ext-subnet dans le réseau dual-ext, avec une adresse IPv4 interne éphémère et une adresse IPv6 externe éphémère.

Configurer plusieurs interfaces réseau avec des adresses IPv6 uniquement

L'exemple de commande suivant crée une instance IPv6 uniquement (Preview) avec deux interfaces réseau.

gcloud compute instances create vm1 \
    --network-interface network=ipv6-only-int,subnet=int-subnet,stack-type=IPV6_ONLY \
    --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=us-west2-a

Les interfaces sont créées avec les caractéristiques suivantes :

  • nic0 est associée au sous-réseau int-subnet dans le réseau ipv6-only-int, avec une adresse IPv6 interne éphémère.

  • nic1 est associée au sous-réseau ext-subnet dans le réseau ipv6-only-ext, avec une adresse IPv6 externe éphémère.

Configurer plusieurs interfaces réseau pour des groupes d'instances

Vous pouvez utiliser des instances avec plusieurs interfaces réseau dans des groupes d'instances gérés et non gérés.

Pour les groupes d'instances non gérés, créez chaque instance individuellement, en veillant à ce que l'interface réseau nic0 de chaque VM soit associée au même sous-réseau. Ajoutez ensuite les instances de VM au groupe d'instances non géré.

Pour configurer plusieurs interfaces réseau dans des groupes d'instances gérés, vous devez spécifier la configuration réseau de chaque interface dans le modèle d'instance, en définissant l'option --network-interface une fois pour chaque interface. L'exemple suivant permet de créer un modèle d'instance avec trois interfaces réseau :

gcloud compute instance-templates create template-1 \
    --network-interface subnet=net0-subnet-a \
    --network-interface subnet=net1-subnet-b,no-address \
    --network-interface subnet=net2-subnet-c,no-address \
    --region REGION_A

Étant donné que les noms de sous-réseau de chaque région d'un projet doivent être uniques, la spécification de sous-réseaux par nom associe implicitement chaque interface à un réseau VPC. Chaque interface doit utiliser un sous-réseau qui se trouve dans un réseau VPC unique :

  • nic0 utilise le sous-réseau net0-subnet-a.
  • nic1 utilise le sous-réseau net1-subnet-b.
  • nic2 utilise le sous-réseau net2-subnet-c.

L'option no-address de l'option --network-interface indique que l'interface est configurée sans adresse IPv4 externe. L'adresse IP interne provient du sous-réseau utilisé par l'interface. Pour obtenir des informations complètes sur les options et la syntaxe, consultez la section sur l'option --network-interface pour la commande instance-templates create.