Criar VMs com várias interfaces de rede

Esta página descreve como criar instâncias de VM com várias interfaces de rede.

Antes de começar, confira se você conhece as características de instâncias com várias interfaces de rede, conforme descrito na Visão geral de várias interfaces de rede.

Papéis IAM

Para criar uma instância com várias interfaces de rede, você precisa ter um dos seguintes papéis:

Como criar e excluir instâncias e modelos de instância com várias interfaces em um projeto que não usa um ambiente de VPC compartilhada:um usuário com o papel de proprietário, editor ou Administrador da instância do Compute (v1) pode criar uma instância com várias interfaces associadas a redes e sub-redes da VPC que fazem parte do mesmo projeto.

Como criar e excluir instâncias e modelos de instância com várias interfaces em ambientes de VPC compartilhada:um usuário com o papel de proprietário, editor ou Administrador da instância do Compute (v1) pode criar uma instância com várias interfaces. Se alguma das interfaces estiver anexada a uma sub-rede em um projeto host de VPC compartilhada, você também precisa ter o Papel de usuário de rede do Compute (roles/compute.networkUser) para todo o projeto host ou para as sub-redes que você precisa usar.

Para saber mais sobre permissões, leia a Documentação do IAM do Compute Engine.

Criar instâncias de VM com várias interfaces de rede

Esta seção descreve como criar uma instância com várias interfaces de rede, incluindo vNICs e NICs dinâmicas. Para instruções gerais sobre como criar instâncias, consulte Criar e iniciar uma instância de VM.

A primeira interface sempre é criada como nic0 e padrão.

Console

  1. No console Google Cloud , acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. No campo Nome, insira um nome para a instância.

  3. No campo Região, selecione uma região.

  4. No campo Zona, selecione uma zona.

  5. Na seção Opções avançadas, expanda Rede e faça o seguinte:

    1. Na seção Interfaces de rede, expanda a interface de rede para editá-la.

    2. Em Rede e Sub-rede, selecione a rede e a sub-rede que você quer usar.

      Se você quiser configurar endereços IPv6 na interface, selecione uma sub-rede que tenha um intervalo de endereços IPv6 configurado. O tipo de acesso IPv6 da sub-rede determina se a instância recebe um endereço IPv6 interno ou externo.

    3. Selecione uma das seguintes opções para o tipo de pilha de IP da interface:

      • IPv4 (pilha única)
      • IPv4 e IPv6 (pilha dupla)
      • IPv6 (pilha única) (pré-lançamento)
    4. Para interfaces com endereços IPv4, faça o seguinte:

      1. Em Endereço IPv4 interno principal, selecione uma das seguintes opções:

        • Temporário (automático) para atribuir automaticamente um novo endereço IPv4 temporário
        • Temporário (personalizado) para especificar manualmente um novo endereço IPv4 temporário
        • Um endereço IPv4 interno estático reservado da lista
        • Reservar endereço IPv4 interno estático para reservar e atribuir um novo endereço IPv4 interno estático
      2. Em Endereço IPv4 externo, selecione uma das seguintes opções:

        • Temporário para atribuir um novo endereço IPv4 temporário
        • Nenhum, para não atribuir um endereço IPv4 externo
        • Um endereço IPv4 estático reservado da lista
        • Reserve um endereço IP externo estático para reservar e atribuir um novo endereço IPv4 externo estático
    5. Para interfaces com endereços IPv6, faça o seguinte, dependendo do tipo de acesso da sub-rede conectada:

      1. Em Endereço IPv6 interno principal, selecione uma das seguintes opções:
        • Temporário (automático) para atribuir um novo endereço IPv6 interno temporário
        • Temporário (personalizado) para especificar manualmente um novo endereço IPv6 interno temporário
        • Um endereço IPv6 interno estático reservado da lista
        • Reservar endereço IPv6 interno estático para reservar e atribuir um novo endereço IPv6 interno estático
      2. Em Endereço IPv6 externo, selecione uma das seguintes opções:
        • Alocação automática para atribuir um novo endereço IPv6 externo temporário
        • Um endereço IPv6 externo estático reservado da lista
        • Reservar um endereço IPv6 externo estático para reservar e atribuir um novo endereço IPv6 externo estático
    6. Para concluir a modificação da interface de rede, clique em Concluído.

  6. Para adicionar outra interface, clique em Adicionar interface de rede.

  7. Continue com o processo de criação de instâncias.

  8. Clique em Criar.

gcloud

Para criar interfaces de rede em uma nova instância, use o comando gcloud compute instances create.

Inclua a flag --network-interface para cada interface, seguida por qualquer chave de rede apropriada, como network, subnet, private-network-ip, address, external-ipv6-address e vlan.

