Crear VMs con varias interfaces de red

En esta página se describe cómo crear instancias de VM con varias interfaces de red.

Antes de empezar, familiarízate con las características de las instancias con varias interfaces de red, tal como se describe en el artículo Descripción general de las interfaces de red múltiples.

Roles de gestión de identidades y accesos

Para crear una instancia con varias interfaces de red, debes tener uno de los siguientes roles:

Crear y eliminar instancias y plantillas de instancias con varias interfaces en un proyecto que no utilice un entorno de VPC compartida: un usuario con el rol Propietario, Editor o Administrador de instancias de Compute (v1) puede crear una instancia con varias interfaces asociadas a redes y subredes de VPC que formen parte del mismo proyecto.

Crear y eliminar instancias y plantillas de instancias con varias interfaces en entornos de VPC compartida: un usuario con el rol Propietario, Editor o Administrador de instancias de Compute (v1) puede crear una instancia con varias interfaces. Si alguna de las interfaces está conectada a una subred de un proyecto host de VPC compartida, también debes tener el rol Usuario de red de Compute (roles/compute.networkUser) en todo el proyecto host o en las subredes que necesites usar.

Para obtener más información sobre los permisos, consulta la documentación de gestión de identidades y accesos de Compute Engine.

Crear instancias de máquina virtual con varias interfaces de red

En esta sección se describe cómo crear una instancia con varias interfaces de red, incluidas las NICs virtuales y las NICs dinámicas. Para obtener instrucciones generales sobre cómo crear instancias, consulta Crear y poner en marcha una instancia de VM.

La primera interfaz siempre se crea como nic0 y siempre es la interfaz predeterminada.

Consola

  1. En la Google Cloud consola, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. En el campo Name (Nombre), introduce un nombre para la instancia.

  3. En el campo Región, selecciona una región.

  4. En el campo Zona, selecciona una zona.

  5. En la sección Opciones avanzadas, expande Redes y, a continuación, haz lo siguiente:

    1. En la sección Interfaces de red, despliega la interfaz de red que quieras editar.

    2. En Red y Subred, selecciona la red y la subred que quieras usar.

      Si quieres configurar direcciones IPv6 en la interfaz, selecciona una subred que tenga configurado un intervalo de direcciones IPv6. El tipo de acceso IPv6 de la subred determina si la instancia recibe una dirección IPv6 interna o una dirección IPv6 externa.

    3. Seleccione una de las siguientes opciones para el tipo de pila de IP de la interfaz:

      • IPv4 (pila única)
      • IPv4 e IPv6 (pila dual)
      • IPv6 (pila única) (Vista previa)
    4. En las interfaces con direcciones IPv4, haz lo siguiente:

      1. En Dirección IPv4 interna principal, selecciona una de las siguientes opciones:

        • Efímera (automática) para asignar automáticamente una nueva dirección IPv4 efímera
        • Efímera (personalizada) para especificar manualmente una nueva dirección IPv4 efímera
        • Una dirección IPv4 interna estática reservada de la lista
        • Reservar dirección IPv4 interna estática para reservar y asignar una nueva dirección IPv4 interna estática
      2. En Dirección IPv4 externa, seleccione una de las siguientes opciones:

        • Efímera para asignar una nueva dirección IPv4 efímera
        • Ninguna para no asignar una dirección IPv4 externa
        • Una dirección IPv4 estática reservada de la lista
        • Reservar dirección IP externa estática para reservar y asignar una nueva dirección IPv4 externa estática
    5. En las interfaces con direcciones IPv6, haga lo siguiente en función del tipo de acceso de la subred conectada:

      1. En Dirección IPv6 interna principal, seleccione una de las siguientes opciones:
        • Efímera (automática) para asignar automáticamente una nueva dirección IPv6 interna efímera
        • Efímera (personalizada) para especificar manualmente una nueva dirección IPv6 interna efímera
        • Una dirección IPv6 interna estática reservada de la lista
        • Reservar dirección IPv6 interna estática para reservar y asignar una nueva dirección IPv6 interna estática
      2. En Dirección IPv6 externa, selecciona una de las siguientes opciones:
        • Efímera (automática) para asignar automáticamente una nueva dirección IPv6 externa efímera
        • Efímera (personalizada) para especificar manualmente una nueva dirección IPv6 externa efímera
        • Una dirección IPv6 externa estática reservada de la lista
        • Reservar dirección IPv6 externa estática para reservar y asignar una nueva dirección IPv6 externa estática
    6. Para terminar de modificar la interfaz de red, haz clic en Hecho.

  6. Para añadir otra interfaz, haz clic en Añadir interfaz de red.

  7. Continúa con el proceso de creación de la instancia.

  8. Haz clic en Crear.

gcloud

Para crear interfaces de red en una instancia nueva, usa el comando gcloud compute instances create.

Incluye la marca --network-interface para cada interfaz, seguida de las claves de red adecuadas, como network, subnet, private-network-ip, address, external-ipv6-address y vlan.

