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 é necessária e precisa ser configurada na criação da instância.
    • nic1 para nic7 são opcionais, mas também precisam ser configuradas na criação da instância.
    • Para ver mais informações, consulte Número máximo de interfaces.
  • Toda interface pode, opcionalmente, ter um endereço IP externo.
  • O servidor DHCP do GCP envia uma rota padrão (RFC 3442, "rota estática sem classificação") apenas para a 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 interfaces de rede ou removê-las de uma VM atual.

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 primário particular alocado de uma sub-rede.
    • O endereço primário particular alocado para cada uma das interfaces em uma única instância precisa ser diferente.
  • É possível, opcionalmente, configurar cada interface virtual com o próprio endereço IP público, e ele pode ser temporário ou reservado.

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, o balanceamento de carga aceita apenas nic0.

Console


  1. Acesse a página "Criar uma instância" no Console do Google Cloud Platform.
    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, escolha 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).

Este snippet apenas ilustra a sinalização --network-interface, um dos muitos parâmetros possíveis que você pode especificar ao criar uma instância. Para outras sinalizações, veja a referência do gcloud sobre o 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]]
    ...]

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 todas as configurações padrão. Associadas à rede VPC padrão, com um endereço IP particular alocado automaticamente e um endereço IP público temporário.
  • nic1 pertence a net1-subnet-a, com um endereço IP interno 10.128.0.2 e um endereço IP externo estático 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 público.

Para uma descrição completa do comando gcloud compute instances create e da sinalização --network-interface, leia a documentação do 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 as redes VPC e a documentação de 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 fica inalterado e é descrito na referência do gcloud sobre 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 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] \
    .....

Você pode 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 público alocado automaticamente.
  • nic1 pertence a net1-subnet-b e não tem um endereço IP público.
  • nic2 pertence a net2-subnet-c e não tem um endereço IP público.

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

Como configurar o roteamento de políticas

Para imagens compatíveis com o Google, quando você precisa que uma interface de rede secundária (uma interface diferente de nic0) se comunique com qualquer endereço IP não local ao intervalo de sub-rede principal da sub-rede associada à interface secundária, é necessário configurar o roteamento de políticas para garantir que os pacotes de saída sairão pela 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 pressupõe que o GCP atribuiu o endereço IP interno 192.168.0.2 a nic1 e que o gateway padrão é 192.168.0.1.

    sudo ifconfig eth1 192.168.0.2 netmask 255.255.255.255 broadcast 192.168.0.2 mtu 1430
    sudo echo "1 rt1" | sudo tee -a /etc/iproute2/rt_tables # (sudo su - first if permission denied)
    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 adicionais 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 deve se sobrepor a sub-redes de outras interfaces. Por exemplo, se estiver tentando criar sua instância na região us-west1, verifique os intervalos principais de CIDR da sub-rede com o comando a seguir ou o Console do Google Cloud Platform.qm

    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 da sub-rede secundária, use o seguinte comando ou o console do Google Cloud Platform.

    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. Você pode verificar se uma rede é legada usando o comando a seguir ou o console do Google Cloud Platform. 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. Você pode verificar se a política do IAM associada ao seu projeto concede algum dos 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 do 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
    

    É possível pedir ao proprietário ou ao editor do projeto que para que conceda um papel OWNER, EDITOR ou compute.instanceAdmin.v1. Você também precisará do papel compute.networkUser se estiver associando alguma 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. Para fazer a verificação, observe as regras de firewall da rede anexada à interface secundária. Para isso, acesse o Console do Google Cloud Platform e clique na rede VPC apropriada ou use 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 o comportamento DHCP com várias interfaces de rede para 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 apenas na interface de rede primária da VM. Se você quer 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, é necessário criar uma imagem usando uma sinalização --guest-os-features MULTI_IP_SUBNET e usá-la para criar a instância. Por exemplo, se você estiver usando uma imagem baseada no debian-9, é possível 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 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.

Esta página foi útil? Conte sua opinião sobre: