Créer des instances avec plusieurs interfaces réseau

Cette page décrit comment configurer plusieurs interfaces réseau sur une instance de machine virtuelle (VM).

Par défaut, chaque instance au sein d'un réseau VPC possède une seule interface réseau par défaut. Ces instructions vous permettront de créer des interfaces réseau supplémentaires. Chaque interface est associée à un réseau VPC distinct, ce qui permet à cette instance d'accéder à différents réseaux VPC au sein de Google Cloud Platform (GCP). Vous ne pouvez pas connecter plusieurs interfaces réseau au même réseau VPC.

Si vous n'avez pas besoin d'interfaces réseau supplémentaires, suivez les instructions de la section Créer et démarrer une instance.

Pour plus d'informations sur les interfaces réseau multiples et leur fonctionnement, consultez la section Interfaces réseau multiples.

Caractéristiques

Exigences

  • Vous ne pouvez configurer une interface réseau que lorsque vous créez une instance.
  • Chaque interface réseau configurée dans une instance donnée doit être connectée à un réseau VPC différent. De plus, chaque interface doit appartenir à un sous-réseau avec une plage d'adresses IP distincte des sous-réseaux des autres interfaces.
  • Les réseaux VPC supplémentaires auxquels les interfaces multiples seront associées doivent exister préalablement à la création de l'instance. Reportez-vous à la section Utiliser des réseaux VPC pour obtenir des instructions sur la création de réseaux VPC supplémentaires.
  • Vous ne pouvez pas supprimer une interface réseau sans supprimer l'instance.
  • Chaque instance doit posséder au moins une interface réseau. Le nombre maximal d'interfaces réseau par instance est de 8, suivant le type de machine de l'instance.
    • L'interface nic0 est requise et doit être configurée à la création de l'instance.
    • Les interfaces nic1 à nic7 sont facultatives, mais elles doivent également être configurées à la création de l'instance.
    • Pour plus d'informations, consultez la section Nombre maximal d'interfaces.
  • Chaque interface peut éventuellement posséder une adresse IP externe.
  • Le serveur DHCP de Google Cloud envoie une route par défaut (RFC 3442, "route statique sans classe") exclusivement à la carte d'interface réseau par défaut, nic0. Si une autre carte nécessite une route par défaut, vous devez la configurer dans l'instance. Lorsque vous modifiez la route par défaut dans l'instance même, utilisez la console série pour éviter de perdre la connectivité à la VM.
  • Vous pouvez utiliser des interfaces réseau multiples avec des réseaux VPC partagés. Une VM ne peut se connecter à un réseau partagé d'un projet différent qu'à travers l'interface réseau par défaut. Par conséquent, si la VM existe dans un projet de service, elle peut se connecter au réseau partagé uniquement sur l'interface par défaut, tandis que toutes les autres interfaces doivent se connecter à des réseaux locaux appartenant au même projet de service. Si la VM existe au sein du projet hôte, ses interfaces réseau peuvent être connectées à n'importe quel réseau du projet hôte.

Limites

  • Vous ne pouvez pas ajouter ou supprimer des interfaces réseau dans une VM existante.
  • Le transfert IP est activé au niveau de la VM et ne peut pas être appliqué à des interfaces individuelles.
  • Si vous créez une instance de VM avec plusieurs interfaces réseau dans un projet de service VPC partagé, seule sa première interface réseau (nic0) peut faire référence à un sous-réseau dans un réseau VPC partagé. Cette limitation ne s'applique pas si vous créez une instance de VM avec plusieurs interfaces réseau dans un projet hôte de VPC partagé.

Autorisations, IAM et instances avec plusieurs interfaces réseau

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

  • Rôle de propriétaire ou d'éditeur du projet
  • Rôle compute.instanceAdmin.v1

Créer et supprimer des instances et des modèles d'instance avec plusieurs interfaces dans un projet standard (projet n'utilisant pas de VPC partagé) : un utilisateur possédant, au niveau du projet, le rôle de propriétaire, d'éditeur ou compute.instanceAdmin.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 possédant, au niveau du projet, le rôle de propriétaire, d'éditeur ou compute.instanceAdmin.v1 peut 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 posséder le rôle compute.networkUser au niveau du projet hôte de VPC partagé ou au niveau du sous-réseau VPC partagé.

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

