Używanie narzędzia Azure VM Image Builder dla maszyn wirtualnych z systemem Linux w celu uzyskania dostępu do istniejącej sieci wirtualnej platformy Azure
Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️
W tym artykule pokazano, jak za pomocą narzędzia Azure VM Image Builder utworzyć podstawowy, dostosowany obraz systemu Linux, który ma dostęp do istniejących zasobów w sieci wirtualnej. Utworzona maszyna wirtualna kompilacji jest wdrażana w nowej lub istniejącej sieci wirtualnej określonej w ramach subskrypcji. Jeśli używasz istniejącej sieci wirtualnej platformy Azure, narzędzie VM Image Builder nie wymaga łączności z siecią publiczną.
Wymagania wstępne
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Ustawianie zmiennych i uprawnień
W tym zadaniu wielokrotnie używasz niektórych informacji. Utwórz zmienne do przechowywania tych informacji.
# 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
Utwórz grupę zasobów.
az group create -n $imageResourceGroup -l $location
Konfigurowanie sieci
Jeśli nie masz istniejącej sieci wirtualnej, podsieci ani sieciowej grupy zabezpieczeń, użyj następującego skryptu, aby go utworzyć.
# 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.
Dodawanie reguły sieciowej grupy zabezpieczeń
Ta reguła umożliwia łączność z modułu równoważenia obciążenia narzędzia Image Builder maszyny wirtualnej do maszyny wirtualnej serwera proxy. Port 60001 jest przeznaczony dla systemu Linux, a port 60000 jest przeznaczony dla systemu Windows. Maszyna wirtualna serwera proxy łączy się z maszyną wirtualną kompilacji przy użyciu portu 22 dla systemu Linux lub portu 5986 dla systemu 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"
Wyłączanie zasad usługi prywatnej w podsieci
Oto, jak to zrobić:
az network vnet subnet update \
--name $subnetName \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--disable-private-link-service-network-policies true
Aby uzyskać więcej informacji, zobacz Opcje sieciowe narzędzia Image Builder maszyny wirtualnej platformy Azure.
Modyfikowanie przykładowego szablonu i tworzenie roli
Po skonfigurowaniu sieci można zmodyfikować przykładowy szablon i utworzyć rolę. Oto, jak to zrobić:
# 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
Ustawianie uprawnień w grupie zasobów
Narzędzie VM Image Builder używa tożsamości użytkownika udostępnionej do wstrzykiwania obrazu do galerii obliczeń platformy Azure. W tym przykładzie utworzysz definicję roli platformy Azure, która może dystrybuować obraz do galerii. Definicja roli jest następnie przypisywana do tożsamości użytkownika.
# 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
Zamiast udzielać konstruktora obrazów maszyny wirtualnej niższego stopnia szczegółowości i zwiększonego poziomu uprawnień, można utworzyć dwie role. Jedna rola daje konstruktorowi uprawnienia do tworzenia obrazu, a druga umożliwia łączenie maszyny wirtualnej kompilacji i modułu równoważenia obciążenia z siecią wirtualną.
# 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
Aby uzyskać więcej informacji, zobacz Konfigurowanie uprawnień narzędzia Image Builder maszyny wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure lub Konfigurowanie uprawnień konstruktora obrazów maszyny wirtualnej platformy Azure przy użyciu programu PowerShell.
Tworzenie obrazu
Prześlij konfigurację obrazu do narzędzia Image Builder maszyny wirtualnej.
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.)
Uruchom kompilację obrazu.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01 \
--action Run
# Wait approximately 15 mins
Utworzenie obrazu i zreplikowanie go do obu regionów może trochę potrwać. Poczekaj na zakończenie tej części przed przejściem do tworzenia maszyny wirtualnej.
Tworzenie maszyny wirtualnej
Utwórz maszynę wirtualną na podstawie wersji obrazu utworzonej przez narzędzie Vm Image Builder.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgVm0001 \
--admin-username aibuser \
--image $imageName \
--location $location \
--generate-ssh-keys
Użyj protokołu Secure Shell (SSH), aby uzyskać dostęp do maszyny wirtualnej.
ssh aibuser@<publicIpAddress>
Powinien zostać wyświetlony obraz dostosowany z komunikatem dnia po nawiązaniu połączenia SSH.
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Czyszczenie zasobów
Jeśli chcesz ponownie utworzyć wersję obrazu, aby utworzyć nową wersję tego samego obrazu, pomiń następne kroki i przejdź do tematu Używanie narzędzia Azure VM Image Builder, aby utworzyć inną wersję obrazu.
Poniższe polecenie usuwa utworzony obraz wraz ze wszystkimi innymi plikami zasobów. Przed usunięciem zasobów upewnij się, że zakończono wdrażanie.
Po usunięciu zasobów galerii należy usunąć wszystkie wersje obrazów, zanim będzie można usunąć definicję obrazu użytą do ich utworzenia. Aby usunąć galerię, musisz najpierw usunąć wszystkie definicje obrazów w galerii.
Usuń szablon konstruktora obrazów maszyny wirtualnej:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
Usuń przypisania uprawnień, role i tożsamość:
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
Usuń grupę zasobów:
az group delete -n $imageResourceGroup
Jeśli utworzono sieć wirtualną na potrzeby tego przewodnika Szybki start, możesz usunąć sieć wirtualną, jeśli nie jest już używana.