Si incluyes la clave vlan, se creará una NIC dinámica. Si creas una NIC dinámica, también debes seguir los pasos para configurar el SO invitado para las NICs dinámicas después de crear la instancia.

Para ver ejemplos de cómo crear instancias con varias interfaces, consulta las configuraciones de ejemplo.

Este fragmento solo muestra la marca --network-interface, uno de los muchos parámetros que puede especificar al crear una instancia.

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NETWORK_A,subnet=SUBNET_A, \
        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_B,subnet=SUBNET_B, \
        stack-type=STACK_TYPE, \
        external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
        external-ipv6-prefix-length=96, \
        ipv6-network-tier=PREMIUM, \
        vlan=VLAN_ID \
    ...

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la instancia que se va a crear.
  • ZONE: la zona en la que se crea la instancia.
  • NETWORK_A, NETWORK_B: la red a la que se adjunta la interfaz.
  • SUBNET_A, SUBNET_B: la subred a la que se adjunta la interfaz.
  • STACK_TYPE: el tipo de pila de la interfaz.

    El valor predeterminado es IPV4_ONLY. Especifica IPV4_IPV6 para configurar una interfaz de pila dual o IPV6_ONLY para configurar una interfaz solo IPv6.

  • Valores de las interfaces con direcciones IPv4:

    • INTERNAL_IPV4_ADDRESS: la dirección IPv4 interna que quieres que tenga la interfaz en la subred de destino. Omítelo si solo quieres que se asigne una dirección válida.
    • EXTERNAL_IPV4_ADDRESS: la dirección IPv4 externa de la interfaz.

      Debes haber reservado previamente una dirección IPv4 externa. Si no quieres que la interfaz tenga una dirección IP externa, especifica "no-address" en lugar de address=EXTERNAL_IPV4_ADDRESS. Si quieres que la interfaz reciba una dirección IP externa efímera, especifica address=''.

  • Valores de las interfaces con direcciones IPv6:

    • INTERNAL_IPV6_ADDRESS: la dirección IPv6 interna que quieres que tenga la interfaz en la subred de destino. Si no se especifica, se asigna automáticamente una dirección IPv6 interna de la subred.Google Cloud
    • EXTERNAL_IPV6_ADDRESS: la dirección IPv6 externa que quieres que tenga la interfaz en la subred de destino. Si no se especifica ninguna,Google Cloud asigna automáticamente una dirección IPv6 externa de la subred.
  • VLAN_ID: un ID de VLAN. Si especifica un ID de VLAN, la interfaz de red se configurará como NIC dinámica. Debes colocar una NIC dinámica después de su NIC virtual principal en el comando.

API

Usa el método instances.insert para crear una instancia con varias interfaces de red.

Si se incluye el campo vlan, se crea una NIC dinámica. Si creas una NIC dinámica, también debes seguir los pasos para configurar el SO invitado para las NICs dinámicas después de crear la instancia.

Consulta los siguientes ejemplos:

  • Para crear una instancia que solo tenga direcciones IPv4 internas, sigue estos pasos:

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

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto que contiene la instancia.
    • ZONE: la zona que contiene la instancia.
    • IPV4_ADDRESS_A y IPV4_ADDRESS_B: las direcciones IPv4 internas que quieras asignar a cada interfaz de red.
    • REGION: la región que contiene la instancia.
    • SUBNET_A, SUBNET_B: las subredes en las que se encuentra cada interfaz de red.
    • VLAN_ID: un ID de VLAN. Si especifica un ID de VLAN, la interfaz de red se configurará como NIC dinámica. Debes colocar una NIC dinámica después de su NIC virtual principal en la solicitud.
  • Para crear una instancia con direcciones IPv4 e IPv6 internas, sigue estos pasos:

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

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto que contiene la instancia.
    • ZONE: la zona que contiene la instancia.
    • REGION: la región que contiene la instancia.
    • SUBNET_A, SUBNET_B: las subredes en las que se encuentra cada interfaz de red.
    • IPV6_ADDRESS_A, IPV6_ADDRESS_B: la dirección IPv6 interna que quieres que tenga la interfaz en la subred de destino. Si no se especifica, se asigna automáticamente una dirección IPv6 interna de la subred.Google Cloud
    • VLAN_ID: un ID de VLAN. Si especifica un ID de VLAN, la interfaz de red se configurará como NIC dinámica. Debes colocar una NIC dinámica después de su NIC virtual principal.
  • Para crear una instancia con solo direcciones IPv6 internas (vista previa), haz lo siguiente:

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

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto que contiene la instancia.
    • ZONE: la zona que contiene la instancia.
    • REGION: la región que contiene la instancia.
    • SUBNET: la subred en la que se encuentra la interfaz de red.
    • IPV6_ADDRESS: la dirección IPv6 interna que quieres que tenga la interfaz en la subred de destino. Si no se especifica,Google Cloud se asigna automáticamente una dirección IPv6 interna de la subred.

Terraform

Puedes usar un recurso de Terraform para crear una instancia con varias interfaces de red.

Los argumentos de Terraform tienen valores de ejemplo que puedes cambiar.

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

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Configuraciones de ejemplo

