Crea instancias con interfaces de red múltiples

En esta página, se describe cómo configurar una instancia de máquina virtual (VM) con interfaces de red múltiples.

De forma predeterminada, cada instancia en una red de VPC tiene una única interfaz de red predeterminada. Usa estas instrucciones para crear interfaces de red adicionales. Cada interfaz se adjunta a una red de VPC diferente, por lo que esa instancia tiene acceso a diferentes redes de VPC en Google Cloud Platform (GCP). No se pueden adjuntar interfaces de red múltiples a la misma red de VPC.

Si no necesitas interfaces de red adicionales, sigue las instrucciones en Crea y, luego, inicia una instancia.

Para obtener más información sobre cómo funcionan las interfaces de red múltiples, consulta Interfaces de red múltiples.

Especificaciones

Requisitos

  • La interfaz de red solo puede configurarse en el momento en que se crea la instancia.
  • Cada interfaz de red configurada en una instancia única se debe conectar a una red de VPC diferente, y cada interfaz debe pertenecer a una subred que tenga un rango de IP que no se superponga con las subredes de otras interfaces.
  • Las redes de VPC adicionales a las que se adjunten las interfaces de red múltiples deben existir antes de que crees la instancia. Consulta Usa redes de VPC a fin de obtener instrucciones para crear redes de VPC adicionales.
  • No se puede borrar una interfaz de red sin borrar la instancia.
  • Cada instancia debe tener, al menos, una interfaz de red. La cantidad máxima de interfaces de red por instancia es 8 y varía según el tipo de máquina de la instancia.
    • nic0 es obligatorio y se debe configurar en la creación de la instancia.
    • nic1 a nic7 son opcionales, pero también deben configurarse en la creación de la instancia.
    • Para obtener más información, consulta Cantidad máxima de interfaces.
  • De forma opcional, cada interfaz puede tener una dirección IP externa.
  • El servidor DHCP de GCP envía una ruta predeterminada (RFC 3442, “ruta estática sin clase”) solo a la NIC predeterminada, nic0. Si necesitas una ruta predeterminada en otra NIC, debes configurarla en la instancia. Cuando cambies la ruta predeterminada en la instancia, usa la consola en serie para evitar perder la conexión a la VM.
  • Puedes usar interfaces de red múltiples con redes de VPC compartida. Una VM puede conectarse a una red compartida en un proyecto diferente solo en la interfaz de red predeterminada. Como resultado, si la VM existe en un proyecto de servicio, se puede conectar a la red compartida solo en la interfaz predeterminada, mientras que las demás interfaces deben conectarse a redes locales en el mismo proyecto de servicio. Si la VM existe en el proyecto host, las interfaces de red pueden conectarse a cualquier red en ese proyecto.

Limitaciones

  • No puedes agregar o quitar interfaces de red de una VM existente.
  • El reenvío de IP está habilitado a nivel de la VM y no se puede aplicar a interfaces individuales.

Instancias, IAM y permisos con interfaces de red múltiple

Para crear una instancia con interfaces de red múltiple, debes contar con una de las siguientes funciones:

  • Propietario del proyecto o función de editor
  • La función compute.instanceAdmin.v1

Crea y borra instancias y plantillas de instancias con interfaces múltiples en proyectos regulares (un proyecto que no usa VPC compartida): un usuario con la función OWNER, EDITOR o compute.instanceAdmin.v1 a nivel de proyecto puede crear una instancia con varias interfaces asociadas con redes de VPC y subredes que forman parte de ese mismo proyecto.

Crea y borra instancias y plantillas de instancia con interfaces múltiples en los entornos de VPC compartida: un usuario con la función OWNER, EDITOR o compute.instanceAdmin.v1 a nivel del proyecto puede crear un instancia con varias interfaces. Si alguna de las interfaces está asociada con una subred en un proyecto host de VPC compartida, también debes tener la función compute.networkUser a nivel de proyecto host de VPC compartida o a nivel de subred de VPC compartida.

Para obtener más información sobre los permisos, consulta la documentación de IAM de Compute Engine.

Usa interfaces de red múltiples con diferentes tipos de redes de VPC

  • No se admiten interfaces de red múltiples con redes heredadas.
  • Cuando configures interfaces de red múltiples, debes adjuntar cada interfaz a una red de VPC en modo automático o modo personalizado.

