😀
パブリック IP を持たない Azure VM に Azure Load Balancer からパブリックアクセスする構
パブリック IP を持たない Azure VM が既に存在していたとします。後から Azure Load Balancer を追加し、パブリック経由でアクセスできるようにしたい場合を想定して試してみました。
検証用のパブリック IP を持たない Azure VM を作成
bash
region=japaneast
prefix=mnrvmlb
az group create \
--name ${prefix}-rg \
--location $region
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-vmOSDisk \
--image Ubuntu2204 \
--size Standard_B1s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-address "" \
--nsg-rule NONE
Azure VM に Nginx を入れて動作確認
bash
az vm extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group ${prefix}-rg \
--vm-name ${prefix}-vm \
--settings '{"fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx.sh"],"commandToExecute":"./automate_nginx.sh"}'
az vm run-command invoke \
--command-id RunShellScript \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--query "value[0].message" \
--output tsv \
--scripts "curl -s http://localhost/"
下記のような結果になれば動作確認完了。
Enable succeeded:
[stdout]
Hello World from host mnrvmlb-vm !
[stderr]
Azure Load Balancer を作成
bash
az network public-ip create \
--resource-group ${prefix}-rg \
--name ${prefix}-pip \
--sku Standard
az network lb create \
--resource-group ${prefix}-rg \
--name ${prefix}-lb \
--sku Standard \
--public-ip-address ${prefix}-pip \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool
az network lb probe create \
--resource-group ${prefix}-rg \
--lb-name ${prefix}-lb \
--name myHealthProbe \
--protocol tcp \
--port 80
az network lb rule create \
--resource-group ${prefix}-rg \
--lb-name ${prefix}-lb \
--name myHTTPRule \
--protocol tcp \
--frontend-port 80 \
--backend-port 80 \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--probe-name myHealthProbe \
--disable-outbound-snat true \
--idle-timeout 15 \
--enable-tcp-reset true
Azure VM を Azure Load Balancer に登録
bash
az network nic ip-config address-pool add \
--resource-group ${prefix}-rg \
--lb-name ${prefix}-lb \
--address-pool myBackendPool \
--ip-config-name ipconfig${prefix}-vm \
--nic-name ${prefix}-vmVMNic
Azure VM の NSG に自分のパブリック IP を許可
bash
az network nsg rule create \
--resource-group ${prefix}-rg \
--nsg-name ${prefix}-vmNSG \
--name myNSGRuleHTTP \
--protocol Tcp \
--direction inbound \
--source-address-prefix $(curl -s inet-ip.info/ip) \
--destination-port-range 80 \
--access allow \
--priority 200
パブリック IP を持たない Azure VM に Azure Load Balancer からパブリックアクセスを試す
bash
pip=$(az network public-ip show \
--resource-group ${prefix}-rg \
--name ${prefix}-pip \
--query ipAddress \
--output tsv)
curl -s $pip
下記のような結果になれば動作確認完了。
Hello World from host mnrvmlb-vm !
参考
Discussion