Utiliser plusieurs interfaces réseau avec différents types de réseaux VPC

  • Les interfaces réseau multiples ne sont pas compatibles avec les anciens réseaux.
  • Lorsque vous configurez plusieurs interfaces réseau, connectez chaque interface à un réseau VPC soit en mode automatique, soit en mode personnalisé.

Allouer les adresses IP des interfaces réseau

  • Vous devez configurer chaque interface réseau avec une adresse IP interne principale allouée à partir de la plage d'adresses IP principale d'un sous-réseau.
    • L'adresse interne principale attribuée à chacune des interfaces d'une même instance doit être différente.
  • Vous pouvez choisir de configurer chacune des interfaces virtuelles (cartes d'interface réseau) avec une adresse IP externe unique. Les adresses externes peuvent être éphémères ou réservées.

Nombre maximal d'interfaces réseau

  • Le nombre maximal d'interfaces virtuelles autorisées par instance est de 8.
  • Le nombre d'interfaces autorisées au sein d'une instance dépend du type de machine de l'instance et du nombre de processeurs virtuels.

De manière générale, les règles suivantes s'appliquent aux VM de types n1-standard-x, n1-highmem-x, n1-highcpu-x, f1-micro, g1-small et personnalisé :

  • 2 interfaces réseau pour les VM ayant moins de 2 processeurs virtuels.
  • 1 interface réseau par processeur virtuel pour les VM ayant plus de 2 processeurs virtuels, avec un maximum de 8 interfaces réseau par VM.

Le tableau suivant vous permet de déterminer le nombre d'interfaces réseau pouvant être associées à une instance :

Type d'instance Nombre de processeurs virtuels Nombre de cartes réseau virtuelles
n1-standard-x, n1-highmem-x, n1-highcpu-x, n1-highmem-x, n1-highcpu-x Spécifié par la valeur de "x". 1 carte réseau par valeur de "x", avec un minimum de 2 et un maximum de 8 cartes réseau
f1-micro 0,2 processeur virtuel 2 cartes réseau
g1-small 0,5 processeur virtuel 2 cartes réseau
Instances personnalisées Configurable de 1 à 64 processeurs virtuels 1 carte réseau par processeur virtuel, avec un minimum de 2 et un maximum de 8 cartes réseau

Créer des instances de machines virtuelles avec plusieurs interfaces réseau

Le processus de création d'une instance dotée d'une seule interface reste inchangé. Pour obtenir des instructions générales sur la création d'instances, consultez la page Créer et démarrer une instance.

L'ajout d'interfaces réseau supplémentaires s'effectue à la création de l'instance.

  • Dans la console, vous ajoutez des interfaces réseau depuis la page Créer une instance, section Réseau -> Interfaces réseau.
  • Dans l'outil de ligne de commande gcloud, 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).

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 Google Cloud (à l'exception de l'équilibrage de charge TCP/UDP interne) ne distribuent le trafic que vers nic0.

Console


  1. Accédez à la page "Créer une instance" dans Google Cloud Console.
    Accéder à la page "Créer une instance"
  2. Renseignez les sections correspondant au nom de l'instance, sa zone, son type de machine et autres informations de base de l'instance.
  3. Renseignez les champs des onglets Gestion et Disques.
  4. Dans l'onglet Réseau, cliquez sur Ajouter une interface réseau.
  5. Sélectionnez un réseau.
  6. S'il existe plusieurs sous-réseaux dans le réseau VPC, choisissez un sous-réseau.
  7. Pour allouer une adresse IP interne personnalisée à l'interface, dans le menu déroulant Adresse IP interne, choisissez Personnalisée puis saisissez l'adresse IP.
  8. Pour indiquer que vous ne souhaitez pas d'adresse IP externe, dans le menu déroulant Adresse IP externe, choisissez Aucune.
  9. Pour allouer une adresse IP externe statique, dans le menu déroulant Adresse IP externe, sélectionnez Nouvelle adresse IP statique, saisissez le nom et la description, puis cliquez sur Réserver.
  10. Pour activer le transfert IP, choisissez l'option Activé dans le menu déroulant Transfert IP.
  11. Pour ajouter d'autres interfaces réseau, cliquez sur Ajouter une interface réseau et répétez les étapes 5 à 10 ci-dessus.

gcloud

La commande instances create vous permet de créer des interfaces réseau sur une nouvelle instance. 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).

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 les autres options, consultez la documentation de référence de gcloud sur la commande instances create. Consultez le tableau Nombre maximal d'interfaces réseau pour vérifier quels types de machines acceptent le nombre d'interfaces réseau dont vous avez besoin.

