Usare Image Builder di macchine virtuali linux di Azure per accedere a una rete virtuale di Azure esistente
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Questo articolo illustra come usare Image Builder di macchine virtuali di Azure per creare un'immagine Linux di base e personalizzata che abbia accesso alle risorse esistenti in una rete virtuale. La macchina virtuale di compilazione creata viene distribuita in una rete virtuale nuova o esistente specificata nella sottoscrizione. Quando si usa una rete virtuale di Azure esistente, Image Builder di macchine virtuali non richiede la connettività di rete pubblica.
Prerequisiti
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Impostare variabili e autorizzazioni
Per questa attività si usano ripetutamente alcune informazioni. Creare alcune variabili per archiviare tali informazioni.
# set your environment variables here!!!!
# destination image resource group
imageResourceGroup=aibImageRG01
# location (see possible locations in main docs)
location=WestUS2
# your subscription
# get the current subID : 'az account show | grep id'
subscriptionID=$(az account show --query id --output tsv)
# name of the image to be created
imageName=aibCustomLinuxImg01
# image distribution metadata reference name
runOutputName=aibCustLinManImg01ro
# VNET properties (update to match your existing VNET, or leave as-is for demo)
# VNET name
vnetName=myexistingvnet01
# subnet name
subnetName=subnet01
# VNET resource group name
# NOTE! The VNET must always be in the same region as the Azure Image Builder service region.
vnetRgName=existingVnetRG
# Existing Subnet NSG Name or the demo will create it
nsgName=aibdemoNsg
Creare il gruppo di risorse.
az group create -n $imageResourceGroup -l $location
Configurare la rete
Se non si dispone di una rete virtuale, una subnet o un gruppo di sicurezza di rete esistente, usare lo script seguente per crearne uno.
# Create a resource group
az group create -n $vnetRgName -l $location
# Create VNET
az network vnet create \
--resource-group $vnetRgName \
--name $vnetName --address-prefix 10.0.0.0/16 \
--subnet-name $subnetName --subnet-prefix 10.0.0.0/24
# Create base NSG to simulate an existing NSG
az network nsg create -g $vnetRgName -n $nsgName
az network vnet subnet update \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--name $subnetName \
--network-security-group $nsgName
# NOTE! The virtual network must always be in the same region as the Azure Image Builder service region.
Aggiungere una regola del gruppo di sicurezza di rete
Questa regola consente la connettività dal servizio di bilanciamento del carico di Image Builder alla macchina virtuale proxy. La porta 60001 è per Linux e la porta 60000 è per Windows. La macchina virtuale proxy si connette alla macchina virtuale di compilazione usando la porta 22 per Linux o la porta 5986 per Windows.
az network nsg rule create \
--resource-group $vnetRgName \
--nsg-name $nsgName \
-n AzureImageBuilderNsgRule \
--priority 400 \
--source-address-prefixes AzureLoadBalancer \
--destination-address-prefixes VirtualNetwork \
--destination-port-ranges 60000-60001 --direction inbound \
--access Allow --protocol Tcp \
--description "Allow Image Builder Private Link Access to Proxy VM"
Disabilitare i criteri del servizio privato nella subnet
In tal caso, eseguire la procedura seguente:
az network vnet subnet update \
--name $subnetName \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--private-link-service-network-policies Disabled
Per altre informazioni, vedere Opzioni di rete di Image Builder per macchine virtuali di Azure.
Modificare il modello di esempio e creare il ruolo
Dopo aver configurato la rete, è possibile modificare il modello di esempio e creare un ruolo. In tal caso, eseguire la procedura seguente:
# download the example and configure it with your vars
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1a_Creating_a_Custom_Linux_Image_on_Existing_VNET/existingVNETLinux.json -o existingVNETLinux.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json -o aibRoleNetworking.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" existingVNETLinux.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" existingVNETLinux.json
sed -i -e "s/<region>/$location/g" existingVNETLinux.json
sed -i -e "s/<imageName>/$imageName/g" existingVNETLinux.json
sed -i -e "s/<runOutputName>/$runOutputName/g" existingVNETLinux.json
sed -i -e "s/<vnetName>/$vnetName/g" existingVNETLinux.json
sed -i -e "s/<subnetName>/$subnetName/g" existingVNETLinux.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" existingVNETLinux.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleNetworking.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" aibRoleNetworking.json
Impostare le autorizzazioni per il gruppo di risorse
Vm Image Builder usa l'identità utente fornita per inserire l'immagine nella raccolta di calcolo di Azure. In questo esempio si crea una definizione di ruolo di Azure in grado di distribuire l'immagine alla raccolta. La definizione del ruolo viene quindi assegnata all'identità utente.
# create user assigned identity for image builder
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# get identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# update the template
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" existingVNETLinux.json
# make role name unique, to avoid clashes in the same Azure Active Directory domain
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
netRoleDefName="Azure Image Builder Network Def"$(date +'%s')
# update the definitions
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Networking Role/$netRoleDefName/g" aibRoleNetworking.json
Invece di concedere a Image Builder una granularità inferiore e a un maggior privilegio, è possibile creare due ruoli. Un ruolo concede al generatore le autorizzazioni per creare un'immagine e l'altra consente di connettere la macchina virtuale di compilazione e il servizio di bilanciamento del carico alla rete virtuale.
# create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
az role definition create --role-definition ./aibRoleNetworking.json
# grant role definition to the user assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az role assignment create \
--assignee $imgBuilderCliId \
--role "$netRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName
Per altre informazioni, vedere Configurare le autorizzazioni di Image Builder di macchine virtuali di Azure usando l'interfaccia della riga di comando di Azure o Configurare le autorizzazioni di Image Builder di macchine virtuali di Azure usando PowerShell.
Creare l'immagine
Inviare la configurazione dell'immagine a Image Builder della macchina virtuale.
az resource create \
--resource-group $imageResourceGroup \
--properties @existingVNETLinux.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
# Wait approximately 1-3 mins (validation, permissions etc.)
Avviare la compilazione dell'immagine.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01 \
--action Run
# Wait approximately 15 mins
La creazione dell'immagine e la replica in entrambe le aree può richiedere del tempo. Attendere il completamento di questa parte prima di procedere alla creazione di una macchina virtuale.
Creazione di una macchina virtuale
Creare una macchina virtuale dalla versione dell'immagine creata da Image Builder della macchina virtuale.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgVm0001 \
--admin-username aibuser \
--image $imageName \
--location $location \
--generate-ssh-keys
Usare Secure Shell (SSH) per accedere alla macchina virtuale.
ssh aibuser@<publicIpAddress>
Si noterà che l'immagine viene personalizzata con un messaggio del giorno non appena viene stabilita la connessione SSH.
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Pulire le risorse
Se si vuole riconfigurare la versione dell'immagine per creare una nuova versione della stessa immagine, ignorare i passaggi successivi e passare a Usare Image Builder di macchine virtuali di Azure per creare un'altra versione dell'immagine.
Di seguito viene eliminata l'immagine creata, insieme a tutti gli altri file di risorse. Assicurarsi che la distribuzione sia stata completata prima di eliminare le risorse.
Quando si eliminano le risorse della raccolta, è necessario eliminare tutte le versioni dell'immagine prima di poter eliminare la definizione dell'immagine usata per crearle. Per eliminare una raccolta, è prima di tutto necessario eliminare tutte le definizioni immagine nella raccolta.
Eliminare il modello di Image Builder della macchina virtuale:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
Eliminare assegnazioni di autorizzazioni, ruoli e identità:
az role assignment delete \
--assignee $imgBuilderCliId \
--role $imageRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az role assignment delete \
--assignee $imgBuilderCliId \
--role $netRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName
az role definition delete --name "$imageRoleDefName"
az role definition delete --name "$netRoleDefName"
az identity delete --ids $imgBuilderId
Eliminare il gruppo di risorse:
az group delete -n $imageResourceGroup
Se è stata creata una rete virtuale per questa guida introduttiva, è possibile eliminare la rete virtuale se non viene più usata.