Delen via


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

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.

Volgende stappen

Azure Compute-galerieën