A inclusão da chave vlan cria uma NIC dinâmica. Se você criar uma NIC dinâmica, também precisará seguir as etapas para configurar o SO convidado para NICs dinâmicas depois de criar a instância.

Para conferir exemplos de como criar instâncias com várias interfaces, consulte exemplos de configurações.

Esse snippet ilustra apenas a sinalização --network-interface, um dos muitos parâmetros possíveis de especificar ao criar uma instância.

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

Substitua:

  • INSTANCE_NAME: o nome da instância a ser criada.
  • ZONE: a zona em que a instância é criada.
  • NETWORK_A, NETWORK_B: a rede em que a interface é anexada.
  • SUBNET_A, SUBNET_B: a sub-rede em que a interface é anexada.
  • STACK_TYPE: o tipo de pilha da interface.

    O valor padrão é IPV4_ONLY. Especifique IPV4_IPV6 para configurar uma interface de pilha dupla ou IPV6_ONLY para configurar uma interface somente IPv6 (Pré-lançamento).

  • Valores para interfaces com endereços IPv4:

    • INTERNAL_IPV4_ADDRESS: o endereço IPv4 interno que você quer que a interface tenha na sub-rede de destino. Omita se você quiser apenas qualquer endereço válido atribuído.
    • EXTERNAL_IPV4_ADDRESS: o endereço IPv4 externo da interface.

      É preciso reservar um endereço IPv4 externo anteriormente. Se você não quiser que a interface tenha um endereço IP externo, especifique "no-address" em vez de address=EXTERNAL_IPV4_ADDRESS. Se você quiser que a interface receba um endereço IP externo temporário, especifique address=''.

  • Valores para interfaces com endereços IPv6:

    • INTERNAL_IPV6_ADDRESS: o endereço IPv6 interno que você quer que a interface tenha na sub-rede de destino. Se não for especificado, Google Cloud vai atribuir automaticamente um endereço IPv6 interno da sub-rede.
    • EXTERNAL_IPV6_ADDRESS: o endereço IPv6 externo que você quer que a interface tenha na sub-rede de destino. Se não for especificado, Google Cloud vai atribuir automaticamente um endereço IPv6 externo da sub-rede.
  • VLAN_ID: um ID da VLAN. Especificar um ID de VLAN configura a interface de rede como uma NIC dinâmica. É necessário colocar uma NIC dinâmica após a vNIC mãe no comando.

API

Use o método instances.insert para criar uma instância com várias interfaces de rede.

A inclusão do campo vlan cria uma NIC dinâmica. Se você criar uma NIC dinâmica, também precisará seguir as etapas para configurar o SO convidado para NICs dinâmicas depois de criar a instância.

Veja os exemplos a seguir:

  • Para criar uma instância com apenas endereços IPv4 internos, faça o seguinte:

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

    Substitua:

    • PROJECT_ID: o ID do projeto que contém a instância.
    • ZONE: é a zona que contém a instância.
    • IPV4_ADDRESS_A, IPV4_ADDRESS_B: os endereços IPv4 internos que você quer atribuir a cada interface de rede.
    • REGION: a região que contém a instância.
    • SUBNET_A, SUBNET_B: as sub-redes em que cada interface de rede está localizada.
    • VLAN_ID: um ID da VLAN. Especificar um ID de VLAN configura a interface de rede como uma NIC dinâmica. Você precisa colocar uma NIC dinâmica após a vNIC mãe da solicitação.
  • Para criar uma instância com endereços IPv4 e IPv6 internos, faça o seguinte:

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

    Substitua:

    • PROJECT_ID: o ID do projeto que contém a instância.
    • ZONE: é a zona que contém a instância.
    • REGION: a região que contém a instância.
    • SUBNET_A, SUBNET_B: as sub-redes em que cada interface de rede está localizada.
    • IPV6_ADDRESS_A, IPV6_ADDRESS_B: o endereço IPv6 interno que você quer que a interface tenha na sub-rede de destino. Se não for especificado, Google Cloud vai atribuir automaticamente um endereço IPv6 interno da sub-rede.
    • VLAN_ID: um ID da VLAN. Especificar um ID de VLAN configura a interface de rede como uma NIC dinâmica. Você precisa colocar uma NIC dinâmica após a vNIC mãe.
  • Para criar uma instância com apenas endereços IPv6 internos (pré-lançamento), faça o seguinte:

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

    Substitua:

    • PROJECT_ID: o ID do projeto que contém a instância.
    • ZONE: é a zona que contém a instância.
    • REGION: a região que contém a instância.
    • SUBNET: a sub-rede em que a interface de rede está localizado.
    • IPV6_ADDRESS: o endereço IPv6 interno que você quer que a interface tenha na sub-rede de destino. Se não for especificado, Google Cloud vai atribuir automaticamente um endereço IPv6 interno da sub-rede.