gcloud compute instances create INSTANCE_NAME --machine-type=MACHINE_TYPE \
    [--network-interface
        [network=NETWORK_NAME; default="default" | subnet=SUBNET]
        [address=ADDRESS | no-address]
        [private-network-ip=PRIVATE_NETWORK_IP]
    ...]

API

Créez une instance de VM avec plusieurs interfaces réseau.

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

Remplacez les espaces réservés par des valeurs valides :

  • SUBNET_URL correspond à l'URL du sous-réseau où se trouvera l'interface réseau.
  • PROJECT_ID correspond à l'ID du projet qui contiendra l'instance.
  • ZONE correspond à la zone dans laquelle se trouvera l'instance.

Pour plus d'informations, reportez-vous à la documentation sur la méthode instances.insert.

Exemple

Exemple de commande pour créer une instance dotée de trois interfaces réseau :

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

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

  • nic0 avec tous les paramètres par défaut. Elle est associée au réseau VPC par défaut, avec une adresse IP interne allouée automatiquement et une adresse IP externe éphémère.
  • nic1 appartient au sous-réseau net1-subnet-a, avec comme adresse IP interne 10.128.0.2 et comme adresse IP externe statique 35.237.93.110.
  • nic2 appartient au sous-réseau net2-subnet-b, avec comme adresse IP interne 10.129.0.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.

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

Toutes les instances d'un groupe d'instances géré doivent appartenir à un même sous-réseau. Toutes les instances d'un groupe non géré doivent appartenir à un même sous-réseau lorsqu'elles sont utilisées pour l'équilibrage de charge. Pour en savoir plus, consultez la documentation sur les réseaux VPC et l'équilibrage de charge.

Du fait de ces restrictions, il ne peut y avoir qu'une seule interface par instance. GCP effectue des validations sur la base du sous-réseau associé à l'unique interface de l'instance.

Lorsque vous configurez plusieurs interfaces pour des instances appartenant à un groupe géré ou non, Google Cloud continue de valider ces conditions pour l'interface par défaut nic0.

Créer un modèle d'instance avec plusieurs interfaces

Le processus de création d'un modèle d'instance utilisant une seule interface par instance est inchangé. Il est décrit dans la documentation de référence de gcloud sur la commande instance-templates create.

Pour configurer plusieurs interfaces réseau dans un modèle d'instance, définissez l'option --network-interface pour chaque interface réseau à créer :