Asignación de una dirección IP a la interfaz de red

  • Debes configurar cada interfaz de red para que tenga una dirección IP privada principal asignada desde una subred.
    • La dirección privada principal asignada a cada interfaz en una instancia única debe ser diferente.
  • De forma opcional, puedes configurar cada interfaz virtual para que tenga su propia dirección IP pública, que puede ser efímera o reservada.

Número máximo de interfaces de red

  • La cantidad máxima de interfaces virtuales permitidas por instancia es 8.
  • La cantidad de interfaces permitidas en una instancia depende del tipo de máquina de la instancia y de la cantidad de CPU virtuales.

Por lo general, estas reglas se aplican a n1-standard-x, n1-highmem-x, n1-highcpu-x, f1-micro, g1-small y a las VM personalizadas:

  • 2 interfaces de red en la VM <= 2 CPU virtuales
  • 1 interfaz de red por CPU virtual en la VM > 2 CPU virtuales (con una capacidad máxima de 8 interfaces de red por VM)

Usa la tabla siguiente para determinar cuántas interfaces de red pueden adjuntarse a una instancia:

Tipo de instancia Número de CPU virtuales Número de NIC virtuales
n1-standard-x, n1-highmem-x, n1-highcpu-x, n1-highmem-x, n1-highcpu-x Especificado por el valor “x” 1 NIC por valor de “x”, con un mínimo de 2 NIC y un máximo de 8 NIC
f1-micro 0.2 CPU virtual 2 NIC
g1-small 0.5 CPU virtual 2 NIC
Instancias personalizadas Desde 1 CPU virtual hasta 64 CPU virtuales 1 NIC por CPU virtual (con un mínimo de 2 NIC y un máximo de 8 NIC)

Crea instancias de máquinas virtuales con interfaces de red múltiples

La creación de una instancia con una única interfaz no se modifica. Para obtener instrucciones generales sobre cómo crear instancias, consulta Crea y, luego, inicia una instancia.

Agrega interfaces de red múltiples cuando crees una instancia.

  • En Console, agrega interfaces de red desde la página Crear una instancia, en la sección Redes -> Interfaces de redes.
  • En la herramienta de línea de comandos de gcloud, usa el comando instances create. Incluye la marca --network-interface para cada interfaz, seguida de las claves de red correspondientes, como ([network | subnet], private-network-ip, address).

La primera interfaz siempre se crea como nic0 y siempre es la interfaz predeterminada. Esto es importante para otros aspectos de red de GCP. Por ejemplo, los balanceadores de cargas de Google Cloud (excepto el balanceo de cargas de TCP/UDP interno) solo distribuyen el tráfico a nic0.

Console


  1. Ve a la página Crea una instancia en Google Cloud Console.
    Ir a la página Crea una instancia
  2. Completa las secciones del nombre, la zona, el tipo de máquina y otros aspectos básicos de la instancia.
  3. Completa los campos de las pestañas Administración y Discos.
  4. En la pestaña Redes, haz clic en Agregar interfaz de red.
  5. Elige una red.
  6. Si hay varias subredes en la red de VPC, elige una subred.
  7. Para asignar una dirección IP interna personalizada a la interfaz desde el menú desplegable IP interna, selecciona Personalizada y, luego, ingresa la dirección IP.
  8. Para indicar que no quieres una dirección IP externa, ve al menú desplegable IP externa y selecciona Ninguna.
  9. Para asignar una dirección IP externa estática, ve al menú desplegable IP externa, selecciona IP estática nueva, completa el Nombre y la Descripción, y haz clic en Reservar.
  10. Para habilitar el reenvío de IP, selecciona Activado en el menú desplegable Reenvío de IP.
  11. Para agregar más interfaces de red, haz clic en Agregar interfaz de red y repite los pasos 5 a 10.

gcloud

Crea interfaces de red en una instancia nueva con el comando instances create. Incluye la marca --network-interface para cada interfaz, seguida de las claves de red correspondientes, como ([network | subnet], private-network-ip, address).

En este fragmento, solo se muestra la marca --network-interface, uno de los numerosos parámetros posibles que puedes especificar cuando creas una instancia. Si deseas ver otras marcas, consulta la referencia de gcloud para el comando instances create. Consulta la tabla Cantidad máxima de interfaces de red para ver qué tipo de máquina admite la cantidad de interfaces de red que necesitas.

    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

Crear una instancia de VM con varias interfaces de red

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

