Como criar instâncias com várias interfaces de rede

Nesta página, descreveremos como configurar uma instância de máquina virtual (VM) com várias interfaces de rede.

Por padrão, cada instância em uma rede VPC tem uma única interface de rede. Use estas instruções para criar interfaces de rede adicionais. Cada interface é anexada a uma rede VPC diferente, oferecendo a essa instância acesso a diferentes redes VPC no Google Cloud Platform (GCP). Não é possível anexar várias interfaces de rede à mesma rede VPC.

Se você não precisar de interfaces de rede adicionais, siga as instruções em Como criar iniciar uma instância.

Para mais informações sobre várias interfaces de rede e como elas funcionam, consulte Várias interfaces de rede.

Especificações

Requisitos

  • Só é possível configurar uma interface de rede quando você cria uma instância.
  • Cada interface de rede configurada em uma única instância precisa ser anexada a uma rede VPC diferente e cada interface precisa pertencer a uma sub-rede com intervalo de IP que não se sobreponha às sub-redes de qualquer outra interface.
  • As redes VPC adicionais às quais as interfaces serão anexadas precisam existir antes da criação da instância. Consulte Como usar redes VPC para instruções sobre como criar redes VPC adicionais.
  • Não é possível excluir uma interface de rede sem excluir a instância.
  • Cada instância precisa ter pelo menos uma interface de rede. O número máximo de interfaces de rede por instância é oito, dependendo do tipo de máquina da instância.
    • nic0 é obrigatório e precisa ser configurado na criação da instância.
    • nic1 a nic7 são opcionais, mas também precisam ser configurados na criação da instância.
    • Para mais informações, consulte Número máximo de interfaces.
  • Toda interface pode ter um endereço IP externo.
  • O servidor DHCP do GCP envia uma rota padrão (RFC 3442, “rota estática sem classificação”) somente para o NIC padrão, nic0. Se uma rota padrão for necessária em outra NIC, você precisa configurá-la na instância. Ao alterar a rota padrão na instância, use o console serial para evitar perder a conectividade com a VM.
  • É possível usar várias interfaces de rede com redes VPC compartilhadas. Uma VM pode se conectar a uma rede compartilhada em um projeto diferente apenas na interface de rede padrão. Como resultado, se a VM existe em um projeto de serviço, ela pode se conectar à rede compartilhada apenas na interface padrão, enquanto todas as outras interfaces precisam se conectar a redes locais no mesmo projeto de serviço. Se a VM existe no projeto host, ela pode ter interfaces de rede conectadas a qualquer rede no projeto host.

Limitações

  • Não é possível adicionar ou remover interfaces de rede a partir de uma VM atual.
  • O encaminhamento de IP é ativado no nível da VM, não sendo possível aplicá-lo a interfaces individuais.
  • Se você criar uma instância de VM com várias interfaces de rede em um projeto de serviço de VPC compartilhada, somente a primeira interface de rede (nic0) poderá referenciar uma sub-rede em uma rede VPC compartilhada. Para mais informações, consulte Visão geral da VPC compartilhada. Se você criar uma instância de VM com várias interfaces de rede em um projeto host de VPC compartilhada, essa limitação não será aplicada.

Permissões, IAM e instâncias com várias interfaces de rede

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

  • Papel de editor ou proprietário de projeto
  • Papel compute.instanceAdmin.v1

Como criar e excluir instâncias e modelos de instância com várias interfaces em um projeto normal (que não usa VPC compartilhada): um usuário com o papel PROPRIETÁRIO, EDITOR ou compute.instanceAdmin.v1 no nível do projeto pode criar uma instância com várias interfaces associadas a redes e sub-redes VPC que fazem parte desse 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 PROPRIETÁRIO, EDITOR ou compute.instanceAdmin.v1 no nível do projeto pode criar uma instância com várias interfaces. Se alguma das interfaces estiver associada a uma sub-rede em um projeto host de VPC compartilhada, você também precisa ter o papel compute.networkUser no nível do projeto host de VPC compartilhada ou no nível de sub-rede VPC compartilhada.

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

Como usar várias interfaces de rede com diferentes tipos de rede VPC

  • O uso de várias interfaces de rede não é compatível com redes legadas.
  • Quando você configurar várias interfaces de rede, conecte cada interface a uma rede VPC de modo automático ou a uma rede VPC de modo personalizado.