gcloud compute instance-templates create NAME [--description DESCRIPTION] \
    [--network-interface [network NETWORK; default="default" | subnet SUBNET][address ADDRESS| no-address] \
    [--network-interface [network NETWORK; default="default" | subnet SUBNET][address ADDRESS | no-address] \
    .....

Vous pouvez assigner à chaque interface les clés réseau suivantes : network, subnet, address.

Ainsi, si vous exécutez la commande suivante, chaque instance sera dotée de 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 us-central1`

Les interfaces sont définies ainsi :

  • nic0 appartient au sous-réseau net0-subnet-a et possède une adresse IP externe allouée automatiquement.
  • nic1 appartient au sous-réseau net1-subnet-b et ne possède pas d'adresse IP externe.
  • nic2 appartient au sous-réseau net2-subnet-c et ne possède pas d'adresse IP externe.

Pour obtenir des informations complètes sur les options et la syntaxe, consultez la documentation sur la commande instance-templates create.

Configurer une liaison de règle

Pour les images prises en charge par Google, vous pouvez avoir besoin d'une interface réseau secondaire (autre que nic0) pour communiquer avec une adresse IP hors de la plage principale du sous-réseau associé à cette interface secondaire. Dans ce cas, vous devez configurer la liaison de règle pour garantir que les paquets de sortie seront envoyés par la bonne interface. Cela nécessite de configurer une table de routage distincte pour chaque interface réseau à l'aide de la liaison de règle.

Pour configurer la liaison de règle sur une instance Linux avec interfaces multiples, suivez les étapes ci-dessous :

  1. Connectez-vous à une instance configurée avec plusieurs interfaces réseau :

    gcloud compute ssh multinic-vm
    
  2. Configurez la liaison de règle pour nic1 au moyen de ifconfig. Dans l'exemple ci-dessous, on suppose que Google Cloud a alloué l'adresse IP interne 192.168.0.2 à nic1 et que la passerelle par défaut du sous-réseau est 192.168.0.1.

    sudo ifconfig eth1 192.168.0.2 netmask 255.255.255.255 broadcast 192.168.0.2 mtu 1430
    echo "1 rt1" | sudo tee -a /etc/iproute2/rt_tables
    sudo ip route add 192.168.0.1 src 192.168.0.2 dev eth1 table rt1
    sudo ip route add default via 192.168.0.1 dev eth1 table rt1
    sudo ip rule add from 192.168.0.2/32 table rt1
    sudo ip rule add to 192.168.0.2/32 table rt1
    
  3. Répétez les commandes de l'étape 2 pour configurer des interfaces supplémentaires sur l'instance (nic2, nic3... nic7).

Dépannage

Je n'arrive pas à créer une VM avec plusieurs interfaces

L'un des messages d'erreur suivants peut s'afficher :

  • Invalid value for field 'resource': ''. Too many network interfaces. The maximum number of network interfaces allowed for this machine type is.

    Si vous obtenez ce message d'erreur, cela signifie que vous essayez de créer plus d'interfaces que le maximum autorisé par le type de machine de votre instance. Reportez-vous au tableau indiquant le nombre maximal d'interfaces.

  • Networks must be distinct for NICs attached to a VM.

    Si vous obtenez ce message, cela signifie que vous essayez de créer plusieurs interfaces sur le même réseau. Chaque interface réseau doit être connectée à un réseau VPC distinct.

  • Subnetwork CIDR ranges must be non-overlapping for NICs attached to a VM.

    Si vous obtenez ce message, cela signifie que les plages CIDR associées aux interfaces de votre VM se chevauchent. Ces plages CIDR incluent toutes les plages principales des sous-réseaux associés aux interfaces de la VM, ainsi que les plages secondaires utilisées pour les plages d'adresses IP d'alias . Chaque interface est associée à un sous-réseau, appartenant lui-même à un réseau VPC distinct, et aucun de ces sous-réseaux ne doit chevaucher les sous-réseaux d'autres interfaces. Ainsi, si vous essayez de créer une instance dans la région us-west1, vous pouvez vérifier les plages CIDR principales du sous-réseau à l'aide de la commande suivante ou de Google Cloud Console.

    gcloud compute networks subnets list --regions us-west1
    NAME                REGION    NETWORK          RANGE
    default             us-west1  default          10.138.0.0/20
    overlapping-subnet  us-west1  test-network     10.138.8.0/24
    

    Pour vérifier les plages CIDR des sous-réseaux secondaires, utilisez la commande suivante ou Google Cloud Console.

    gcloud compute networks subnets describe overlapping-subnet --region us-west1
    
    ...
    ipCidrRange: 10.128.8.0/24
    ...
    secondaryIpRanges:
    - ipCidrRange: 10.138.8.0/24
      rangeName: conflicting-range
    
  • Multiple network interfaces are not supported on legacy networks.

    Si vous obtenez ce message, cela signifie que vous essayez de créer votre instance dans un réseau ancien. Les instances à interfaces multiples ne sont pas compatibles avec les réseaux anciens. Vous pouvez vérifier si un réseau est un ancien réseau à l'aide de la commande suivante ou de Google Cloud Console. Le champ Mode indique le type de réseau.

    gcloud compute networks list
    NAME             MODE    IPV4_RANGE     GATEWAY_IPV4
    default          auto
    legacy-network   legacy  10.240.0.0/16  10.240.0.1
    test-network     custom
    

  • Required 'compute.instances.create' permission for 'projects/PROJECT_ID/zones/ZONE/instances/test-inst'

    Si vous obtenez ce message, cela signifie que le compte au moyen duquel vous êtes connecté ne dispose pas des autorisations IAM requises pour créer une instance. Reportez-vous à la section Autorisations IAM afin d'obtenir des informations détaillées sur les rôles requis pour créer des instances. Vous pouvez vérifier si la stratégie IAM associée à votre projet vous confère l'un des rôles suivants : OWNER, EDITOR ou compute.instanceAdmin.v1. Pour créer des instances dans un VPC partagé, vous aurez également besoin du rôle compute.networkUser. Dans l'exemple ci-dessous, le compte email2@gmail.com ne possède pas les autorisations IAM suffisantes pour créer une instance. Pour obtenir des instructions plus détaillées, consultez la page Attribuer, modifier et révoquer les accès à des ressources du guide IAM.

    gcloud projects get-iam-policy PROJECT_ID
    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

    Vous pouvez demander au propriétaire ou à l'éditeur de votre projet de vous accorder l'un des rôles OWNER, EDITOR ou compute.instanceAdmin.v1. Vous aurez également besoin du rôle compute.networkUser si vous associez une interface à l'un des sous-réseaux appartenant au VPC partagé.

    gcloud projects set-iam_policy --member user:email2@gmail.com --role roles/editor
    

Je ne parviens pas à me connecter à l'adresse IP interne d'une interface secondaire

  • Vérifiez les règles de pare-feu pour vous assurer qu'elles autorisent la connexion à l'interface secondaire de la VM. Pour cela, vous pouvez consulter les règles de pare-feu correspondant au réseau associé à l'interface secondaire, soit dans Google Cloud Console en cliquant sur le réseau VPC adéquat, soit au moyen de la commande gcloud suivante.

    gcloud compute firewall-rules list --filter='network:NETWORK_NAME'
    
  • Vérifiez si vous essayez de vous connecter à cette interface secondaire depuis une adresse située soit sur Internet, soit à l'extérieur du réseau de cette interface. Vous ne pouvez vous connecter à l'adresse IP interne d'une interface que depuis son réseau. Si vous devez accéder à cette interface depuis l'extérieur du réseau, vous pouvez lui allouer une adresse IP externe.

  • Vérifiez si vous essayez de vous connecter à l'adresse IP interne de l'interface secondaire depuis un emplacement extérieur au sous-réseau qui lui est associé ; il peut s'agir d'un autre sous-réseau du même réseau ou d'un réseau appairé. La section Plusieurs interfaces réseau par instance explique l'interaction entre l'appairage de VPC et les instances de VM à plusieurs interfaces. Pour communiquer avec une interface secondaire depuis un emplacement extérieur au sous-réseau de l'interface, vous pourrez être amené à configurer des routes sur la VM. Consultez la section Comportement DHCP avec plusieurs interfaces réseau pour en savoir plus sur la manière dont DHCP programme les routes par défaut dans la VM.

Je ne parviens pas à me connecter à une interface secondaire au moyen d'une adresse IP externe

Le serveur DHCP ne programme une route par défaut que sur l'interface réseau principale de la VM. Si vous souhaitez vous connecter à l'interface secondaire au moyen d'une adresse IP externe, vous disposez de deux options. Si vous devez uniquement vous connecter en dehors du réseau associé à cette interface secondaire, vous pouvez définir une route par défaut sur cette interface. Sinon, vous pouvez utiliser la section Configurer une liaison de règle pour configurer dans votre VM une table de routage distincte à l'aide de la liaison de règle basée sur les sources.

J'ai des problèmes de connectivité lorsque j'utilise un masque de réseau autre que /32

Par défaut, le serveur de métadonnées d'une instance ne répond aux requêtes ARP que pour la passerelle par défaut.

Pour configurer des interfaces avec un masque de réseau autre que /32, vous devez créer une image au moyen de l'option --guest-os-features MULTI_IP_SUBNET et utiliser cette image pour créer votre instance. Ainsi, si vous utilisez une image basée sur debian-9, vous pouvez créer une image au moyen de la commande suivante :

gcloud compute images create debian-9-multi-ip-subnet \
     --source-disk debian-9-disk \
     --source-disk-zone us-west1-a \
     --guest-os-features MULTI_IP_SUBNET

Pour afficher les fonctionnalités configurées sur l'image invitée, exécutez la commande gcloud compute images describe sur celle-ci.

gcloud compute images describe debian-9-multi-ip-subnet

Pour plus d'informations sur la création d'images personnalisées, consultez la section Créer, supprimer et rendre obsolètes des images personnalisées.

Dépannage à l'aide de la console série

Il est souvent judicieux d'activer la console série sur la VM pour déboguer les problèmes de configuration. Vous pouvez activer la console série pour le débogage interactif en suivant les instructions de la section concernant l'interaction avec la console série.