Terraform

É possível usar um recurso do Terraform para criar uma instância com várias interfaces de rede.

Os argumentos do Terraform têm exemplos de valores que podem ser alterados.

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 como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

Exemplos de configurações

As seções a seguir mostram como criar instâncias com várias interfaces.

Configurar várias vNICs e NICs dinâmicas

O comando de exemplo a seguir cria uma instância com as seguintes interfaces de rede:

  • Uma vNIC chamada nic0 que é a mãe do seguinte:
    • Uma NIC dinâmica chamada nic0.2
  • Uma vNIC chamada nic1 que é a mãe do seguinte:
    • Uma NIC dinâmica chamada nic1.4
    • Uma NIC dinâmica chamada 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

Depois de criar uma instância com NICs dinâmicas, também é necessário configurar o SO convidado para NICs dinâmicas.

Configurar várias interfaces de rede com apenas endereços IPv4

A amostra de comando a seguir cria uma instância com três interfaces de rede.

 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

As interfaces são criadas da seguinte forma:

  • A conta nic0 é criada com as configurações padrão. A interface é anexada a uma sub-rede na rede VPC padrão, com um endereço IP interno alocado automaticamente e um temporário.

  • nic1 está anexado à sub-rede subnet-a na rede net1, com um endereço IPv4 interno de 10.10.10.2 e um endereço IPv4 externo estático, EXTERNAL_IPV4_ADDRESS.

  • nic2 está anexado à sub-rede subnet-b na rede net2, com um endereço IPv4 interno de 10.10.20.2 e nenhum endereço IP externo.

Para uma descrição completa do comando gcloud compute instances create e da sinalização --network-interface, leia a documentação para o comando.

É possível usar o endereço IP da interface de rede adicionada para configurar o encaminhamento de DNS. Para saber mais sobre como configurar zonas de encaminhamento do Cloud DNS, consulte Zonas de encaminhamento.

Configurar várias interfaces de rede com endereços IPv4 e IPv6

A amostra de comando a seguir cria uma instância de pilha dupla com duas interfaces de rede.

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

As interfaces são criadas da seguinte forma:

  • nic0 está anexado à sub-rede int-subnet na rede dual-int, com um endereço IPv4 interno efêmero e um endereço IPv6 interno temporário.

  • nic1 está anexado à sub-rede ext-subnet na rede dual-ext, com um endereço IPv4 interno temporário e um endereço IPv6 externo temporário.

Configurar várias interfaces de rede com apenas endereços IPv6

O comando de exemplo a seguir cria uma instância somente IPv6 (Pré-lançamento) com três interfaces de rede.

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

As interfaces são criadas da seguinte forma:

  • nic0 está anexado à sub-rede int-subnet-a na rede ipv6-only-int-a, com um endereço IPv6 interno temporário alocado automaticamente.

  • nic1 está anexado à sub-rede int-subnet-b na rede ipv6-only-int-b, com um endereço IPv6 interno temporário personalizado fd20:db8:0:0:1:0::/96.

  • nic2 está anexado à sub-rede ext-subnet na rede ipv6-only-ext, com um endereço IPv6 externo estático, EXTERNAL_IPV6_ADDRESS.

Configurar várias interfaces de rede para grupos de instâncias

É possível usar instâncias com várias interfaces de rede em grupos de instâncias não gerenciadas e em grupos de instâncias gerenciadas.

Para grupos de instâncias não gerenciadas, crie cada instância individualmente, garantindo que a interface de rede nic0 de cada instância esteja anexada à mesma sub-rede. Em seguida, adicione as instâncias ao grupo de instâncias não gerenciadas.

Para configurar várias interfaces de rede para grupos de instâncias gerenciadas, é preciso especificar a configuração de rede para cada interface no modelo de instância. Para isso, defina a sinalização --network-interface uma vez para cada interface. O exemplo a seguir cria um modelo de instância com três interfaces de rede:

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 os nomes das sub-redes em cada região de um projeto precisam ser exclusivos, a especificação de sub-redes por nome associa implicitamente cada interface a uma rede VPC. Cada interface precisa usar uma sub-rede que esteja em uma rede VPC exclusiva:

  • nic0 usa a sub-rede net0-subnet-a
  • nic1 usa a sub-rede net1-subnet-b
  • nic2 usa a sub-rede net2-subnet-c

A opção no-address na flag --network-interface indica que a interface está configurada sem um endereço IPv4 externo. O endereço IP interno vem da sub-rede usada pela interface. Para informações completas sobre as sinalizações e a sintaxe, consulte a sinalização --network-interface para o comando instance-templates create.