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 leest u hoe u Met Azure VM Image Builder een eenvoudige, aangepaste Linux-installatiekopieën maakt die toegang heeft tot bestaande resources in een virtueel netwerk. De virtuele buildmachine (VM) die u maakt, wordt geïmplementeerd in een nieuw of bestaand virtueel netwerk dat u in uw abonnement opgeeft. Wanneer u een bestaand virtueel Azure-netwerk gebruikt, is voor VM Image Builder geen openbare netwerkconnectiviteit vereist.
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 herhaaldelijk enkele gegevens. 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
Met deze regel is connectiviteit mogelijk van de load balancer van vm Image Builder naar de proxy-VM. Poort 60001 is voor Linux en poort 60000 is voor Windows. De proxy-VM maakt verbinding met de build-VM met behulp van 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"
Beleid voor privéservices op het subnet uitschakelen
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 Netwerkopties voor Azure VM Image Builder 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 maakt gebruik van 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 lagere granulariteit en verhoogde bevoegdheden te verlenen, kunt u twee rollen maken. De ene rol geeft de opbouwfunctie machtigingen voor het maken van een installatiekopieën en de andere rol stelt het in staat om de build-VM en load balancer te 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 Machtigingen voor Azure VM Image Builder configureren met behulp van de Azure CLI of Machtigingen voor Azure VM Image Builder configureren met behulp van PowerShell voor meer informatie.
De installatiekopie maken
Verzend de installatiekopieënconfiguratie 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 worden gemaakt en gerepliceerd naar beide regio's. Wacht totdat dit onderdeel is voltooid voordat u verdergaat met het maken van een virtuele machine.
Een VM maken:
Maak een VIRTUELE machine 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 VIRTUELE machine.
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 om een andere versie van de installatiekopieën te maken.
Hieronder verwijdert u de installatiekopieën die zijn gemaakt, samen met alle andere resourcebestanden. Zorg ervoor dat u klaar bent met deze implementatie voordat u de resources verwijdert.
Wanneer u galeriebronnen verwijdert, moet u alle versies van de installatiekopieën verwijderen voordat u de definitie van de installatiekopieën kunt verwijderen die worden gebruikt om deze te maken. Als u een galerie wilt verwijderen, moet u eerst alle definities van 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.