Creare VM con più interfacce di rete

Per impostazione predefinita, ogni istanza di macchina virtuale (VM) in una rete Virtual Private Cloud (VPC) ha una singola interfaccia di rete. Tuttavia, puoi configurare un'istanza con più interfacce di rete. Quando utilizzi più interfacce di rete da un'istanza, ciascuna interfaccia deve essere collegata a una subnet in una rete VPC diversa. Non puoi collegare più interfacce di rete alla stessa subnet o a subnet che si trovano nella stessa rete VPC.

Se non hai bisogno di più interfacce di rete, segui la procedura per la creazione e l'avvio di un'istanza per creare istanze con la configurazione di rete predefinita.

Per ulteriori informazioni sulle interfacce di rete multiple e sul loro funzionamento, consulta Più interfacce di rete.

Prima di iniziare

Ruoli IAM

Per creare un'istanza con più interfacce di rete, devi disporre di uno dei seguenti ruoli:

Creazione ed eliminazione di istanze e modelli di istanze con più interface in un progetto che non utilizza un ambiente VPC condiviso: un utente con il ruolo Proprietario, Editor o Amministratore di istanze Compute (v1) a livello di progetto può creare un'istanza con più interfacce associate alle reti e alle subnet VPC che fanno parte dello stesso progetto.

Creazione ed eliminazione di istanze e modelli di istanze con più interfacce negli ambienti VPC condiviso: un utente con il ruolo Proprietario, Editor o Amministratore istanze Compute (v1) a livello di progetto può creare un'istanza con più interfacce. Se una delle interfacce è collegata a una subnet in un progetto host VPC condiviso, devi disporre anche del ruolo Utente di rete Compute (roles/compute.networkUser) a livello di progetto host VPC condiviso o a livello di subnet VPC condiviso.

Per scoprire di più sulle autorizzazioni, consulta la documentazione IAM di Compute Engine.

Crea istanze VM con più interfacce di rete

Per istruzioni generali sulla creazione di istanze, consulta Creare e avviare un'istanza VM.

La prima interfaccia viene sempre creata come nic0 ed è sempre l'interfaccia predefinita. Questo è importante per alcuni altri aspetti della Google Cloud networking. Ad esempio,i Google Cloud bilanciatori del carico (ad eccezione dei bilanciatori del carico di rete passthrough) distribuiscono il traffico solo a nic0.

Console

  1. Nella console Google Cloud, vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nel campo Nome, inserisci un nome per l'istanza.

  3. Nel campo Regione, seleziona una regione.

  4. Nel campo Zona, seleziona una zona.

  5. Nella sezione Opzioni avanzate, espandi Networking e segui questi passaggi:

    1. Nella sezione Interfacce di rete, espandi l'interfaccia di rete per modificarla.

    2. In Rete e Subnet, seleziona la rete e la subnet che vuoi utilizzare.

      Se vuoi configurare gli indirizzi IPv6 sull'interfaccia, seleziona una subnet in cui è configurato un intervallo di indirizzi IPv6. Il tipo di accesso IPv6 della subnet determina se la VM riceve un indirizzo IPv6 interno o un indirizzo IPv6 esterno.

    3. Seleziona una delle seguenti opzioni per il tipo di stack IP per l'interfaccia:

      • IPv4 (stack singolo)
      • IPv4 e IPv6 (stack doppio)
      • IPv6 (stack singolo) (anteprima)
    4. Per le interfacce con indirizzi IPv4:

      1. Per Indirizzo IPv4 interno principale, seleziona una delle seguenti opzioni:

        • Ephemeral per assegnare un nuovo indirizzo IPv4 temporaneo
        • Un indirizzo IPv4 interno statico prenotato dall'elenco
        • Prenota indirizzo IPv4 interno statico per prenotare e assegnare un nuovo indirizzo IPv4 interno statico
      2. Per Indirizzo IPv4 esterno, seleziona una delle seguenti opzioni:

        • Ephemeral per assegnare un nuovo indirizzo IPv4 temporaneo
        • Nessuno per non assegnare un indirizzo IPv4 esterno
        • Un indirizzo IPv4 statico riservato dall'elenco
        • Prenota indirizzo IP esterno statico per prenotare e assegnare un nuovo indirizzo IPv4 esterno statico
    5. Per le interfacce con indirizzi IPv6, procedi nel seguente modo, a seconda del tipo di accesso della subnet connessa:

      1. Per Indirizzo IPv6 interno principale, seleziona una delle seguenti opzioni:
        • Allocato automaticamente per assegnare automaticamente un nuovo indirizzo IPv6 interno temporaneo
        • Un indirizzo IPv6 interno statico prenotato dall'elenco
        • Prenota indirizzo IPv6 interno statico per prenotare e assegnare un nuovo indirizzo IPv6 interno statico
      2. Per Indirizzo IPv6 esterno, seleziona una delle seguenti opzioni:
        • Allocazione automatica per assegnare automaticamente un nuovo indirizzo IPv6 esterno temporaneo
        • Un indirizzo IPv6 esterno statico prenotato dall'elenco
        • Prenota indirizzo IPv6 esterno statico per prenotare e assegnare un nuovo indirizzo IPv6 esterno statico
    6. Per completare la modifica dell'interfaccia di rete, fai clic su Fine.

  6. Per aggiungere un'altra interfaccia, fai clic su Aggiungi interfaccia di rete.

  7. Continua con la procedura di creazione della VM.

  8. Fai clic su Crea.

