Använda Azure VM Image Builder för virtuella Linux-datorer för att få åtkomst till ett befintligt virtuellt Azure-nätverk

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

Den här artikeln visar hur du använder Azure VM Image Builder för att skapa en grundläggande, anpassad Linux-avbildning som har åtkomst till befintliga resurser i ett virtuellt nätverk. Den virtuella build-dator (VM) som du skapar distribueras till ett nytt eller befintligt virtuellt nätverk som du anger i din prenumeration. När du använder ett befintligt virtuellt Azure-nätverk kräver vm Image Builder ingen anslutning till det offentliga nätverket.

Förutsättningar

Ange variabler och behörigheter

För den här uppgiften använder du viss information upprepade gånger. Skapa några variabler för att lagra den informationen.

# 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

Skapa resursgruppen.

az group create -n $imageResourceGroup -l $location

Konfigurera nätverksfunktioner

Om du inte har ett befintligt virtuellt nätverk, undernät eller en nätverkssäkerhetsgrupp (NSG) använder du följande skript för att skapa ett.


# 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.

Lägga till en NSG-regel

Den här regeln tillåter anslutning från vm Image Builder-lastbalanseraren till den virtuella proxydatorn. Port 60001 är för Linux och port 60000 är för Windows. Den virtuella proxydatorn ansluter till den virtuella byggdatorn med hjälp av port 22 för Linux eller port 5986 för 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"

Inaktivera principen för privata tjänster i undernätet

Gör så här:

az network vnet subnet update \
  --name $subnetName \
  --resource-group $vnetRgName \
  --vnet-name $vnetName \
  --disable-private-link-service-network-policies true 

Mer information finns i Nätverksalternativ för Azure VM Image Builder.

Ändra exempelmallen och skapa rollen

När du har konfigurerat nätverk kan du ändra exempelmallen och skapa en roll. Gör så här:

# 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

Ange behörigheter för resursgruppen

VM Image Builder använder användaridentiteten som tillhandahålls för att mata in avbildningen i Azure Compute Gallery. I det här exemplet skapar du en Azure-rolldefinition som kan distribuera avbildningen till galleriet. Rolldefinitionen tilldelas sedan till användaridentiteten.

# 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

I stället för att ge VM Image Builder lägre kornighet och utökad behörighet kan du skapa två roller. En roll ger byggaren behörighet att skapa en avbildning och den andra gör att den kan ansluta den virtuella datorn och lastbalanseraren till ditt virtuella nätverk.

# 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

Mer information finns i Konfigurera Azure VM Image Builder-behörigheter med hjälp av Azure CLI eller Konfigurera Azure VM Image Builder-behörigheter med hjälp av PowerShell.

Skapa avbildningen

Skicka avbildningskonfigurationen till 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.)

Starta avbildningsversionen.

az resource invoke-action \
     --resource-group $imageResourceGroup \
     --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
     -n existingVNETLinuxTemplate01 \
     --action Run 

# Wait approximately 15 mins

Det kan ta en stund att skapa avbildningen och replikera den till båda regionerna. Vänta tills den här delen är klar innan du går vidare till att skapa en virtuell dator.

Skapa en virtuell dator

Skapa en virtuell dator från avbildningsversionen som skapades av VM Image Builder.

az vm create \
  --resource-group $imageResourceGroup \
  --name aibImgVm0001 \
  --admin-username aibuser \
  --image $imageName \
  --location $location \
  --generate-ssh-keys

Använd Secure Shell (SSH) för att komma in på den virtuella datorn.

ssh aibuser@<publicIpAddress>

Du bör se att avbildningen har anpassats med ett Meddelande om dagen så snart din SSH-anslutning har upprättats!

*******************************************************
**            This VM was built from the:            **
**      !! AZURE VM IMAGE BUILDER Custom Image !!    **
**         You have just been Customized :-)         **
*******************************************************

Rensa resurser

Om du vill anpassa avbildningsversionen igen för att skapa en ny version av samma avbildning hoppar du över nästa steg och går vidare till Använd Azure VM Image Builder för att skapa en annan avbildningsversion.

Följande tar bort avbildningen som skapades tillsammans med alla andra resursfiler. Kontrollera att du är klar med den här distributionen innan du tar bort resurserna.

När du tar bort galleriresurser måste du ta bort alla avbildningsversioner innan du kan ta bort avbildningsdefinitionen som används för att skapa dem. Om du vill ta bort ett galleri måste du först ha tagit bort alla bilddefinitioner i galleriet.

Ta bort mallen för VM Image Builder:

az resource delete \
    --resource-group $imageResourceGroup \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n existingVNETLinuxTemplate01

Ta bort behörighetstilldelningar, roller och identitet:

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

Ta bort resursgruppen:

az group delete -n $imageResourceGroup

Om du har skapat ett virtuellt nätverk för den här snabbstarten kan du ta bort det virtuella nätverket om det inte längre används.

Nästa steg

Azure Compute-gallerier