Share via


Meglévő Azure-beli virtuális hálózat elérése linuxos virtuális gépekhez készült Azure VM Image Builder használatával

A következőkre vonatkozik: ✔️ Linux rendszerű virtuális gépek rugalmas méretezési ✔️ csoportjai

Ez a cikk bemutatja, hogyan hozhat létre alapszintű, testre szabott Linux-rendszerképet, amely hozzáfér egy virtuális hálózat meglévő erőforrásaihoz az Azure VM Image Builder használatával. A létrehozott build virtuális gép (VM) az előfizetésben megadott új vagy meglévő virtuális hálózaton lesz üzembe helyezve. Meglévő Azure-beli virtuális hálózat használatakor a VM Image Builder nem igényel nyilvános hálózati kapcsolatot.

Előfeltételek

Változók és engedélyek beállítása

Ehhez a feladathoz néhány információt többször is használnia kell. Hozzon létre néhány változót az információk tárolásához.

# 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

Hozza létre az erőforráscsoportot.

az group create -n $imageResourceGroup -l $location

Hálózatkezelés beállítása

Ha nem rendelkezik meglévő virtuális hálózattal, alhálózattal vagy hálózati biztonsági csoporttal (NSG), az alábbi szkripttel hozzon létre egyet.


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

NSG-szabály hozzáadása

Ez a szabály engedélyezi a virtuális gép Image Builder-terheléselosztója és a proxy virtuális gép közötti kapcsolatot. A 60001-es port Linuxra, a 60000-es port pedig Windowsra. A proxy virtuális gép a linuxos 22-es vagy a Windows 5986-os portjával csatlakozik a build virtuális géphez.

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"

Privát szolgáltatási szabályzat letiltása az alhálózaton

Ezt a következőképpen teheti meg:

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

További információ: Azure VM Image Builder hálózatkezelési lehetőségek.

A példasablon módosítása és szerepkör létrehozása

A hálózatkezelés konfigurálása után módosíthatja a példasablont, és létrehozhat egy szerepkört. Ezt a következőképpen teheti meg:

# 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

Engedélyek beállítása az erőforráscsoporton

A VM Image Builder a megadott felhasználói identitással injektálja a rendszerképet az Azure Compute Gallerybe. Ebben a példában létrehoz egy Azure-beli szerepkördefiníciót, amely el tudja osztani a rendszerképet a katalógusban. A szerepkör-definíció ezután hozzá lesz rendelve a felhasználói identitáshoz.

# 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

Ahelyett, hogy alacsonyabb részletességet és magasabb szintű jogosultságot ad a VM Image Buildernek, két szerepkört is létrehozhat. Az egyik szerepkör engedélyeket ad a szerkesztőnek egy rendszerkép létrehozásához, a másik pedig lehetővé teszi a build virtuális gép és a terheléselosztó csatlakoztatását a virtuális hálózathoz.

# 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

További információ: Azure VM Image Builder-engedélyek konfigurálása az Azure CLI használatával vagy Azure VM Image Builder-engedélyek konfigurálása a PowerShell használatával.

A rendszerkép létrehozása

Küldje el a rendszerképkonfigurációt a VM Image Buildernek.

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

Indítsa el a rendszerkép összeállítását.

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

# Wait approximately 15 mins

A rendszerkép létrehozása és replikálása mindkét régióba eltarthat egy ideig. Várjon, amíg ez a rész befejeződik, mielőtt továbblépne a virtuális gép létrehozására.

Virtuális gép létrehozása

Hozzon létre egy virtuális gépet a VM Image Builder által létrehozott rendszerképverzióból.

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

A Secure Shell (SSH) használatával lépjen be a virtuális gépre.

ssh aibuser@<publicIpAddress>

Amint létrejön az SSH-kapcsolat, látnia kell, hogy a rendszerkép a Nap üzenetével lett testre szabva!

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

Az erőforrások eltávolítása

Ha újra szeretné használni a rendszerkép verzióját ugyanannak a rendszerképnek egy új verziójának létrehozásához, hagyja ki a következő lépéseket, és folytassa az Azure-beli virtuálisgép-rendszerkép-szerkesztővel egy másik rendszerképverzió létrehozásához.

Az alábbiakban a létrehozott rendszerképet és az összes többi erőforrásfájlt is törli. Az erőforrások törlése előtt győződjön meg arról, hogy befejezte az üzembe helyezést.

A katalógus erőforrásainak törlésekor törölnie kell az összes lemezképverziót, mielőtt törölheti a létrehozásukhoz használt képdefiníciót. Katalógus törléséhez először törölnie kell a katalógus összes képdefinícióját.

Törölje a VM Image Builder-sablont:

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

Engedély-hozzárendelések, szerepkörök és identitás törlése:

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

Törölje az erőforráscsoportot:

az group delete -n $imageResourceGroup

Ha létrehozott egy virtuális hálózatot ehhez a rövid útmutatóhoz, törölheti a virtuális hálózatot, ha már nincs használatban.

Következő lépések

Azure Compute-katalógusok