Azure VM Image Builder voor Linux-VM's gebruiken om toegang te krijgen tot een bestaand virtueel Azure-netwerk
Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️
In dit artikel wordt beschreven hoe u Azure VM Image Builder gebruikt om een eenvoudige, aangepaste Linux-installatiekopieën te maken die toegang heeft tot bestaande resources in een virtueel netwerk. De virtuele machine (VM) die u maakt, wordt geïmplementeerd in een nieuw of bestaand virtueel netwerk dat u opgeeft in uw abonnement. Wanneer u een bestaand virtueel Azure-netwerk gebruikt, vereist VM Image Builder geen openbare netwerkverbinding.
Vereisten
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Variabelen en machtigingen instellen
Voor deze taak gebruikt u enkele gegevens herhaaldelijk. Maak enkele variabelen om die informatie op te slaan.
# 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
Maak de resourcegroep.
az group create -n $imageResourceGroup -l $location
Netwerken configureren
Als u geen bestaand virtueel netwerk, subnet of netwerkbeveiligingsgroep (NSG) hebt, gebruikt u het volgende script om er een te maken.
# 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.
Een NSG-regel toevoegen
Deze regel staat connectiviteit toe van de load balancer van VM Image Builder naar de proxy-VM. Poort 60001 is voor Linux en poort 60000 voor Windows. De proxy-VM maakt verbinding met de build-VM via poort 22 voor Linux of poort 5986 voor 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"
Privéservicebeleid uitschakelen op het subnet
U doet dit als volgt:
az network vnet subnet update \
--name $subnetName \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--disable-private-link-service-network-policies true
Zie Azure VM Image Builder-netwerkopties voor meer informatie.
De voorbeeldsjabloon wijzigen en een rol maken
Nadat u netwerken hebt geconfigureerd, kunt u de voorbeeldsjabloon wijzigen en een rol maken. U doet dit als volgt:
# 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
Machtigingen instellen voor de resourcegroep
VM Image Builder gebruikt de gebruikersidentiteit die is opgegeven om de installatiekopieën in de Azure Compute Gallery te injecteren. In dit voorbeeld maakt u een Azure-roldefinitie waarmee de installatiekopieën naar de galerie kunnen worden gedistribueerd. De roldefinitie wordt vervolgens toegewezen aan de gebruikersidentiteit.
# 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
In plaats van VM Image Builder een lagere granulariteit en verhoogde bevoegdheden te verlenen, kunt u twee rollen maken. De ene rol geeft de opbouwfunctie machtigingen om een installatiekopieën te maken en de andere kan de build-VM en load balancer verbinden met uw virtuele netwerk.
# 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
Zie Azure VM Image Builder-machtigingen configureren met behulp van de Azure CLI of Azure VM Image Builder-machtigingen configureren met behulp van PowerShell voor meer informatie.
De installatiekopie maken
Verzend de configuratie van de installatiekopieën naar VM Image Builder.
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.)
Start de build van de installatiekopieën.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01 \
--action Run
# Wait approximately 15 mins
Het kan even duren voordat de installatiekopieën zijn gemaakt en naar beide regio's zijn gerepliceerd. Wacht tot dit onderdeel is voltooid voordat u verdergaat met het maken van een virtuele machine.
Een virtuele machine maken
Maak een VM op basis van de installatiekopieënversie die is gemaakt door VM Image Builder.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgVm0001 \
--admin-username aibuser \
--image $imageName \
--location $location \
--generate-ssh-keys
Gebruik Secure Shell (SSH) om toegang te krijgen tot de VM.
ssh aibuser@<publicIpAddress>
U ziet dat de afbeelding is aangepast met een Bericht van de dag zodra uw SSH-verbinding tot stand is gebracht.
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Resources opschonen
Als u de versie van de installatiekopieën opnieuw wilt aanpassen om een nieuwe versie van dezelfde installatiekopieën te maken, slaat u de volgende stappen over en gaat u verder met Azure VM Image Builder gebruiken om een andere versie van de installatiekopieën te maken.
Hieronder wordt de gemaakte installatiekopieën verwijderd, samen met alle andere bronbestanden. Zorg ervoor dat u klaar bent met deze implementatie voordat u de resources verwijdert.
Wanneer u galerieresources verwijdert, moet u alle versies van de installatiekopieën verwijderen voordat u de definitie van de installatiekopieën kunt verwijderen die is gebruikt om ze te maken. Als u een galerie wilt verwijderen, moet u eerst alle installatiekopieën in de galerie hebben verwijderd.
Verwijder de VM Image Builder-sjabloon:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
Machtigingentoewijzingen, rollen en identiteit verwijderen:
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
Verwijder de resourcegroep:
az group delete -n $imageResourceGroup
Als u een virtueel netwerk hebt gemaakt voor deze quickstart, kunt u het virtuele netwerk verwijderen als het niet meer wordt gebruikt.