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

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

Este artigo detalha como criar uma VM com vários NICs com a CLI do Azure.

Criar recursos de suporte

Instale a CLI do Azure mais recente e inicie sessão numa conta do Azure com az login.

Nos exemplos seguintes, substitua nomes de parâmetros de exemplo pelos seus próprios valores. Os nomes de parâmetros de exemplo incluíam myResourceGroup, mystorageaccount e myVM.

Primeiro, crie um grupo de recursos com az group create. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eastus :

az group create --name myResourceGroup --location eastus

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

az network vnet create \
    --resource-group myResourceGroup \
    --name myVnet \
    --address-prefix 10.0.0.0/16 \
    --subnet-name mySubnetFrontEnd \
    --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 seguinte cria uma sub-rede com o nome mySubnetBackEnd:

az network vnet subnet create \
    --resource-group myResourceGroup \
    --vnet-name myVnet \
    --name mySubnetBackEnd \
    --address-prefix 10.0.2.0/24

Crie um grupo de segurança de rede com az network nsg create. O exemplo seguinte cria um grupo de segurança de rede com o nome myNetworkSecurityGroup:

az network nsg create \
    --resource-group myResourceGroup \
    --name myNetworkSecurityGroup

Criar e configurar várias NICs

Crie dois NICs com az network nic create. O exemplo seguinte cria duas NICs, denominadas myNic1 e myNic2, que ligam o grupo de segurança de rede, com uma NIC a ligar a cada sub-rede:

az network nic create \
    --resource-group myResourceGroup \
    --name myNic1 \
    --vnet-name myVnet \
    --subnet mySubnetFrontEnd \
    --network-security-group myNetworkSecurityGroup
az network nic create \
    --resource-group myResourceGroup \
    --name myNic2 \
    --vnet-name myVnet \
    --subnet mySubnetBackEnd \
    --network-security-group myNetworkSecurityGroup

Criar uma VM e anexar as NICs

Quando criar a VM, especifique as NICs que criou com --nics. Também tem de ter cuidado ao selecionar o tamanho da VM. Existem limites para o número total de NICs que pode adicionar a uma VM. Leia mais sobre os tamanhos de VMs do Linux.

Crie uma VM com az vm create. O exemplo seguinte cria uma VM com o nome myVM:

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image Ubuntu2204 \
    --size Standard_DS3_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --nics myNic1 myNic2

Adicione tabelas de encaminhamento ao SO convidado ao concluir os passos em Configurar o SO convidado para várias NICs.

Adicionar um NIC a uma VM

Os passos anteriores criaram uma VM com várias NICs. Também pode adicionar NICs a uma VM existente com a CLI do Azure. Diferentes tamanhos de VM suportam um número variado de NICs, pelo que dimensiona a VM em conformidade. Se necessário, pode redimensionar uma VM.

Crie outro NIC com az network nic create. O exemplo seguinte cria um NIC com o nome myNic3 ligado à sub-rede de back-end e ao grupo de segurança de rede criado nos passos anteriores:

az network nic create \
    --resource-group myResourceGroup \
    --name myNic3 \
    --vnet-name myVnet \
    --subnet mySubnetBackEnd \
    --network-security-group myNetworkSecurityGroup

Para adicionar um NIC a uma VM existente, desaloque primeiro a VM com az vm deallocate. O exemplo seguinte desaloca a VM com o nome myVM:

az vm deallocate --resource-group myResourceGroup --name myVM

Adicione o NIC com az vm nic add. O exemplo seguinte adiciona myNic3 à myVM:

az vm nic add \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --nics myNic3

Inicie a VM com az vm start:

az vm start --resource-group myResourceGroup --name myVM

Adicione tabelas de encaminhamento ao SO convidado ao concluir os passos em Configurar o SO convidado para várias NICs.

Remover um NIC de uma VM

Para remover um NIC de uma VM existente, desaloque primeiro a VM com az vm deallocate. O exemplo seguinte desaloca a VM com o nome myVM:

az vm deallocate --resource-group myResourceGroup --name myVM

Remova o NIC com az vm nic remove. O exemplo seguinte remove myNic3 de myVM:

az vm nic remove \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --nics myNic3

Inicie a VM com az vm start:

