问题描述
我需要从给定的 IpPublicPrefix 更新/设置 VMScaleset 实例的公共 IP 地址(让客户将这些 IP 列入白名单)。 我尝试使用两个实例(带有虚拟网络、子网、网络接口)和 PublicIpPrefix 创建 VMScaleset,但 Azure 文档中建议的代码根本不起作用。 https://docs.microsoft.com/en-us/powershell/module/azurerm.network/set-azurermnetworkinterface?view=azurermps-6.13.0
第一个问题:下面的代码没有返回我上面创建的网络接口。这是 Azure API 中的错误吗?
Get-AzureRmNetworkInterface -ResourceGroupName "ResourceGroup1" -Name "NetworkInterface1"
它只返回为 VM 创建的网络接口列表(不是从 VMSS 创建的),不包括在 VMSS 创建期间创建的网络接口。
第二个问题:根据这里和那里的一些评论,VMSS 的 NetworkInterface 不会显示在 Azure 门户(搜索网络接口)或 AzureRM API 中,那么我们如何知道和更新 VMSS 或其实例的 NIC?
>我一直在使用 AzureRm 模块 6.13.1
解决方法
对于第一个问题,规模集实例的公网IP不是Azure门户中单独的资源,我们无法使用Get-AzureRmNetworkInterface
获取网络接口信息。
对于第二个问题,您可以通过 ARM 模板为每个虚拟机创建一个具有公共 IP 的规模集。您可以将 publicIpAddressConfiguration JSON 属性添加到规模集 ipConfigurations 部分。
请注意,IpPublicPrefix 需要标准 SKU 负载平衡器和公共 IP 地址。这是一个工作示例。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#","contentVersion": "1.0.0.0","parameters": {
"vmSku": {
"type": "string","defaultValue": "Standard_A1_v2","metadata": {
"description": "Size of VMs in the VM Scale Set."
}
},"windowsOSVersion": {
"type": "string","defaultValue": "2019-Datacenter","allowedValues": [
"2008-R2-SP1","2012-Datacenter","2012-R2-Datacenter","2016-Datacenter","2019-Datacenter"
],"metadata": {
"description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version. Allowed values: 2008-R2-SP1,2012-Datacenter,2012-R2-Datacenter & 2016-Datacenter,2019-Datacenter."
}
},"vmssName": {
"type": "string","minLength": 3,"maxLength": 61,"metadata": {
"description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources,and resource-specific information is appended."
}
},"instanceCount": {
"type": "int","defaultValue": 3,"minValue": 1,"maxValue": 100,"metadata": {
"description": "Number of VM instances (100 or less)."
}
},"singlePlacementGroup": {
"type": "bool","defaultValue": true,"metadata": {
"description": "When true this limits the scale set to a single placement group,of max size 100 virtual machines. NOTE: If singlePlacementGroup is true,it may be modified to false. However,if singlePlacementGroup is false,it may not be modified to true."
}
},"adminUsername": {
"type": "string","defaultValue": "vmssadmin","metadata": {
"description": "Admin username on all VMs."
}
},"adminPassword": {
"type": "securestring","metadata": {
"description": "Admin password on all VMs."
}
},"location": {
"type": "string","defaultValue": "[resourceGroup().location]","metadata": {
"description": "Location for all resources."
}
},"platformFaultDomainCount": {
"type": "int","defaultValue": 1,"metadata": {
"description": "Fault Domain count for each placement group."
}
},"publicIPPrefixes_pubprefix_name": {
"defaultValue": "vmsspublicprefix","type": "string"
}
},"variables": {
"namingInfix": "[toLower(substring(concat(parameters('vmssName'),uniqueString(resourceGroup().id)),9))]","longNamingInfix": "[toLower(parameters('vmssName'))]","addressPrefix": "10.0.0.0/16","subnetPrefix": "10.0.0.0/24","virtualNetworkName": "[concat(variables('namingInfix'),'vnet')]","publicIPAddressName": "[concat(variables('namingInfix'),'pip')]","subnetName": "[concat(variables('namingInfix'),'subnet')]","loadBalancerName": "[concat(variables('namingInfix'),'lb')]","publicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]","lbProbeID": "[resourceId('Microsoft.Network/loadBalancers/probes',variables('loadBalancerName'),'tcpProbe')]","natPoolName": "[concat(variables('namingInfix'),'natpool')]","bePoolName": "[concat(variables('namingInfix'),'bepool')]","lbPoolID": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools',variables('bePoolName'))]","natStartPort": 50000,"natEndPort": 50119,"natBackendPort": 3389,"nicName": "[concat(variables('namingInfix'),'nic')]","ipConfigName": "[concat(variables('namingInfix'),'ipconfig')]","frontEndIPConfigID": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations','loadBalancerFrontEnd')]","osType": {
"publisher": "MicrosoftWindowsServer","offer": "WindowsServer","sku": "[parameters('windowsOSVersion')]","version": "latest"
},"imageReference": "[variables('osType')]"
},"resources": [
{
"type": "Microsoft.Network/loadBalancers","apiVersion": "2020-06-01","name": "[variables('loadBalancerName')]","location": "[parameters('location')]","dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
],"sku": {
"name": "Standard"
},"properties": {
"frontendIPConfigurations": [
{
"name": "LoadBalancerFrontEnd","properties": {
"publicIPAddress": {
"id": "[variables('publicIPAddressID')]","name": "Standard"
}
}
}
],"backendAddressPools": [
{
"name": "[variables('bePoolName')]"
}
],"inboundNatPools": [
{
"name": "[variables('natPoolName')]","properties": {
"frontendIPConfiguration": {
"id": "[variables('frontEndIPConfigID')]"
},"protocol": "Tcp","frontendPortRangeStart": "[variables('natStartPort')]","frontendPortRangeEnd": "[variables('natEndPort')]","backendPort": "[variables('natBackendPort')]"
}
}
],"loadBalancingRules": [
{
"name": "LBRule","backendAddressPool": {
"id": "[variables('lbPoolID')]"
},"frontendPort": 80,"backendPort": 80,"enableFloatingIP": false,"idleTimeoutInMinutes": 5,"probe": {
"id": "[variables('lbProbeID')]"
}
}
}
],"probes": [
{
"name": "tcpProbe","properties": {
"protocol": "Tcp","port": 80,"intervalInSeconds": 5,"numberOfProbes": 2
}
}
]
}
},{
"type": "Microsoft.Network/publicIPPrefixes","apiVersion": "2020-11-01","name": "[parameters('publicIPPrefixes_pubprefix_name')]","sku": {
"name": "Standard","tier": "Regional"
},"properties": {
"prefixLength": 28,"publicIPAddressVersion": "IPv4","ipTags": []
}
},{
"type": "Microsoft.Compute/virtualMachineScaleSets","name": "[variables('namingInfix')]","sku": {
"name": "[parameters('vmSku')]","tier": "Standard","capacity": "[parameters('instanceCount')]"
},"dependsOn": [
"[resourceId('Microsoft.Network/loadBalancers',variables('loadBalancerName'))]","[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]","[resourceId('Microsoft.Network/publicIPPrefixes',parameters('publicIPPrefixes_pubprefix_name'))]"
],"properties": {
"overprovision": true,"upgradePolicy": {
"mode": "Automatic"
},"singlePlacementGroup": "[parameters('singlePlacementGroup')]","platformFaultDomainCount": "[parameters('platformFaultDomainCount')]","virtualMachineProfile": {
"storageProfile": {
"osDisk": {
"caching": "ReadWrite","createOption": "FromImage"
},"imageReference": "[variables('imageReference')]"
},"osProfile": {
"computerNamePrefix": "[variables('namingInfix')]","adminUsername": "[parameters('adminUsername')]","adminPassword": "[parameters('adminPassword')]"
},"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "[variables('nicName')]","properties": {
"primary": true,"ipConfigurations": [
{
"name": "[variables('ipConfigName')]","properties": {
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets',variables('virtualNetworkName'),variables('subnetName'))]"
},"loadBalancerBackendAddressPools": [
{
"id": "[variables('lbPoolID')]"
}
],"loadBalancerInboundNatPools": [
{
"id": "[resourceId('Microsoft.Network/loadBalancers/inboundNatPools',variables('natPoolName'))]"
}
],"publicipaddressconfiguration": {
"name": "pub1","properties": {
"idleTimeoutInMinutes": 15,"publicIPPrefix":{
"id": "[resourceId('Microsoft.Network/publicIPPrefixes',parameters('publicIPPrefixes_pubprefix_name'))]"
}
}
}
}
}
]
}
}
]
}
}
}
},{
"type": "Microsoft.Network/publicIPAddresses","name": "[variables('publicIPAddressName')]","sku": {
"name": "Standard"
},"properties": {
"publicIPAllocationMethod": "Static","dnsSettings": {
"domainNameLabel": "[variables('longNamingInfix')]"
}
}
},{
"type": "Microsoft.Network/virtualNetworks","name": "[variables('virtualNetworkName')]","properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('addressPrefix')]"
]
},"subnets": [
{
"name": "[variables('subnetName')]","properties": {
"addressPrefix": "[variables('subnetPrefix')]"
}
}
]
}
},{
"type": "Microsoft.Insights/autoscaleSettings","apiVersion": "2015-04-01","name": "autoscalehost","dependsOn": [
"[resourceId('Microsoft.Compute/virtualMachineScaleSets/',variables('namingInfix'))]"
],"properties": {
"name": "autoscalehost","targetResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets',variables('namingInfix'))]","enabled": true,"profiles": [
{
"name": "Profile1","capacity": {
"minimum": "1","maximum": "10","default": "1"
},"rules": [
{
"metricTrigger": {
"metricName": "Percentage CPU","metricResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets',"timeGrain": "PT1M","statistic": "Average","timeWindow": "PT5M","timeAggregation": "Average","operator": "GreaterThan","threshold": 50
},"scaleAction": {
"direction": "Increase","type": "ChangeCount","value": "1","cooldown": "PT5M"
}
},{
"metricTrigger": {
"metricName": "Percentage CPU","operator": "LessThan","threshold": 30
},"scaleAction": {
"direction": "Decrease","cooldown": "PT5M"
}
}
]
}
]
}
}
]
}
此外,您可以使用 the REST API 获取虚拟机规模集中实例的指定公共 IP 地址。
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines/{virtualmachineIndex}/networkInterfaces/{networkInterfaceName}/ipconfigurations/{ipConfigurationName}/publicipaddresses/{publicIpAddressName}?api-version=2018-10-01