Alocação de endereço IP da interface de rede

  • É necessário configurar cada interface de rede com um endereço IP interno principal alocado a partir do intervalo de endereço IP principal de uma sub-rede.
    • O endereço interno principal alocado para cada uma das interfaces em uma única instância não pode ser o mesmo.
  • É possível optar por configurar cada uma das interfaces virtuais (NIC, na sigla em inglês) com um endereço IP externo exclusivo. Os endereços externos podem ser temporários ou reservados.

Número máximo de interfaces de rede

  • O número máximo de interfaces virtuais permitidas por instância é oito.
  • O número de interfaces permitidas em uma instância depende do tipo de máquina da instância e do número de vCPUs.

Em geral, as regras a seguir aplicam-se às VMs n1-standard-x, n1-highmem-x, n1-highcpu-x, f1-micro, g1-small e às VMs personalizadas:

  • Duas interfaces de rede para VM <= 2 vCPUs
  • Uma interface de rede por vCPU para VM> 2 vCPUs, com um limite de no máximo oito interfaces de rede por VM

Use a tabela a seguir para determinar quantas interfaces de rede podem ser anexadas a uma instância:

Tipo de instância Número de vCPUs Número de NICs virtuais
n1-standard-x, n1-highmem-x, n1-highcpu-x, n1-highmem-x, n1-highcpu-x Conforme especificado pelo valor de "x". Um NIC por valor de "x", com no mínimo dois NICs e um máximo oito NICs
f1-micro 0,2 vCPU 2 NICs
g1-small 0,5 vCPU 2 NICs
Instâncias personalizadas Configurável de 1 vCPU para 64 vCPU Um NIC por vCPU, com no mínimo dois NICs e no máximo oito NICs

Como criar instâncias de máquina virtual com várias interfaces de rede

A criação de uma instância com uma única interface fica inalterada. Para instruções gerais sobre a criação de instâncias, consulte Como criar e iniciar uma instância.

Você adiciona várias interfaces de rede quando cria uma instância.

  • No console, você adiciona interfaces de rede na página "Criar uma instância", na seção "Rede" -> "Interfaces de rede".
  • Na ferramenta de linha de comando gcloud, use o comando instances create. Inclua a sinalização --network-interface para cada interface, seguida por qualquer chave de rede apropriada, como ([network | subnet], private-network-ip, address).

A primeira interface sempre é criada como nic0 e sempre é a interface padrão. Isso é importante para alguns outros aspectos da rede GCP. Por exemplo, os balanceadores de carga do Google Cloud (exceto para balanceamento de carga TCP/UDP interno) apenas distribuem tráfego para nic0.

Console


  1. Acesse a página "Criar uma instância" no Console do Google Cloud.
    Acessar a página "Criar uma instância"
  2. Complete as seções de nome da instância, zona, tipo de máquina e outros aspectos básicos da instância.
  3. Complete os campos nas guias Gerenciamento e Discos.
  4. Na guia Rede, clique em Adicionar interface de rede.
  5. Escolha uma rede.
  6. Se houver várias sub-redes na rede VPC, escolha uma.
  7. Para atribuir um endereço IP interno personalizado à interface, no menu suspenso IP interno, escolha Personalizado e digite o endereço IP.
  8. Para indicar que não quer um endereço IP externo, no menu suspenso IP externo, escolha Nenhum.
  9. Para atribuir um endereço IP externo estático, no menu suspenso IP externo, escolha Novo IP estático, digite o Nome e a Descrição e clique em Reservar.
  10. Para ativar o encaminhamento de IP, selecione Ativar no menu suspenso Encaminhamento de IP.
  11. Para adicionar mais interfaces de rede, clique em Adicionar interface de rede e siga as etapas de 5 a 10 acima.

gcloud

Crie interfaces de rede em uma nova instância usando o comando instances create. Inclua a sinalização --network-interface para cada interface, seguida por qualquer chave de rede apropriada, como ([network | subnet], private-network-ip, address).

Esse snippet ilustra apenas a sinalização --network-interface, um dos muitos parâmetros possíveis de especificar ao criar uma instância. Para outras sinalizações, consulte a referência gcloud do comando instances create. Consulte a tabela Número máximo de interfaces de rede para ver quais tipos de máquinas aceitam o número de interfaces de rede que você precisa.

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

