Použití Azure VM Image Builderu pro virtuální počítače s Linuxem pro přístup k existující virtuální síti Azure
Platí pro: ✔️ Flexibilní škálovací sady virtuálních počítačů s Linuxem ✔️
V tomto článku se dozvíte, jak pomocí Azure VM Image Builderu vytvořit základní přizpůsobenou image Linuxu, která má přístup k existujícím prostředkům ve virtuální síti. Virtuální počítač sestavení, který vytvoříte, se nasadí do nové nebo existující virtuální sítě, kterou zadáte ve svém předplatném. Pokud používáte existující virtuální síť Azure, nástroj Image Builder pro virtuální počítač nevyžaduje připojení k veřejné síti.
Požadavky
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Nastavení proměnných a oprávnění
U tohoto úkolu opakovaně použijete některé informace. Vytvořte některé proměnné pro uložení informací.
# 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
Vytvořte skupinu prostředků.
az group create -n $imageResourceGroup -l $location
Konfigurace sítě
Pokud nemáte existující virtuální síť, podsíť nebo skupinu zabezpečení sítě (NSG), vytvořte ji pomocí následujícího skriptu.
# 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.
Přidání pravidla NSG
Toto pravidlo umožňuje připojení z nástroje pro vyrovnávání zatížení Image Builderu virtuálního počítače k virtuálnímu počítači proxy. Port 60001 je pro Linux a port 60000 je pro Windows. Proxy virtuální počítač se připojí k virtuálnímu počítači sestavení pomocí portu 22 pro Linux nebo portu 5986 pro 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"
Zakázání zásad privátní služby v podsíti
Postupujte následovně:
az network vnet subnet update \
--name $subnetName \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--disable-private-link-service-network-policies true
Další informace najdete v tématu Možnosti sítě v Azure VM Image Builderu.
Úprava ukázkové šablony a vytvoření role
Po nakonfigurování sítě můžete ukázkovou šablonu upravit a vytvořit roli. Postupujte následovně:
# 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
Nastavení oprávnění pro skupinu prostředků
Image Builder virtuálního počítače používá identitu uživatele zadanou k vložení image do Galerie výpočetních prostředků Azure. V tomto příkladu vytvoříte definici role Azure, která dokáže distribuovat image do galerie. Definice role se pak přiřadí identitě uživatele.
# 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
Místo udělení nižší členitosti a zvýšeného oprávnění VM Image Builderu můžete vytvořit dvě role. Jedna role dává tvůrci oprávnění k vytvoření image a druhá umožňuje připojit k virtuální síti virtuální počítač sestavení a nástroj pro vyrovnávání zatížení.
# 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
Další informace najdete v tématu Konfigurace oprávnění Image Builderu virtuálních počítačů Azure pomocí Azure CLI nebo konfigurace oprávnění Azure VM Image Builderu pomocí PowerShellu.
Vytvoření image
Odešlete konfiguraci image do Nástroje image virtuálního počítače.
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.)
Spusťte sestavení image.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01 \
--action Run
# Wait approximately 15 mins
Vytvoření image a jeho replikace do obou oblastí může chvíli trvat. Než přejdete na vytvoření virtuálního počítače, počkejte, až se tato část dokončí.
Vytvoření virtuálního počítače
Vytvořte virtuální počítač z verze image vytvořené nástrojem VM Image Builder.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgVm0001 \
--admin-username aibuser \
--image $imageName \
--location $location \
--generate-ssh-keys
K přístupu k virtuálnímu počítači použijte Secure Shell (SSH).
ssh aibuser@<publicIpAddress>
Měli byste vidět, že obrázek byl přizpůsoben zprávou dne , jakmile se naváže připojení SSH!
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Vyčištění prostředků
Pokud chcete znovu použít verzi image a vytvořit novou verzi stejné image, přeskočte další kroky a přejděte k vytvoření další verze image pomocí Nástroje image virtuálního počítače Azure.
Následující příkaz odstraní image, která byla vytvořena, spolu se všemi ostatními soubory prostředků. Před odstraněním prostředků se ujistěte, že jste dokončili toto nasazení.
Když odstraníte prostředky galerie, musíte před odstraněním definice obrázku použité k jejich vytvoření odstranit všechny verze imagí. Pokud chcete odstranit galerii, musíte nejprve odstranit všechny definice obrázků v galerii.
Odstraňte šablonu Image Builderu virtuálního počítače:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
Odstranění přiřazení oprávnění, rolí a identity:
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
Odstraňte skupinu prostředků:
az group delete -n $imageResourceGroup
Pokud jste pro účely tohoto rychlého startu vytvořili virtuální síť, můžete ji odstranit, pokud už se nepoužívá.