En las siguientes secciones se muestra cómo crear instancias con varias interfaces.

Configurar varias vNICs y NICs dinámicas

El siguiente comando de ejemplo crea una instancia con las siguientes interfaces de red:

  • Una vNIC llamada nic0 que es la principal de las siguientes:
    • Una interfaz de red dinámica llamada nic0.2
  • Una vNIC llamada nic1 que es la principal de las siguientes:
    • Una interfaz de red dinámica llamada nic1.4
    • Una interfaz de red dinámica llamada nic1.5
gcloud beta compute instances create vm1 \
    --zone zone-a \
    --network-interface=network=network-a,subnet=subnet-a \
    --network-interface=network=network-b,subnet=subnet-b,vlan=2 \
    --network-interface=network=network-c,subnet=subnet-c \
    --network-interface=network=network-d,subnet=subnet-d,vlan=4 \
    --network-interface=network=network-e,subnet=subnet-e,vlan=5

Después de crear una instancia con NICs dinámicas, también debes configurar el SO invitado para las NICs dinámicas.

Configurar varias interfaces de red solo con direcciones IPv4

El siguiente comando de ejemplo crea una instancia con tres interfaces de red.

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

Las interfaces se crean de la siguiente manera:

  • nic0 se crea con la configuración predeterminada. La interfaz está conectada a una subred de la red VPC predeterminada, con una dirección IP interna asignada automáticamente y una dirección IP externa efímera.

  • nic1 está conectada a la subred subnet-a de la red net1, con una dirección IPv4 interna 10.10.10.2 y una dirección IPv4 externa estática EXTERNAL_IPV4_ADDRESS.

  • nic2 está conectada a la subred subnet-b de la red net2, con una dirección IPv4 interna 10.10.20.2 y sin dirección IP externa.

Para ver una descripción completa del comando gcloud compute instances create y de la marca --network-interface, consulta la documentación del comando.

Puede usar la dirección IP de la interfaz de red que ha añadido para configurar el reenvío de DNS. Para obtener más información sobre cómo configurar zonas de reenvío de Cloud DNS, consulte el artículo Zonas de reenvío.

Configurar varias interfaces de red con direcciones IPv4 e IPv6

El siguiente comando de ejemplo crea una instancia de pila dual con dos interfaces de red.

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

Las interfaces se crean de la siguiente manera:

  • nic0 está conectada a la subred int-subnet de la red dual-int, con una dirección IPv4 interna efímera y una dirección IPv6 interna efímera.

  • nic1 está conectada a la subred ext-subnet de la red dual-ext, con una dirección IPv4 interna efímera y una dirección IPv6 externa efímera.

Configurar varias interfaces de red solo con direcciones IPv6

El siguiente comando de ejemplo crea una instancia solo con IPv6 con tres interfaces de red.

gcloud compute instances create vm1 \
    --network-interface network=ipv6-only-int-a,subnet=int-subnet-a,stack-type=IPV6_ONLY \
    --network-interface network=ipv6-only-int-b,subnet=int-subnet-b,stack-type=IPV6_ONLY,internal-ipv6-address=fd20:db8:0:0:1:0:: \
    --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM,external-ipv6-address=EXTERNAL_IPV6_ADDRESS \
    --machine-type=n1-standard-4 --zone=us-west2-a

Las interfaces se crean de la siguiente manera:

  • nic0 está conectada a la subred int-subnet-a de la red ipv6-only-int-a, con una dirección IPv6 interna efímera asignada automáticamente.

  • nic1 está conectada a la subred int-subnet-b de la red ipv6-only-int-b, con una dirección IPv6 interna efímera personalizada fd20:db8:0:0:1:0::/96.

  • nic2 está conectada a la subred ext-subnet de la red ipv6-only-ext, con una dirección IPv6 externa estática, EXTERNAL_IPV6_ADDRESS.

Configurar varias interfaces de red para grupos de instancias

Puedes usar instancias con varias interfaces de red en grupos de instancias no gestionados y gestionados.

En el caso de los grupos de instancias sin gestionar, crea cada instancia individualmente y asegúrate de que la nic0 interfaz de red de cada instancia esté conectada a la misma subred. A continuación, añade las instancias al grupo de instancias sin gestionar.

Para configurar varias interfaces de red para grupos de instancias gestionados, debes especificar la configuración de red de cada interfaz en la plantilla de instancia. Para ello, define la marca --network-interface una vez por cada interfaz. En el siguiente ejemplo se crea una plantilla de instancia con tres interfaces de red:

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

Como los nombres de las subredes de cada región de un proyecto deben ser únicos, al especificar las subredes por su nombre, se asocia implícitamente cada interfaz con una red de VPC. Cada interfaz debe usar una subred que esté en una red de VPC única:

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

La opción no-address de la marca --network-interface indica que la interfaz se ha configurado sin una dirección IPv4 externa. La dirección IP interna procede de la subred que utiliza la interfaz. Para obtener información completa sobre las marcas y la sintaxis, consulta la marca --network-interface del comando instance-templates create.