az vm start --resource-group myResourceGroup --name myVM

Criar várias NICs com modelos de Resource Manager

Os modelos do Azure Resource Manager utilizam ficheiros JSON declarativos para definir o seu ambiente. Pode ler uma descrição geral do Azure Resource Manager. Resource Manager modelos fornecem uma forma de criar várias instâncias de um recurso durante a implementação, como criar várias NICs. Utilize a cópia para especificar o número de instâncias a criar:

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

Leia mais sobre como criar várias instâncias com a cópia.

Também pode utilizar um copyIndex() para, em seguida, acrescentar um número a um nome de recurso, o que lhe permite criar myNic1, myNic2, etc. Segue-se um exemplo de anexação do valor do índice:

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

Pode ler um exemplo completo de criação de vários NICs com Resource Manager modelos.

Adicione tabelas de encaminhamento ao SO convidado ao concluir os passos em Configurar o SO convidado para várias NICs.

Configurar o SO convidado para várias NICs

Os passos anteriores criaram uma rede virtual e uma sub-rede, anexaram NICs e, em seguida, criaram uma VM. Não foram criadas regras de endereços IP públicos e de grupos de segurança de rede que permitam tráfego SSH. Para configurar o SO convidado para várias NICs, tem de permitir ligações remotas e executar comandos localmente na VM.

Para permitir o tráfego SSH, crie uma regra de grupo de segurança de rede com az network nsg rule create da seguinte forma:

az network nsg rule create \
    --resource-group myResourceGroup \
    --nsg-name myNetworkSecurityGroup \
    --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 NIC com az network nic ip-config update:

az network public-ip create --resource-group myResourceGroup --name myPublicIP

az network nic ip-config update \
    --resource-group myResourceGroup \
    --nic-name myNic1 \
    --name ipconfig1 \
    --public-ip myPublicIP

Para ver o endereço IP público da VM, utilize az vm show da seguinte forma:

az vm show --resource-group myResourceGroup --name myVM -d --query publicIps -o tsv

Agora, utilize o SSH para o endereço IP público da sua VM. O nome de utilizador predefinido fornecido num passo anterior era azureuser. Forneça o seu próprio nome de utilizador e endereço IP público:

ssh azureuser@137.117.58.232

Para enviar de ou para uma interface de rede secundária, tem de adicionar manualmente rotas persistentes ao sistema operativo para cada interface de rede secundária. Neste artigo, eth1 é a interface secundária. As instruções para adicionar rotas persistentes ao sistema operativo variam consoante a distribuição. Veja a documentação da sua distribuição para obter instruções.

Ao adicionar a rota ao sistema operativo, o endereço do gateway é o primeiro endereço da sub-rede onde se encontra a interface de rede. Por exemplo, se a sub-rede tiver sido atribuída ao intervalo 10.0.2.0/24, o gateway especificado para a rota é 10.0.2.1 ou se a sub-rede tiver sido atribuída ao intervalo 10.0.2.128/25, o gateway especificado para a rota é 10.0.2.129. Pode definir uma rede específica para o destino da rota ou especificar um destino de 0.0.0.0, se pretender que todo o tráfego da interface percorra o gateway especificado. O gateway para cada sub-rede é gerido pela rede virtual.

Depois de adicionar a rota para uma interface secundária, verifique se a rota está na tabela de rotas com route -n. O resultado de exemplo seguinte destina-se à tabela de rotas que tem as duas interfaces 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 que a rota que adicionou persiste entre reinícios ao verificar novamente a tabela de rotas após um reinício. Para testar a conectividade, pode introduzir o seguinte comando, por exemplo, em que eth1 é o nome de uma interface de rede secundária:

ping bing.com -c 4 -I eth1

Passos seguintes

Reveja os tamanhos das VMs do Linux ao tentar criar uma VM com várias NICs. Preste atenção ao número máximo de NICs suportado por cada tamanho de VM.

Para proteger ainda mais as suas VMs, utilize o acesso à VM just-in-time. Esta funcionalidade abre regras do grupo de segurança de rede para o tráfego SSH quando necessário e durante um período de tempo definido. Para obter mais informações, veja Manage virtual machine access using just in time (Gerir o acesso da máquina virtual através do just in time).