Crie uma instância de VM com várias interfaces de rede.

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

Substitua os marcadores por valores válidos:

  • SUBNET_URL é o URL da sub-rede em que a interface de rede será localizada.
  • PROJECT_ID é o ID do projeto que conterá a instância.
  • ZONE é a zona que contém a instância;

Para mais informações, consulte o método instances.insert.

Exemplo

Comando de amostra para a criação de uma instância com três interfaces de rede:

 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

As interfaces são criadas da seguinte forma:

  • nic0 com configurações padrão. Vinculadas a uma rede VPC padrão, com endereço IP interno automaticamente alocado e um endereço IP externo temporário
  • nic1 pertence a net1-subnet-a, com um endereço IP interno de 10.128.0.2 e um endereço IP externo estático de 35.237.93.110.
  • nic2 pertence a net2-subnet-b, com um endereço IP interno de 10.129.0.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.

Como configurar várias interfaces de rede para grupos de instâncias

Todas as instâncias dentro de um grupo de instâncias gerenciadas são restritas a uma única sub-rede. Todas as instâncias dentro de um grupo de instâncias não gerenciadas são restritas a uma única sub-rede quando foram usadas para balanceamento de carga. Consulte a documentação de redes VPC e balanceamento de carga para mais informações.

Devido a essas restrições, há apenas uma interface por instância. O GCP executa validações baseadas na sub-rede associada à única interface na instância.

Quando você configura várias interfaces para instâncias em um grupo de instâncias gerenciadas ou não gerenciadas, o GCP continua a validar essas condições para a interface nic0 padrão.

Como criar um modelo de instância com várias interfaces

O processo para criar um modelo de instância que usa uma única interface por instância não é alterado e é descrito na referência da gcloud para o comando instance-templates create.

Para configurar várias interfaces de rede para um modelo de instância, defina a sinalização --network-interface para cada interface de rede que você quer criar:


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

É possível atribuir a cada interface as seguintes chaves de rede: network, subnet, address.

