Bagikan melalui


Menggunakan Azure Image Builder untuk VM Linux untuk mengakses jaringan virtual Azure yang sudah ada

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

Artikel ini menunjukkan cara menggunakan Azure VM Image Builder untuk membuat gambar Linux dasar yang disesuaikan yang memiliki akses ke sumber daya yang ada di jaringan virtual. Mesin virtual (VM) rakitan yang Anda buat disebarkan ke jaringan virtual baru atau yang sudah ada yang Anda tentukan dalam langganan Anda. Saat Anda menggunakan jaringan virtual Azure yang ada, VM Image Builder tidak memerlukan konektivitas jaringan publik.

Prasyarat

Mengatur variabel dan izin

Untuk tugas ini, Anda menggunakan beberapa informasi berulang kali. Buat beberapa variabel untuk menyimpan informasi tersebut.

# 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

Membuat grup sumber daya.

az group create -n $imageResourceGroup -l $location

Mengonfigurasi jaringan

Jika Anda tidak memiliki jaringan virtual, subnet, atau grup keamanan jaringan (NSG) yang sudah ada, gunakan skrip berikut untuk membuatnya.


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

Menambahkan aturan NSG

Aturan ini memungkinkan konektivitas dari VM Image Builder load balancer ke VM proksi. Port 60001 adalah untuk Linux dan port 60000 adalah untuk Windows. VM proksi tersambung ke VM build menggunakan port 22 untuk LINUX atau port 5986 untuk 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"

Menonaktifkan Kebijakan Layanan Privat pada subnet

Berikut caranya:

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

Untuk informasi selengkapnya, lihat Pilihan jaringan Azure VM Image Builder.

Mengubah templat contoh dan membuat peran

Setelah mengonfigurasi jaringan, Anda dapat memodifikasi templat contoh dan membuat peran. Berikut caranya:

# 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

Mengatur izin pada grup sumber daya

VM Image Builder menggunakan identitas pengguna yang disediakan untuk memasukkan gambar ke dalam Azure Compute Gallery. Pada contoh ini, Anda membuat definisi peran Azure yang bisa mendistribusikan gambar ke galeri. Definisi peran kemudian akan ditetapkan ke identitas pengguna.

# 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

Alih-alih memberikan granularitas VM Image Builder yang lebih rendah dan peningkatan hak istimewa, Anda dapat membuat dua peran. Satu peran memberi izin penyusun untuk membuat gambar, yang lain memungkinkannya untuk menyambungkan VM build dan load balancer ke jaringan virtual Anda.

# 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

Untuk informasi lebih lanjut, lihat Konfigurasi izin Azure VM Image Builder dengan menggunakan Azure CLI atau Konfigurasi izin Azure VM Image Builder dengan menggunakan PowerShell.

Membuat gambar

Kirim konfigurasi gambar ke layanan 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.)

Mulai build gambar.

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

# Wait approximately 15 mins

Perlu waktu beberapa saat untuk membuat gambar dan mereplikasinya ke kedua wilayah. Tunggu hingga bagian ini selesai sebelum melanjutkannya ke pembuatan VM.

Membuat VM

Buat VM dari versi gambar yang dibuat oleh Azure VM Image Builder.

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

Gunakan Secure Shell (SSH) untuk masuk ke VM.

ssh aibuser@<publicIpAddress>

Anda akan melihat gambar itu disesuaikan dengan Pesan Hari Ini segera setelah koneksi SSH Anda dibuat!

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

Membersihkan sumber daya

Jika Anda ingin menggunakan kembali versi gambar untuk membuat versi baru dari gambar yang sama, lewati langkah-langkah berikutnya dan lanjutkan menggunakan Azure VM Image Builder untuk membuat versi gambar lain.

Berikut ini menghapus gambar yang dibuat, bersama dengan semua file sumber daya lainnya. Pastikan Anda sudah selesai dengan penyebaran ini sebelum menghapus sumber daya.

Saat menghapus sumber daya galeri, Anda perlu menghapus semua versi gambar sebelum Anda dapat menghapus definisi gambar yang digunakan untuk membuatnya. Untuk menghapus galeri, Anda harus terlebih dahulu menghapus semua definisi gambar di galeri.

Menghapus templat VM Image Builder:

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

Menghapus penetapan izin, peran, dan identitas:

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

Menghapus grup sumber daya:

az group delete -n $imageResourceGroup

Jika Anda membuat jaringan virtual untuk mulai cepat ini, Anda dapat menghapus jaringan virtual jika tidak lagi digunakan.

Langkah berikutnya

Azure Compute Galleries