Reemplaza los marcadores de posición por valores válidos:

  • SUBNET_URL es la URL de la subred en la que se ubicará la interfaz de red.
  • PROJECT_ID es el ID del proyecto que contendrá la instancia.
  • ZONE la zona que contendrá la instancia.

Para obtener más información, consulta el método instances.insert.

Ejemplo

A continuación, se muestra un comando de ejemplo para crear una instancia con tres interfaces de red:

     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
    

A continuación, se detalla cómo se crean las interfaces:

  • nic0 con la configuración predeterminada. Se asocia con una red de VPC predeterminada, con una dirección IP privada asignada de forma automática y una dirección IP pública efímera.
  • nic1 pertenece a net1-subnet-a, con una dirección IP interna de 10.128.0.2 y una dirección IP externa estática de 35.237.93.110.
  • nic2 pertenece a net2-subnet-b, con una dirección IP interna de 10.129.0.2 y sin dirección IP pública.

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

Configura interfaces de red múltiples para grupos de instancias

Todas las instancias dentro de un grupo de instancias administrado están restringidas a una subred única. Todas las instancias dentro de un grupo de instancias no administrado están restringidas a una subred única si se usaron para el balanceo de cargas. Consulta la documentación de redes de VPC y del balanceo de cargas para obtener más información.

Debido a estas restricciones, solo hay una interfaz por instancia. GCP realiza validaciones basadas en la subred asociada a la única interfaz de la instancia.

Cuando configuras varias interfaces para instancias en un grupo de instancias administrado o no administrado, GCP valida estas condiciones para la interfaz nic0 predeterminada.

Crea plantillas de instancias con varias interfaces

El proceso para crear una plantilla de instancia que usa una única interfaz por instancia no se modifica y se describe en la referencia de gcloud para el comando instance-templates create.

A fin de configurar varias interfaces de red para una plantilla de instancias, establece la marca --network-interface para cada interfaz de red que desees crear:


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

Puedes asignar a cada interfaz las siguientes claves de red: network, subnet, address.