Por exemplo, se você executar o seguinte comando, cada instância terá 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 us-central1`

As interfaces são estas:

  • nic0 pertence a net0-subnet-a e tem um endereço IP externo alocado automaticamente
  • nic1 pertence a net1-subnet-b e não tem um endereço IP externo
  • nic2 pertence a net2-subnet-c e não tem um endereço IP externo

Para informações completas sobre os sinalizadores e a sintaxe, consulte o comando instance-templates create.

Como configurar o roteamento de políticas

Para imagens aceitas pelo Google, quando você precisar de uma interface de rede secundária (que não seja nic0) para se comunicar com qualquer endereço IP que não seja local para o intervalo de sub-rede principal da sub-rede associada à interface secundária, você precisará configurar o roteamento de política para garantir que os pacotes de saída saiam da interface correta. Nesses casos, você precisa configurar uma tabela de roteamento separada para cada interface de rede usando o roteamento de políticas.

Siga estas etapas para configurar o roteamento de políticas para uma instância baseada em Linux com várias interfaces:

  1. Conecte-se a uma instância configurada com várias interfaces de rede:

    gcloud compute ssh multinic-vm
    
  2. Configure o roteamento de políticas com ifconfig para nic1. O exemplo abaixo presume que o GCP atribuiu o endereço IP interno 192.168.0.2 a nic1 e o gateway padrão da sub-rede é 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. Repita os comandos da etapa 2 para interfaces complementares na instância (nic2, nic3.... nic7).

Solução de problemas

Não consigo criar VM com múltiplas interfaces

Pode aparecer uma das seguintes mensagens de erro:

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

    Se você receber essa mensagem de erro, está tentando criar mais interfaces do que o máximo aceito pelo tipo de máquina da sua instância. Consulte a tabela de número máximo de interfaces.

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

    Se você receber essa mensagem, está tentando criar mais de uma interface na mesma rede. Cada interface de rede precisa ser anexada a uma rede VPC diferente.

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

    Se você receber essa mensagem, os intervalos CIDR associados às interfaces da sua VM estão sobrepostos. Esses intervalos CIDR incluem todos os intervalos primários de sub-redes associadas às interfaces da VM, bem como os intervalos secundários usados nos intervalos de IP de alias. Cada interface pertence a uma sub-rede, cada uma em uma rede VPC diferente, que não pode se sobrepor a sub-redes de outras interfaces. Por exemplo, se você estiver tentando criar sua instância na região us-west1, poderá verificar os intervalos CIDR principais da sub-rede usando o seguinte comando ou o Console do Google Cloud.

    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 verificar os intervalos de CIDR de sub-rede secundária, use o seguinte comando ou o Console do Google Cloud.

    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.

    Se você receber essa mensagem, está tentando criar sua instância em uma rede legada. Instâncias com várias interfaces não são compatíveis com redes legadas. Verifique se uma rede é legada usando o seguinte comando ou o Console do Google Cloud. O campo Modo indica o tipo de rede.

    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'

    Se você receber essa mensagem, a conta com que fez login não tem permissões do IAM necessárias para criar uma instância. Consulte Permissões do IAM para informações detalhadas sobre os papéis necessários para a criação de instâncias. Verifique se a política do IAM associada ao seu projeto concede a você os seguintes papéis: OWNER, EDITOR ou compute.instanceAdmin.v1. Para criar instâncias na VPC compartilhada, você também precisaria do papel compute.networkUser. No exemplo abaixo, a conta email2@gmail.com não tem permissões de IAM suficientes para criar uma instância. Para ver instruções mais detalhadas, consulte o guia do IAM Como conceder, alterar e revogar acesso 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
    

    Peça ao proprietário ou editor do seu projeto que conceda a você um papel de OWNER, EDITOR ou compute.instanceAdmin.v1. Você precisaria da função compute.networkUser também se estivesse associando qualquer interface a uma sub-rede pertencente à VPC compartilhada.

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

Não consigo me conectar ao IP interno da interface secundária

  • Verifique as regras de firewall para ver se elas permitem a conectividade com a interface secundária da VM. Observe as regras de firewall para a rede que está conectada à interface secundária visitando o Console do Google Cloud e clicando na rede VPC apropriada ou usando o seguinte comando gcloud.

    gcloud compute firewall-rules list --filter='network:NETWORK_NAME'
    
  • Verifique se você está tentando se conectar a uma interface secundária de um endereço de Internet ou de fora da rede da interface secundária. Só é possível se conectar ao IP interno de uma interface de dentro da respectiva rede. Se você precisa alcançar essa interface de fora da rede, é possível atribuir um endereço IP externo à interface secundária.

  • Verifique se você está tentando se conectar ao IP interno da interface secundária de fora da sub-rede à qual a interface secundária está anexada, de uma outra sub-rede da mesma rede ou de uma rede com peering. Várias interfaces de rede por instância explicam a interação entre o peering da VPC e instâncias de VM com várias interfaces. Para alcançar interfaces secundárias de fora da sub-rede da interface, talvez seja necessário configurar rotas na VM. Consulte Comportamento do DHCP com várias interfaces de rede para mais detalhes sobre como o DHCP programa rotas padrão na VM.

Não consigo me conectar à interface secundária usando IP externo

O servidor DHCP programa uma rota padrão somente na interface de rede principal da VM. Se você quiser se conectar à interface secundária usando um IP externo, há duas opções. Se você precisa apenas se conectar fora da rede na interface de rede secundária, é possível definir uma rota padrão nessa interface de rede. Caso contrário, você pode usar a instrução Como configurar o roteamento de políticas para configurar uma tabela de roteamento separada usando roteamento de políticas baseadas na fonte em sua VM.

Estou com problemas de conectividade ao usar uma máscara de rede que não seja /32

Por padrão, o servidor de metadados da instância responde apenas às solicitações ARP para o gateway padrão.

Para configurar interfaces com uma máscara de rede diferente de /32, crie uma imagem usando a sinalização --guest-os-features MULTI_IP_SUBNET e use-a para criar sua instância. Por exemplo, se você estiver usando uma imagem baseada em debian-9, poderá criar uma imagem usando o seguinte comando:

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 visualizar os recursos de convidado configurados na imagem, execute o comando gcloud compute images describe na imagem do convidado.

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

Para mais informações sobre como criar imagens personalizadas, consulte Como criar, excluir e suspender o uso de imagens personalizadas.

Como solucionar problemas usando o console serial

Muitas vezes, é uma boa ideia ativar o console serial na VM para depurar problemas relacionados à configuração. É possível ativar o console serial para depuração interativa seguindo as etapas em Como interagir com o console serial.