1. Criar o Resource Group, VNet e Subnet:
az group create --location westeurope --name backend_RG
az network vnet create --resource-group backend_RG --name backend_VNET --address-prefix 10.0.0.0/16
az network vnet subnet create --resource-group backend_RG --vnet-name backend_VNET --name backend_SUBNET01 --address-prefix 10.0.1.0/24
Backend01: Criar a interface de rede (NIC), Public IP (PIP) e associar a NIC ao PIP:
az network nic create --resource-group backend_RG --name backend01_NIC01 --vnet-name backend_VNET --subnet backend_SUBNET01
az network public-ip create --resource-group backend_RG --name backend01_PIP01
az network nic ip-config update --resource-group backend_RG --nic-name backend01_NIC01 --name ipconfig1 --public-ip-address backend01_PIP01
Backend02: Criar a interface de rede (NIC), Public IP (PIP) e associar a NIC ao PIP:
az network nic create --resource-group backend_RG --name backend02_NIC01 --vnet-name backend_VNET --subnet backend_SUBNET01
az network public-ip create --resource-group backend_RG --name backend02_PIP01
az network nic ip-config update --resource-group backend_RG --nic-name backend02_NIC01 --name ipconfig1 --public-ip-address backend02_PIP01
2. Criar VM backend01:
az vm create \
--resource-group backend_RG \
--name backend01 \
--nics backend01_NIC01 \
--image Canonical:UbuntuServer:18.04-LTS:latest \
--size Standard_DS1_v2 \
--admin-username azureuser \
--generate-ssh-keys
Criar uma NSG, criar uma regra inbound para permitir tráfego 22 (ssh) e associar a NSG à NIC do backend01:
az network nsg create --resource-group backend_RG --name backend_NSG
az network nsg rule create --resource-group backend_RG --nsg-name backend_NSG --name Allow-SSH --priority 1000 --destination-port-ranges 22 --direction Inbound --access Allow --protocol Tcp --description "Allow SSH"
az network nic update --resource-group backend_RG --name backend01_NIC01 --network-security-group backend_NSG
Obter o endereço IP público do backend01, aceder via ssh e instalar o NGINX:
az vm list-ip-addresses --name backend01 --output table
ssh azureuser@IP-Publico
sudo apt-get -y update && sudo apt-get -y install nginx
Adicionar uma descrição ao index.html, para sabermos qual o backend que estamos a aceder quando usarmos o IP do LB:
sudo vim /var/www/html/index.nginx-debian.html
<h1>Welcome to nginx! - backend01</h1>
Abrir o porto 80 para inbound (desta vez via portal):
Portal Azure > backend01 > Networking > Network settings > Rules > + Create port rule:
Verificar se o NGINX funciona:
Colocar no navegador de internet o ip público do backend01 e deverão ter uma resposta do NGINX:
...
...
3. Criar a VM backend02:
Nota: Na criação deste VM, usei outra forma propositadamente para dar a conhecer o parâmetro --custom-data que permite que depois da VM criada seja executado um script. Neste caso, instala o nginx, inicia o serviço e altera o index.html.
Mais info: https://learn.microsoft.com/en-us/azure/virtual-machines/custom-data.
Criar o ficheiro cloud-init.txt com o conteúdo mais abaixo. Podem usar o comando vi cloud-init.txt:
#cloud-config
package_upgrade: true
packages:
- nginx
runcmd:
- systemctl start nginx
- sed -i 's/<h1>Welcome to nginx!<\/h1>/<h1>Welcome to nginx! - backend02<\/h1>/' /var/www/html/index.nginx-debian.html
Criar a vm backend02 usando como parâmetro o script cloud-init.txt:
az vm create \
--resource-group backend_RG \
--name backend02 \
--nics backend02_NIC01 \
--image Canonical:UbuntuServer:18.04-LTS:latest \
--size Standard_DS1_v2 \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_rsa.pub \
--custom-data cloud-init.txt
Agora não precisamos de criar uma nova NSG, vamos apenas associar a backend_NSG à interface de rede backend02_NIC01:
az network nic update --resource-group backend_RG --name backend02_NIC01 --network-security-group backend_NSG
Abrir o porto 80 para inbound:
az vm open-port \
--port 80 \
--resource-group "backend_RG" \
--name backend02
Verificar se o NGINX funciona:
...
...
4. Criar o Load Balancer
Iremos criar um LB básico de L4 (Camada 4), ou seja, o reencaminhamento do tráfego será via sockets (IP:porto).
Como existe mais que uma solução de balanceamento de tráfego no Azure, o mais simples é colocar na barra de pesquisa do portal Azure "Load Balancing - Help me choose". Uma vez, destro deste assistente vamos respondendo a questões até o Azure no sugerir o melhor LB:
Does your application use HTTP/HTTPS? [No]
Is your application public (internet facing)? [Yes]
Is your application deployed in multiple regions? [No]
Se respondermos desta forma termos a sugestão de um Load Balancer com L4. Clicamos em Create.
Criámos um load balancer baseado em encaminhamento de IP:porto, ou seja, tudo o que chega a determinado IP público é encaminhado para um de dois backends (backend01 e backend02). Começámos por criar as componentes de rede, bem como as interfaces de rede a serem usadas nas VMs. Para além de criar as VMs, foi também necessário criar um NSG com uma regra para conseguirmos ligar por SSH para efetuar a instalação de pacotes e algumas alterações.
Neste tutorial, tentei demonstrar como realizar alguns passos através do Azure CLI e outros através do Portal do Azure. Após criar o load balancer, os PIPs dos backends podem ser removidos para melhorar a segurança e evitar a exposição dessas VMs à internet pública.
Explorem as várias opções disponíveis no load balancer, por exemplo, as Session persistence (None, Client IP e Client IP and Protocol) que podem ser interessantes dependendo objetivo que se pretende.
Mais info:
0 comments:
Enviar um comentário