Por ejemplo, si ejecutas el comando siguiente, cada instancia tendrá 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 us-central1`
    

A continuación, se detallan las interfaces:

  • nic0 pertenece a net0-subnet-a y tiene una dirección IP pública asignada automáticamente.
  • nic1 pertenece a net1-subnet-b y no tiene una dirección IP pública.
  • nic2 pertenece a net2-subnet-c y no tiene una dirección IP pública.

Para obtener información completa sobre las marcas y la sintaxis, consulta el comando instance-templates create.

Configura la política de enrutamiento

Para las imágenes admitidas por Google, cuando necesitas una interfaz de red secundaria (que no sea nic0) para comunicarte con cualquier dirección IP que no sea local al rango de subred principal de la subred asociada de esa interfaz secundaria, debes configurar una política de enrutamiento para garantizar que los paquetes de salida salgan de la interfaz correcta. En esos casos, debes usar una política de enrutamiento a fin de configurar una tabla de enrutamiento distinta para cada interfaz de red.

Realiza los siguientes pasos para configurar la política de enrutamiento de una instancia basada en Linux con varias interfaces:

  1. Conéctate a una instancia configurada con interfaces de red múltiples:

        gcloud compute ssh multinic-vm
        
  2. Configura la política de enrutamiento con ifconfig para nic1. El siguiente ejemplo, se supone que GCP asignó la dirección IP interna 192.168.0.2 a nic1 y que la puerta de enlace predeterminada de la subred es 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. Repite los comandos del paso 2 para crear interfaces adicionales en la instancia (nic2, nic3… nic7).

Soluciona problemas

No puedo crear una VM con varias interfaces

Es posible que veas los siguientes mensajes de error:

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

    Si ves este mensaje de error, significa que intentaste crear más interfaces que el máximo admitido por el tipo de máquina de tu instancia. Consulta la tabla de cantidad máxima de interfaces.

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

    Si ves este mensaje, significa que intentaste crear más de una interfaz en la misma red. Cada interfaz de red se debe adjuntar a una red de VPC diferente.

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

    Si ves este mensaje, significa que los rangos de CIDR asociados con las interfaces de tus VM se superponen. Estos rangos de CIDR incluyen todos los rangos principales de las subredes asociadas con las interfaces de VM y los rangos secundarios usados en los rangos de IP de alias. Cada interfaz pertenece a una subred, en redes de VPC diferentes, que no debe superponerse con las subredes de otras interfaces. Por ejemplo, si intentaste crear la instancia en la región us-west1, puedes verificar los rangos de CIDR principales de la subred mediante el siguiente comando o 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
        

    Para comprobar los rangos de CIDR de la subred secundaria, usa el siguiente comando o 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 ves este mensaje, intentaste crear la instancia en una red heredada. No se admiten instancias con interfaces múltiples en las redes heredadas. Puedes comprobar si una red es una heredada mediante el siguiente comando o Google Cloud Console. El campo Modo indica el tipo de red.

        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 ves este mensaje, significa que la cuenta con la que accediste no tiene los permisos de IAM necesarios para crear una instancia. Consulta Permisos de IAM si quieres obtener más información sobre las funciones que se necesitan para crear una instancia. Puedes comprobar si la política de IAM asociada con tu proyecto te otorga alguna de las siguientes funciones: OWNER, EDITOR o compute.instanceAdmin.v1. Para crear instancias en VPC compartida, también necesitarías la función compute.networkUser. En el siguiente ejemplo, la cuenta email2@gmail.com no tiene suficientes permisos de IAM para crear una instancia. Para obtener más información, consulta la guía de IAM Otorga, cambia y revoca el acceso a recursos.

        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
        

    Puedes pedirle al propietario o al editor del proyecto que te otorgue una función OWNER, EDITOR o compute.instanceAdmin.v1. También necesitarías la función compute.networkUser si asocias cualquier interfaz con una subred que pertenezca a la VPC compartida.

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

No puedo conectarme a la IP interna de la interfaz secundaria

  • Verifica las reglas de firewall para ver si permiten la conectividad a la interfaz secundaria de la VM. Para consultar las reglas de firewall de la red adjunta a la interfaz secundaria, visita Google Cloud Console y haz clic en la red de VPC apropiada, o usa el siguiente comando de gcloud.

        gcloud compute firewall-rules list --filter='network:NETWORK_NAME'
        
  • Verifica si la conexión a la interfaz secundaria se produce desde una dirección de Internet o desde el exterior de la red de la interfaz secundaria. Solo puedes conectarte a la IP interna de una interfaz desde el interior de su red. Si necesitas conectarte a esa interfaz desde el exterior de la red, puedes asignarle una dirección IP externa a tu interfaz secundaria.

  • Verifica si la conexión a la IP interna de la interfaz secundaria proviene del exterior de la subred a la que se adjunta la interfaz secundaria: desde otra subred de la misma red o desde una red de intercambio de tráfico. En Interfaces de red múltiples por instancia, se explica la interacción entre las redes de intercambio de tráfico de VPC y las instancias de VM con varias interfaces. Para llegar a las interfaces secundarias desde fuera de la subred de la interfaz, es posible que debas configurar las rutas en la VM. Consulta el comportamiento de DHCP con varias interfaces de red para obtener más detalles sobre cómo los programas de DHCP establecen rutas predeterminadas en la VM.

No puedo conectarme a una interfaz secundaria con una IP externa

El servidor de  DHCP programa una ruta predeterminada solo en la interfaz de red principal de la VM. Si deseas conectarte a la interfaz secundaria con una IP externa, hay dos opciones. Si solo necesitas conectarte fuera de la red en la interfaz de red secundaria, puedes configurar una ruta predeterminada en esa interfaz de red. Si no, puedes consultar Configura la política de enrutamiento para configurar una tabla de enrutamiento distinta en tu VM, a través de la política de enrutamiento basada en el origen.

Tengo problemas de conectividad cuando uso una máscara de red que no sea /32

De forma predeterminada, el servidor de metadatos de la instancia solo responde a solicitudes ARP de la puerta de enlace predeterminada.

Para configurar interfaces con una máscara de red distinta de /32, debes crear una imagen con la marca --guest-os-features MULTI_IP_SUBNET y usarla para crear tu instancia. Por ejemplo, si usas una imagen basada en debian-9, puedes crear una imagen con el comando siguiente:

    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
    

Para ver las funciones de invitado configuradas en la imagen, ejecuta el comando gcloud compute images describe en la imagen del invitado.

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

Para obtener más información sobre cómo crear imágenes personalizadas, consulta Crea, borra y da de baja imágenes personalizadas.

Soluciona problemas a través de la consola en serie

Por lo general, es una buena idea habilitar la consola en serie en la VM para solucionar problemas relacionados con la configuración. Sigue los pasos en Interactúa a través de la consola en serie para habilitarla y realizar una depuración interactiva.