Compartilhar via


Como criar uma máquina virtual Linux no Azure com várias placas de adaptador de rede

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

Este artigo fornece detalhes sobre como criar uma VM com várias NICs com a CLI do Azure.

Criar recursos de suporte

Instale a CLI do Azure mais recente do Azure e faça logon em uma conta do Azure usando az login.

Nos exemplos a seguir, substitua os nomes de parâmetro de exemplo com seus próprios valores. Os nomes de parâmetro de exemplo incluem myResourceGroup, mystorageaccount e myVM.

Primeiro, crie um grupo de recursos com az group create. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup no local eastus. Nesses exemplos, declaramos variáveis de ambiente conforme elas são usadas e adicionamos um sufixo aleatório a nomes de recursos exclusivos.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
export REGION="WestUS2"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
  "location": "WestUS2",
  "managedBy": null,
  "name": "myResourceGroupxxx",
  "properties": {
      "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Crie a rede virtual com az network vnet create. O exemplo a seguir cria uma rede virtual chamada myVnet e uma sub-rede chamada mySubnetFrontEnd:

export VNET_NAME="myVnet"
export FRONTEND_SUBNET="mySubnetFrontEnd"
az network vnet create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --name $VNET_NAME \
    --address-prefix 10.0.0.0/16 \
    --subnet-name $FRONTEND_SUBNET \
    --subnet-prefix 10.0.1.0/24

Crie uma sub-rede para o tráfego de back-end com az network vnet subnet create. O exemplo a seguir cria uma sub-rede chamada mySubnetBackEnd:

export BACKEND_SUBNET="mySubnetBackEnd"
az network vnet subnet create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --vnet-name $VNET_NAME \
    --name $BACKEND_SUBNET \
    --address-prefix 10.0.2.0/24

Crie um grupo de segurança de rede com az network nsg create. O exemplo a seguir cria um grupo de segurança de rede denominado myNetworkSecurityGroup:

export NSG_NAME="myNetworkSecurityGroup"
az network nsg create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --name $NSG_NAME

Criar e configurar várias NICs

Crie duas NICs com az network nic create. O exemplo a seguir cria duas NICs, chamadas myNic1 e myNic2, conectadas ao grupo de segurança de rede, com uma NIC conectando-se a cada sub-rede:

export NIC1="myNic1"
export NIC2="myNic2"
az network nic create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --name $NIC1 \
    --vnet-name $VNET_NAME \
    --subnet $FRONTEND_SUBNET \
    --network-security-group $NSG_NAME
az network nic create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --name $NIC2 \
    --vnet-name $VNET_NAME \
    --subnet $BACKEND_SUBNET \
    --network-security-group $NSG_NAME

Criar uma VM e conectar as NICs

Ao criar a VM, especifique as NICs criadas com --nics. Você também precisa tomar cuidado ao selecionar o tamanho da VM. Há limites para o número total de NICs que podem ser adicionados a uma VM. Leia mais sobre Tamanhos de VM Linux.

Crie uma VM com az vm create. O exemplo a seguir cria uma VM chamada myVM:

export VM_NAME="myVM"
az vm create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --name $VM_NAME \
    --image Ubuntu2204 \
    --size Standard_DS3_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --nics $NIC1 $NIC2

Adicione tabelas de roteamento ao SO convidado concluindo as etapas em Configure o SO convidado para várias NICs.

Adicionar uma NIC a uma VM

As etapas anteriores criaram uma VM com várias NICs. Também é possível adicionar NICs a uma VM existente com a CLI do Azure. Diferentes tamanhos de VM dão suporte a um número variável de NICs, sendo assim, dimensione sua VM adequadamente. Se necessário, é possível redimensionar uma VM.

Crie outra NIC com az network nic create. O exemplo a seguir cria uma NIC chamada myNic3 conectada à sub-rede de back-end e ao Grupo de Segurança de Rede criado nas etapas anteriores:

export NIC3="myNic3"
az network nic create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --name $NIC3 \
    --vnet-name $VNET_NAME \
    --subnet $BACKEND_SUBNET \
    --network-security-group $NSG_NAME

Para adicionar uma NIC a uma VM existente, primeiro desaloque a VM com az vm deallocate. O exemplo a seguir desaloca a VM chamada myVM:

az vm deallocate --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME

Adicione a NIC com az vm nic add. O exemplo a seguir adiciona myNic3 à myVM:

az vm nic add \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --vm-name $VM_NAME \
    --nics $NIC3

Inicie a VM com az vm start:

az vm start --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME

Adicione tabelas de roteamento ao SO convidado concluindo as etapas em Configure o SO convidado para várias NICs.

Remover uma NIC de uma VM

Para remover uma NIC de uma VM existente, primeiro desaloque a VM com az vm deallocate. O exemplo a seguir desaloca a VM chamada myVM:

az vm deallocate --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME

Remova a NIC com az vm nic remove. O exemplo a seguir remove myNic3 de myVM:

az vm nic remove \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --vm-name $VM_NAME \
    --nics $NIC3

Inicie a VM com az vm start:

az vm start --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME

Criar várias NICs usando modelos do Resource Manager

Os modelos do Azure Resource Manager usam arquivos JSON declarativos para definir o seu ambiente. Você pode ler uma visão geral do Azure Resource Manager. Os modelos do Gerenciador de Recursos oferecem uma maneira de criar várias instâncias de um recurso durante a implantação, como a criação de várias NICs. Você usa copiar para especificar o número de instâncias a serem criadas:

"copy": {
    "name": "multiplenics"
    "count": "[parameters('count')]"
}

Leia mais sobre a criação de várias instâncias usando copiar.

Você também pode usar um copyIndex() para acrescentar um número a um nome de recurso, o que permite que você crie myNic1, myNic2 etc. O seguinte mostra um exemplo de anexação do valor do índice:

"name": "[concat('myNic', copyIndex())]",

Você pode ler um exemplo completo em Criando várias NICs usando modelos do Gerenciador de Recursos.

Adicione tabelas de roteamento ao SO convidado concluindo as etapas em Configure o SO convidado para várias NICs.

Configurar o SO convidado para várias NICs

As etapas anteriores criaram uma rede virtual e uma sub-rede, conectaram adaptadores de rede e, em seguida, criaram uma VM. Um endereço IP público e regras de grupo de segurança de rede que permitem tráfego SSH não foram criados. Para configurar o SO convidado para vários adaptadores de rede, é necessário permitir conexões remotas e executar comandos localmente na VM.

Para permitir tráfego SSH, crie uma regra de grupo de segurança de rede com az network nsg rule create, conforme a seguir:

az network nsg rule create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --nsg-name $NSG_NAME \
    --name allow_ssh \
    --priority 101 \
    --destination-port-ranges 22

Crie um endereço IP público com az network public-ip create e atribua-o ao primeiro adaptador de rede com az network nic ip-config update:

export PUBLIC_IP_NAME="myPublicIP"
az network public-ip create --resource-group $MY_RESOURCE_GROUP_NAME --name $PUBLIC_IP_NAME

az network nic ip-config update \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --nic-name $NIC1 \
    --name ipconfig1 \
    --public-ip $PUBLIC_IP_NAME

Para exibir o endereço IP público da VM, use az vm show da seguinte maneira:

az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME -d --query publicIps -o tsv
x.x.x.x

Exemplo de SSH para o endereço IP público da VM. O nome de usuário padrão fornecido em uma etapa anterior era azureuser. Forneça seu próprio nome de usuário e endereço IP público:

export IP_ADDRESS=$(az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME -d --query publicIps -o tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS

Para enviar para ou de um adaptador de rede secundário, é necessário adicionar manualmente rotas persistentes ao sistema operacional para cada adaptador de rede secundário. Neste artigo, eth1 é o adaptador de rede secundário. As instruções para adicionar rotas persistentes ao sistema operacional variam de acordo com a distribuição. Consulte a documentação da sua distribuição para obter mais instruções.

Ao adicionar a rota ao sistema operacional, o endereço do gateway será o primeiro endereço da sub-rede na qual o adaptador de rede está. Por exemplo, se a sub-rede tiver recebido o intervalo 10.0.2.0/24, o gateway especificado para a rota será 10.0.2.1 ou se a sub-rede tiver recebido o intervalo 10.0.2.128/25, o gateway especificado para a rota será 10.0.2.129. Você pode definir uma rede específica para o destino da rota ou especificar um destino de 0.0.0.0, se quiser que todo o tráfego para a interface passe pelo gateway especificado. O gateway de cada sub-rede é gerenciado pela rede virtual.

Após adicionar a rota para um adaptador de rede secundário, verifique se a rota está na tabela de rotas com route -n. A saída de exemplo a seguir é para a tabela de rotas que tem as dois adaptadores de rede adicionadas à VM neste artigo:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.1.1        0.0.0.0         UG    0      0        0 eth0
0.0.0.0         10.0.2.1        0.0.0.0         UG    0      0        0 eth1
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
168.63.129.16   10.0.1.1        255.255.255.255 UGH   0      0        0 eth0
169.254.169.254 10.0.1.1        255.255.255.255 UGH   0      0        0 eth0

Confirme se a rota que você adicionou persistiu entre os reinícios, verificando a tabela de rotas novamente após reiniciar. Para testar a conectividade, você pode inserir o seguinte comando, por exemplo, em que eth1 é o nome de um adaptador de rede secundário: ping bing.com -c 4 -I eth1

Próximas etapas

Examine Tamanhos de VM Linux ao tentar criar uma VM com várias NICs. Preste atenção ao número máximo de NICs a que cada VM dá suporte.

Para proteger ainda mais as VMs, use acesso just-in-time à VM. Esse recurso abre regras de grupo de segurança de rede para tráfego SSH quando necessário e por um período de tempo definido. Para saber mais, confira Gerenciar o acesso à máquina virtual usando o just in time.