gcloud

Per creare interfacce di rete in una nuova istanza, utilizza il comando instances create.

Includi il flag --network-interface per ogni interfaccia, seguito da eventuali chiavi di rete appropriate, ad esempio network, subnet, private-network-ip, address e external-ipv6-address. Per visualizzare esempi di come creare VM con più interfacce, consulta Configurazioni di esempio.

Questo snippet illustra solo il flag --network-interface, uno dei molti possibili parametri che puoi specificare durante la creazione di un'istanza.

Per sapere quali tipi di macchine supportano il numero di interfacce di rete di cui hai bisogno, consulta la tabella Numero massimo di interfacce di rete.

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 \
    ...

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza VM da creare.
  • ZONE: la zona in cui viene creata l'istanza.
  • NETWORK: la rete a cui è collegata l'interfaccia.
  • SUBNET: la subnet a cui è collegata l'interfaccia.
  • STACK_TYPE: il tipo di stack per l'interfaccia.

    Il valore predefinito è IPV4_ONLY. Specifica IPV4_IPV6 per configurare un'interfaccia a doppio stack o IPV6_ONLY per configurare un'interfaccia solo IPv6 (Anteprima).

  • Valori per le interfacce con indirizzi IPv4:

    • INTERNAL_IPV4_ADDRESS: l'indirizzo IPv4 interno che vuoi che l'interfaccia abbia nella subnet di destinazione. Ometti se vuoi che venga assegnato un qualsiasi indirizzo valido.
    • EXTERNAL_IPV4_ADDRESS: l'indirizzo IPv4 esterno dell'interfaccia.

      Devi aver riservato in precedenza un indirizzo IPv4 esterno. Se non vuoi che l'interfaccia abbia un indirizzo IP esterno, specifica "no-address" anziché address=EXTERNAL_IPV4_ADDRESS. Se vuoi che l'interfaccia riceva un indirizzo IP esterno temporaneo, specifica address=''.

  • Valori per le interfacce con indirizzi IPv6:

    • INTERNAL_IPV6_ADDRESS: l'indirizzo IPv6 interno che vuoi che l'interfaccia abbia nella subnet di destinazione. Devi aver precedentemente prenotato un indirizzo IPv6 interno. Se non specificato,Google Cloud assegna automaticamente un indirizzo IPv6 interno della subnet.
    • EXTERNAL_IPV6_ADDRESS: l'indirizzo IPv6 esterno che vuoi che l'interfaccia abbia nella subnet di destinazione. Devi aver precedentemente prenotato un indirizzo IPv6 esterno. Se non specificato,Google Cloud assegna automaticamente un indirizzo IPv6 esterno dalla subnet.

API

Utilizza il metodo instances.insert per creare un'istanza VM con più interfacce di rete.

  • Per creare un'istanza VM con solo indirizzi IPv4 interni:

    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...
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto che contiene l'istanza.
    • ZONE: la zona che contiene l'istanza.
    • IPV4_ADDRESS: l'indirizzo IPv4 interno che vuoi assegnare all'interfaccia di rete.
    • REGION: la regione che contiene l'istanza.
    • SUBNET: la subnet in cui si trova l'interfaccia di rete.
  • Per creare un'istanza VM con indirizzi IPv4 e IPv6 interni, svolgi i seguenti passaggi:

    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...
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto che contiene l'istanza.
    • ZONE: la zona che contiene l'istanza.
    • REGION: la regione che contiene l'istanza.
    • SUBNET: la subnet in cui si trova l'interfaccia di rete.
    • IPV6_ADDRESS: l'indirizzo IPv6 interno che vuoi che l'interfaccia abbia nella subnet di destinazione. Devi aver precedentemente prenotato un indirizzo IPv6 interno. Se non specificato,Google Cloud assegna automaticamente un indirizzo IPv6 interno della subnet.
  • Per creare un'istanza VM con solo indirizzi IPv6 interni (anteprima), segui questi passaggi:

    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...
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto che contiene l'istanza.
    • ZONE: la zona che contiene l'istanza.
    • REGION: la regione che contiene l'istanza.
    • SUBNET: la subnet in cui si trova l'interfaccia di rete.
    • IPV6_ADDRESS: l'indirizzo IPv6 interno che vuoi che l'interfaccia abbia nella subnet di destinazione. Devi aver precedentemente prenotato un indirizzo IPv6 interno. Se non specificato, Google Cloud assegna automaticamente un indirizzo IPv6 interno della subnet.

