Sdílet prostřednictvím


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

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

Další kroky

Galerie služby Azure Compute