Rövid útmutató: Nyilvános terheléselosztó létrehozása virtuális gépek ARM-sablonnal történő terheléselosztásához
Ez a rövid útmutató bemutatja, hogyan helyezhet üzembe egy standard terheléselosztót a virtuális gépek terheléselosztásához. A terheléselosztó több virtuális gép között osztja el a forgalmat egy háttérkészletben. A sablon emellett létrehoz egy virtuális hálózatot, hálózati adaptereket, egy NAT-átjárót és egy Azure Bastion-példányt.
Az ARM-sablon használata kevesebb lépést tesz meg más üzembehelyezési módszerekkel összehasonlítva.
Az Azure Resource Manager-sablon egy JavaScript Object Notation (JSON) fájl, amely meghatározza a projekt infrastruktúráját és konfigurációját. A sablon deklaratív szintaxist használ. Az üzembe helyezés létrehozásához szükséges programozási parancsok sorozatának megírása nélkül írhatja le a tervezett üzembe helyezést.
Ha a környezet megfelel az előfeltételeknek, és már ismeri az ARM-sablonokat, kattintson az Üzembe helyezés az Azure-ban gombra. A sablon az Azure Portalon fog megnyílni.
Előfeltételek
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
A sablon áttekintése
Az ebben a gyorsútmutatóban használt sablon az Azure-gyorssablonok közül származik.
A terheléselosztónak és a nyilvános IP-termékváltozatnak egyeznie kell. Standard terheléselosztó létrehozásakor létre kell hoznia egy új szabványos nyilvános IP-címet is, amely a standard terheléselosztó előtérjeként van konfigurálva. Ha alapszintű terheléselosztót szeretne létrehozni, használja ezt a sablont. A Microsoft azt javasolja, hogy az éles számítási feladatokhoz standard termékváltozatot használjunk.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.26.54.24096",
"templateHash": "14680538243429534307"
}
},
"parameters": {
"projectName": {
"type": "string",
"metadata": {
"description": "Specifies a project name that is used for generating resource names."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specifies the location for all of the resources created by this template."
}
},
"adminUsername": {
"type": "string",
"metadata": {
"description": "Specifies the virtual machine administrator username."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Specifies the virtual machine administrator password."
}
},
"vmSize": {
"type": "string",
"defaultValue": "Standard_D2s_v3",
"metadata": {
"description": "Size of the virtual machine"
}
},
"OSVersion": {
"type": "string",
"defaultValue": "2022-datacenter-azure-edition",
"allowedValues": [
"2016-datacenter-gensecond",
"2016-datacenter-server-core-g2",
"2016-datacenter-server-core-smalldisk-g2",
"2016-datacenter-smalldisk-g2",
"2016-datacenter-with-containers-g2",
"2016-datacenter-zhcn-g2",
"2019-datacenter-core-g2",
"2019-datacenter-core-smalldisk-g2",
"2019-datacenter-core-with-containers-g2",
"2019-datacenter-core-with-containers-smalldisk-g2",
"2019-datacenter-gensecond",
"2019-datacenter-smalldisk-g2",
"2019-datacenter-with-containers-g2",
"2019-datacenter-with-containers-smalldisk-g2",
"2019-datacenter-zhcn-g2",
"2022-datacenter-azure-edition",
"2022-datacenter-azure-edition-core",
"2022-datacenter-azure-edition-core-smalldisk",
"2022-datacenter-azure-edition-smalldisk",
"2022-datacenter-core-g2",
"2022-datacenter-core-smalldisk-g2",
"2022-datacenter-g2",
"2022-datacenter-smalldisk-g2"
],
"metadata": {
"description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version."
}
},
"imageSku": {
"type": "string",
"defaultValue": "vs-2019-ent-latest-win11-n-gen2",
"allowedValues": [
"vs-2019-ent-latest-win11-n-gen2",
"vs-2019-pro-general-win11-m365-gen2",
"vs-2019-comm-latest-win11-n-gen2",
"vs-2019-ent-general-win10-m365-gen2",
"vs-2019-ent-general-win11-m365-gen2",
"vs-2019-pro-general-win10-m365-gen2"
],
"metadata": {
"description": "Linux Sku"
}
},
"securityType": {
"type": "string",
"defaultValue": "TrustedLaunch",
"allowedValues": [
"Standard",
"TrustedLaunch"
],
"metadata": {
"description": "Security Type of the Virtual Machine."
}
}
},
"variables": {
"securityProfileJson": {
"uefiSettings": {
"secureBootEnabled": true,
"vTpmEnabled": true
},
"securityType": "[parameters('securityType')]"
},
"lbName": "[format('{0}-lb', parameters('projectName'))]",
"lbSkuName": "Standard",
"lbPublicIpAddressName": "[format('{0}-lbPublicIP', parameters('projectName'))]",
"lbFrontEndName": "LoadBalancerFrontEnd",
"lbBackendPoolName": "LoadBalancerBackEndPool",
"lbProbeName": "loadBalancerHealthProbe",
"nsgName": "[format('{0}-nsg', parameters('projectName'))]",
"vNetName": "[format('{0}-vnet', parameters('projectName'))]",
"vNetAddressPrefix": "10.0.0.0/16",
"vNetSubnetName": "BackendSubnet",
"vNetSubnetAddressPrefix": "10.0.0.0/24",
"bastionName": "[format('{0}-bastion', parameters('projectName'))]",
"bastionSubnetName": "AzureBastionSubnet",
"vNetBastionSubnetAddressPrefix": "10.0.1.0/24",
"bastionPublicIPAddressName": "[format('{0}-bastionPublicIP', parameters('projectName'))]",
"vmStorageAccountType": "Premium_LRS",
"extensionName": "GuestAttestation",
"extensionPublisher": "Microsoft.Azure.Security.WindowsAttestation",
"extensionVersion": "1.0",
"maaTenantName": "GuestAttestation",
"maaEndpoint": "[substring('emptyString', 0, 0)]",
"ascReportingEndpoint": "[substring('emptystring', 0, 0)]",
"natGatewayName": "[format('{0}-natgateway', parameters('projectName'))]",
"natGatewayPublicIPAddressName": "[format('{0}-natPublicIP', parameters('projectName'))]"
},
"resources": [
{
"copy": {
"name": "project_vm_1_networkInterface",
"count": "[length(range(0, 3))]"
},
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2021-08-01",
"name": "[format('{0}-vm{1}-networkInterface', parameters('projectName'), add(range(0, 3)[copyIndex()], 1))]",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vNetName'), variables('vNetSubnetName'))]"
},
"loadBalancerBackendAddressPools": [
{
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbName'), variables('lbBackendPoolName'))]"
}
]
}
}
],
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/loadBalancers', variables('lbName'))]",
"[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vNetName'), variables('vNetSubnetName'))]"
]
},
{
"copy": {
"name": "project_vm_1_InstallWebServer",
"count": "[length(range(0, 3))]"
},
"type": "Microsoft.Compute/virtualMachines/extensions",
"apiVersion": "2021-11-01",
"name": "[format('{0}-vm{1}/InstallWebServer', parameters('projectName'), add(range(0, 3)[copyIndex()], 1))]",
"location": "[parameters('location')]",
"properties": {
"publisher": "Microsoft.Compute",
"type": "CustomScriptExtension",
"typeHandlerVersion": "1.10",
"autoUpgradeMinorVersion": true,
"settings": {
"commandToExecute": "powershell.exe Install-WindowsFeature -name Web-Server -IncludeManagementTools && powershell.exe remove-item 'C:\\inetpub\\wwwroot\\iisstart.htm' && powershell.exe Add-Content -Path 'C:\\inetpub\\wwwroot\\iisstart.htm' -Value $('Hello World from ' + $env:computername)"
}
},
"dependsOn": [
"project_vm_1"
]
},
{
"copy": {
"name": "project_vm_1",
"count": "[length(range(1, 3))]"
},
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2021-11-01",
"name": "[format('{0}-vm{1}', parameters('projectName'), range(1, 3)[copyIndex()])]",
"location": "[parameters('location')]",
"zones": [
"[string(range(1, 3)[copyIndex()])]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSize')]"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "[parameters('OSVersion')]",
"version": "latest"
},
"osDisk": {
"createOption": "FromImage",
"managedDisk": {
"storageAccountType": "[variables('vmStorageAccountType')]"
}
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', format('{0}-vm{1}-networkInterface', parameters('projectName'), range(1, 3)[copyIndex()]))]"
}
]
},
"osProfile": {
"computerName": "[format('{0}-vm{1}', parameters('projectName'), range(1, 3)[copyIndex()])]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"windowsConfiguration": {
"enableAutomaticUpdates": true,
"provisionVMAgent": true
}
},
"securityProfile": "[if(equals(parameters('securityType'), 'TrustedLaunch'), variables('securityProfileJson'), null())]"
},
"dependsOn": [
"project_vm_1_networkInterface"
]
},
{
"copy": {
"name": "projectName_vm_1_3_GuestAttestation",
"count": "[length(range(1, 3))]"
},
"condition": "[and(equals(parameters('securityType'), 'TrustedLaunch'), and(equals(variables('securityProfileJson').uefiSettings.secureBootEnabled, true()), equals(variables('securityProfileJson').uefiSettings.vTpmEnabled, true())))]",
"type": "Microsoft.Compute/virtualMachines/extensions",
"apiVersion": "2022-03-01",
"name": "[format('{0}-vm{1}/GuestAttestation', parameters('projectName'), range(1, 3)[copyIndex()])]",
"location": "[parameters('location')]",
"properties": {
"publisher": "[variables('extensionPublisher')]",
"type": "[variables('extensionName')]",
"typeHandlerVersion": "[variables('extensionVersion')]",
"autoUpgradeMinorVersion": true,
"enableAutomaticUpgrade": true,
"settings": {
"AttestationConfig": {
"MaaSettings": {
"maaEndpoint": "[variables('maaEndpoint')]",
"maaTenantName": "[variables('maaTenantName')]"
},
"AscSettings": {
"ascReportingEndpoint": "[variables('ascReportingEndpoint')]",
"ascReportingFrequency": ""
},
"useCustomToken": "false",
"disableAlerts": "false"
}
}
},
"dependsOn": [
"project_vm_1"
]
},
{
"type": "Microsoft.Network/natGateways",
"apiVersion": "2021-05-01",
"name": "[variables('natGatewayName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard"
},
"properties": {
"idleTimeoutInMinutes": 4,
"publicIpAddresses": [
{
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('natGatewayPublicIPAddressName'))]"
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('natGatewayPublicIPAddressName'))]"
]
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2021-05-01",
"name": "[variables('natGatewayPublicIPAddressName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard"
},
"properties": {
"publicIPAddressVersion": "IPv4",
"publicIPAllocationMethod": "Static",
"idleTimeoutInMinutes": 4
}
},
{
"type": "Microsoft.Network/virtualNetworks/subnets",
"apiVersion": "2021-08-01",
"name": "[format('{0}/{1}', variables('vNetName'), variables('bastionSubnetName'))]",
"properties": {
"addressPrefix": "[variables('vNetBastionSubnetAddressPrefix')]"
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vNetName'), variables('vNetSubnetName'))]"
]
},
{
"type": "Microsoft.Network/virtualNetworks/subnets",
"apiVersion": "2021-08-01",
"name": "[format('{0}/{1}', variables('vNetName'), variables('vNetSubnetName'))]",
"properties": {
"addressPrefix": "[variables('vNetSubnetAddressPrefix')]",
"natGateway": {
"id": "[resourceId('Microsoft.Network/natGateways', variables('natGatewayName'))]"
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/natGateways', variables('natGatewayName'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]"
]
},
{
"type": "Microsoft.Network/bastionHosts",
"apiVersion": "2021-08-01",
"name": "[variables('bastionName')]",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "IpConf",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('bastionPublicIPAddressName'))]"
},
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vNetName'), variables('bastionSubnetName'))]"
}
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('bastionPublicIPAddressName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vNetName'), variables('bastionSubnetName'))]"
]
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2021-08-01",
"name": "[variables('bastionPublicIPAddressName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('lbSkuName')]"
},
"properties": {
"publicIPAddressVersion": "IPv4",
"publicIPAllocationMethod": "Static"
}
},
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2021-08-01",
"name": "[variables('lbName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('lbSkuName')]"
},
"properties": {
"frontendIPConfigurations": [
{
"name": "[variables('lbFrontEndName')]",
"properties": {
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPublicIpAddressName'))]"
}
}
}
],
"backendAddressPools": [
{
"name": "[variables('lbBackendPoolName')]"
}
],
"loadBalancingRules": [
{
"name": "myHTTPRule",
"properties": {
"frontendIPConfiguration": {
"id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('lbName'), variables('lbFrontEndName'))]"
},
"backendAddressPool": {
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbName'), variables('lbBackendPoolName'))]"
},
"frontendPort": 80,
"backendPort": 80,
"enableFloatingIP": false,
"idleTimeoutInMinutes": 15,
"protocol": "Tcp",
"enableTcpReset": true,
"loadDistribution": "Default",
"disableOutboundSnat": true,
"probe": {
"id": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('lbName'), variables('lbProbeName'))]"
}
}
}
],
"probes": [
{
"name": "[variables('lbProbeName')]",
"properties": {
"protocol": "Tcp",
"port": 80,
"intervalInSeconds": 5,
"numberOfProbes": 2
}
}
],
"outboundRules": []
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('lbPublicIpAddressName'))]"
]
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2021-08-01",
"name": "[variables('lbPublicIpAddressName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('lbSkuName')]"
},
"properties": {
"publicIPAddressVersion": "IPv4",
"publicIPAllocationMethod": "Static"
}
},
{
"type": "Microsoft.Network/networkSecurityGroups",
"apiVersion": "2021-08-01",
"name": "[variables('nsgName')]",
"location": "[parameters('location')]",
"properties": {
"securityRules": [
{
"name": "AllowHTTPInbound",
"properties": {
"protocol": "*",
"sourcePortRange": "*",
"destinationPortRange": "80",
"sourceAddressPrefix": "Internet",
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 100,
"direction": "Inbound"
}
}
]
}
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-08-01",
"name": "[variables('vNetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('vNetAddressPrefix')]"
]
}
}
}
],
"outputs": {
"location": {
"type": "string",
"value": "[parameters('location')]"
},
"name": {
"type": "string",
"value": "[variables('lbName')]"
},
"resourceGroupName": {
"type": "string",
"value": "[resourceGroup().name]"
},
"resourceId": {
"type": "string",
"value": "[resourceId('Microsoft.Network/loadBalancers', variables('lbName'))]"
}
}
}
A sablonban több Azure-erőforrás is definiálva van:
- Microsoft.Network/loadBalancers
- Microsoft.Network/publicIPAddresses: a terheléselosztóhoz, a megerősített gazdagéphez és a NAT-átjáróhoz.
- Microsoft.Network/bastionHosts
- Microsoft.Network/networkSecurityGroups
- Microsoft.Network/virtualNetworks
- Microsoft.Compute/virtualMachines (3).
- Microsoft.Network/networkInterfaces (3).
- Microsoft.Compute/virtualMachine/extensions (3): az Internet Information Server (IIS) és a weblapok konfigurálására használható.
- Microsoft.Network/natGateways: a NAT-átjáróhoz.
Fontos
Az óránkénti díjszabás a Bastion üzembe helyezésének pillanatától kezdődik, a kimenő adathasználattól függetlenül. További információ: Díjszabás és termékváltozatok. Ha a Bastiont egy oktatóanyag vagy teszt részeként helyezi üzembe, javasoljuk, hogy a használat befejezése után törölje ezt az erőforrást.
Az Azure Load Balancerhez kapcsolódó további sablonokért tekintse meg az Azure rövid útmutatósablonjait.
A sablon üzembe helyezése
Válassza a Következő kódblokk kipróbálása lehetőséget az Azure Cloud Shell megnyitásához, majd kövesse az utasításokat az Azure-ba való bejelentkezéshez.
$projectName = Read-Host -Prompt "Enter a project name with 12 or less letters or numbers that is used to generate Azure resource names" $location = Read-Host -Prompt "Enter the location (i.e. centralus)" $adminUserName = Read-Host -Prompt "Enter the virtual machine administrator account name" $adminPassword = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString $resourceGroupName = "${projectName}rg" $templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.network/load-balancer-standard-create/azuredeploy.json" New-AzResourceGroup -Name $resourceGroupName -Location $location New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -Name $projectName -location $location -adminUsername $adminUsername -adminPassword $adminPassword Write-Host "Press [ENTER] to continue."
Várjon, amíg megjelenik a parancssor a konzolról.
Válassza a Másolás lehetőséget az előző kódblokkból a PowerShell-szkript másolásához.
Kattintson a jobb gombbal a rendszerhéj-konzol paneljére, majd válassza a Beillesztés parancsot.
Adja meg az értékeket.
A sablon üzembe helyezése három rendelkezésre állási zónát hoz létre. A rendelkezésre állási zónák csak bizonyos régiókban támogatottak. Használja az egyik támogatott régiót. Ha nem biztos benne, írja be a centralus értéket.
Az erőforráscsoport neve a hozzáfűzett projektnév
rg
. A következő szakaszban szüksége lesz az erőforráscsoport nevére.
A sablon üzembe helyezése körülbelül 10 percet vesz igénybe. Ha elkészült, a kimenet a következőhöz hasonló:
Az Azure PowerShell a sablon üzembe helyezésére szolgál. Használhatja az Azure Portalt, az Azure CLI-t és a REST API-t is. Az egyéb üzembehelyezési módszerekről a Sablonok üzembe helyezése című témakörben olvashat.
Üzembe helyezett erőforrások áttekintése
Jelentkezzen be az Azure Portalra.
Válassza ki az Erőforráscsoportokat a bal oldali panelen.
Válassza ki az előző szakaszban létrehozott erőforráscsoportot. Az alapértelmezett erőforráscsoportnév az -rg hozzáfűzésű projektnév.
Válassza ki a terheléselosztót. Az alapértelmezett neve a projekt neve a -lb hozzáfűzéssel.
Másolja csak a nyilvános IP-cím IP-címének egy részét, majd illessze be a böngésző címsorába.
A böngésző megjeleníti az Internet Information Services (IIS) webkiszolgáló alapértelmezett lapját.
Ha látni szeretné, hogy a terheléselosztó mindhárom virtuális gépen elosztja a forgalmat, kényszerítheti a webböngésző frissítését az ügyfélszámítógépről.
Az erőforrások eltávolítása
Ha már nincs rájuk szüksége, törölje a következőt:
- Erőforráscsoport
- Terheléselosztóval
- Kapcsolódó erőforrások
Lépjen az Azure Portalra, válassza ki a terheléselosztót tartalmazó erőforráscsoportot, majd válassza az Erőforráscsoport törlése lehetőséget.
Következő lépések
Ebben a rövid útmutatóban a következőket hajtja végre:
- Létrehozott egy virtuális hálózatot a terheléselosztóhoz és a virtuális gépekhez.
- Létrehozott egy Azure Bastion-gazdagépet a felügyelethez.
- Létrehozott egy standard terheléselosztót, és virtuális gépeket csatolt hozzá.
- Konfigurálta a terheléselosztó forgalmi szabályát és az állapotmintát.
- Tesztelte a terheléselosztót.
További információkért tekintse meg az Azure Load Balancer oktatóanyagait.