Terraform

Puoi utilizzare una risorsa Terraform per creare un'istanza VM con più interfacce di rete.

Gli argomenti Terraform hanno valori di esempio che puoi modificare.

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"
  }
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Configurazioni di esempio

Le sezioni seguenti mostrano come creare VM con più interfacce.

Configurare più interfacce di rete con solo indirizzi IPv4

Il seguente comando di esempio crea un'istanza con tre interfacce di rete.

 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

Le interfacce vengono create come segue:

  • nic0 viene creato con le impostazioni predefinite. L'interfaccia è collegata a una subnet nella rete VPC predefinita, con un indirizzo IP interno allocato automaticamente e un indirizzo IP esterno temporaneo.

  • nic1 è collegato alla subnet subnet-a nella rete net1, con un indirizzo IPv4 interno 10.10.10.2 e un indirizzo IPv4 esterno statico EXTERNAL_IPV4_ADDRESS.

  • nic2 è collegata alla subnet subnet-b nella rete net2, con un indirizzo IPv4 interno 10.10.20.2 e nessun indirizzo IP esterno.

Per una descrizione completa del comando gcloud compute instances create e del flag --network-interface, leggi la documentazione del comando.

Puoi utilizzare l'indirizzo IP dell'interfaccia di rete che hai aggiunto per configurare il forwarding DNS. Per scoprire di più sulla configurazione delle zone di inoltro di Cloud DNS, consulta Zone di inoltro.

Configurare più interfacce di rete con indirizzi IPv4 e IPv6

Il seguente comando di esempio crea un'istanza a doppio stack con due interfacce di rete.

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

Le interfacce vengono create come segue:

  • nic0 è collegata alla subnet int-subnet nella rete dual-int, con un indirizzo IPv4 interno temporaneo e un indirizzo IPv6 interno temporaneo.

  • nic1 è collegato alla subnet ext-subnet nella rete dual-ext, con un indirizzo IPv4 interno temporaneo e un indirizzo IPv6 esterno temporaneo.

Configurare più interfacce di rete con solo indirizzi IPv6

Il seguente comando di esempio crea un'istanza solo IPv6 (Anteprima) con due interfacce di rete.

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

Le interfacce vengono create come segue:

  • nic0 è collegato alla subnet int-subnet nella rete ipv6-only-int con un indirizzo IPv6 interno temporaneo.

  • nic1 è collegata alla subnet ext-subnet nella rete ipv6-only-ext con un indirizzo IPv6 esterno effimero.

Configurare più interfacce di rete per i gruppi di istanze

Puoi utilizzare istanze con più interfacce di rete nei gruppi di istanze non gestite e nei gruppi di istanze gestite.

Per i gruppi di istanze non gestite, crea ogni istanza singolarmente, assicurandoti che l'interfaccia di rete nic0 di ogni VM sia collegata alla stessa sottorete. Poi, aggiungi le istanze VM al gruppo di istanze non gestite.

Per configurare più interfacce di rete per i gruppi di istanze gestite, devi specificare la configurazione di rete per ogni interfaccia nel modello di istanza impostando il flag --network-interface una volta per ogni interfaccia. Il seguente esempio crea un modello di istanza con tre interfacce di rete:

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

Poiché i nomi delle subnet in ogni regione di un progetto devono essere univoci, la specifica delle subnet per nome associa implicitamente ogni interfaccia a una rete VPC. Ogni interfaccia deve utilizzare una subnet in una rete VPC univoca:

  • nic0 utilizza la subnet net0-subnet-a
  • nic1 utilizza la subnet net1-subnet-b
  • nic2 utilizza la subnet net2-subnet-c

L'opzione no-address nel flag --network-interface indica che l'interfaccia è configurata senza un indirizzo IPv4 esterno. L'indirizzo IP interno proviene dalla subnet utilizzata dall'interfaccia. Per informazioni complete sui parametri e sulla sintassi, consulta il parametro --network-interface per il comando instance-templates create.