【问题标题】:Reserved IP's for Azure Resource Manager based Virtual machines为基于 Azure 资源管理器的虚拟机保留的 IP
【发布时间】:2016-08-05 23:59:40
【问题描述】:

问题是双重的。首先,将保留 IP 地址作为公共 IP 分配给基于资源管理器的虚拟机的方法是什么。它是否只涉及在模板文件中将 IP 分配方法设置为静态(然后将其分配给 NIC,因此当然是 VM)还是有其他方法可以做到这一点,我在互联网上阅读了有关负载平衡器的信息,但我不知道如何要使用模板文件使用它们,请参考任何链接。 其次,是否存在任何 api 或 .net sdk 来处理 Azure 资源管理模型中的保留 IP(例如创建、关联、解除关联方法)。我找到了 Azure 服务管理模型 (https://msdn.microsoft.com/library/azure/dn722420.aspx) 的 api,但我没有找到 Azure 资源管理模型的 API。 谢谢

【问题讨论】:

    标签: azure azure-virtual-machine azure-resource-manager azure-sdk-.net azure-virtual-network


    【解决方案1】:

    保留的 IP 地址仅供经典部署模型使用,这部分功能已集成到公共 IP 地址中。静态公共 IP 地址的行为与保留 IP 地址完全相同。无需也不可能将经典保留 IP 地址分配给 ARM 部署的 VM。将静态公共 IP 分配给负载均衡器与将一个静态公共 IP 分配给 NIC 完全相同。

    Microsoft 确实有用于经典保留 IP 地址的 ARM REST API,但我找不到任何文档。所以,我只能在这里稍微描述一下。

    获取保留的 IP 地址。

    GET https://management.azure.com/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ClassicNetwork/ReservedIps/<reserved IP address name>?api-version=2015-12-01
    

    Headers:授权,与其他 ARM REST API 相同。

    响应正文:

    {
        "properties": {
            "ipAddress": "<ip address>",
            "status": "Created",
            "provisioningState": "Succeeded",
            "inUse": false
        },
        "id": "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ClassicNetwork/ReservedIps/<reserved ip address name>",
        "name": "<reserved ip address name>",
        "type": "Microsoft.ClassicNetwork/ReservedIps",
        "location": "eastasia"
    }
    



    创建一个保留的 IP 地址。

    PUT https://management.azure.com/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ClassicNetwork/ReservedIps/<reserved IP address name>?api-version=2015-12-01
    

    Headers:授权,与其他 ARM REST API 相同。内容类型,“应用程序/json”

    请求正文:

    {
        "properties": {
        },
        "id": "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ClassicNetwork/ReservedIps/<reserved ip address name>",
        "name": "<reserved ip address name>",
        "type": "Microsoft.ClassicNetwork/ReservedIps",
        "location": "eastasia"
    }
    



    删除保留的 IP 地址。

    DELETE https://management.azure.com/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ClassicNetwork/ReservedIps/<reserved IP address name>?api-version=2015-12-01
    

    Headers:授权,与其他 ARM REST API 相同。



    Rest API 不支持 POST 或 PATCH。

    对于带有负载均衡器的 VM,我编写了一个示例模板。

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageAccountName": {
          "type": "string",
          "defaultValue": "loadbalancertest2",
          "metadata": {
            "description": "The Storage Name of you VM OSDisk and DataDisk"
          }
        },
        "apiVersion": {
          "type": "string",
          "defaultValue": "2016-03-30",
          "metadata": {
            "description": "The API Version"
          }
        },
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "metadata": {
            "description": "The Storage Account Type"
          }
        },
        "publicIPAddressName": {
          "type": "string",
          "defaultValue": "loadbalancertest",
          "metadata": {
            "description": "The public IP Address Name"
          }
        },
        "publicIPAddressType": {
          "type": "string",
          "defaultValue": "Static",
          "metadata": {
            "description": "The public IP Address Type"
          }
        },
        "dnsNameforLBIP": {
          "type": "string",
          "defaultValue": "loadbalancertest",
          "metadata": {
            "description": "a unique DNS Name for LBIP"
          }
        },
        "virtualNetworkName": {
          "type": "string",
          "defaultValue": "loadbalancertest",
          "metadata": {
            "description": "The Virtual Network Name"
          }
        },
        "nicName": {
          "type": "string",
          "defaultValue": "loadbalancertest",
          "metadata": {
            "description": "The Network Interface Card Name"
          }
        },
        "loadBalancerName": {
          "type": "string",
          "defaultValue": "loadbalancertest",
          "metadata": {
            "description": "The Load Balancer Name"
          }
        },
        "vmName": {
          "type": "string",
          "defaultValue": "lbtest",
          "metadata": {
            "description": "The Virtual Machine Name"
          }
        },
        "adminUsername": {
          "type": "string",
          "metadata": {
            "description": "The admin Username"
          }
        },
        "adminPassword": {
          "type": "securestring",
          "metadata": {
            "description": "The admin Password"
          }
        },
        "vmSize": {
          "type": "string",
          "defaultValue": "Standard_D1",
          "metadata": {
            "description": "The Virtual Machine Size"
          }
        }
      },
      "variables": {
        "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
        "subnetRef": "[concat(variables('vnetID'),'/subnets/default')]",
        "publicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses',parameters('publicIPAddressName'))]"
      },
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "name": "[parameters('storageAccountName')]",
          "apiVersion": "2015-06-15",
          "location": "[resourceGroup().location]",
          "properties": {
            "accountType": "[parameters('storageAccountType')]"
          }
        },
        {
          "apiVersion": "[parameters('apiVersion')]",
          "type": "Microsoft.Network/publicIPAddresses",
          "name": "[parameters('publicIPAddressName')]",
          "location": "[resourceGroup().location]",
          "properties": {
            "publicIPAllocationMethod": "[parameters('publicIPAddressType')]",
            "dnsSettings": {
              "domainNameLabel": "[parameters('dnsNameforLBIP')]"
            }
          }
        },
        {
          "apiVersion": "[parameters('apiVersion')]",
          "type": "Microsoft.Network/virtualNetworks",
          "name": "[parameters('virtualNetworkName')]",
          "location": "[resourceGroup().location]",
          "properties": {
            "addressSpace": {
              "addressPrefixes": [
                "10.0.0.0/16"
              ]
            },
            "subnets": [
              {
                "name": "default",
                "properties": {
                  "addressPrefix": "10.0.0.0/24"
                }
              }
            ]
          }
        },
        {
          "apiVersion": "[parameters('apiVersion')]",
          "type": "Microsoft.Network/networkInterfaces",
          "name": "[parameters('nicName')]",
          "location": "[resourceGroup().location]",
          "dependsOn": [
            "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]",
            "[concat('Microsoft.Network/loadBalancers/', parameters('loadBalancerName'))]"
          ],
          "properties": {
            "ipConfigurations": [
              {
                "name": "ipconfig1",
                "properties": {
                  "privateIPAllocationMethod": "Dynamic",
                  "subnet": {
                    "id": "[variables('subnetRef')]"
                  }
                },
                "loadBalancerBackendAddressPools": [
                  {
                    "id": "[concat('Microsoft.Network/loadBalancers/', parameters('loadBalancerName'), '/backendAddressPools/loadBalancerBackEnd')]"
                  }
                ]
              }
            ]
          }
        },
        {
          "apiVersion": "[parameters('apiVersion')]",
          "name": "[parameters('loadBalancerName')]",
          "type": "Microsoft.Network/loadBalancers",
          "location": "[resourceGroup().location]",
          "dependsOn": [
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPAddressName'))]"
          ],
          "properties": {
            "frontendIPConfigurations": [
              {
                "name": "loadBalancerFrontEnd",
                "properties": {
                  "publicIPAddress": {
                    "id": "[variables('publicIPAddressID')]"
                  }
                }
              }
            ],
            "backendAddressPools": [
              {
                "name": "loadBalancerBackEnd"
              }
            ],
            "loadBalancingRules": [
            ],
            "probes": [
            ]
          }
        },
        {
          "apiVersion": "[parameters('apiVersion')]",
          "type": "Microsoft.Compute/virtualMachines",
          "name": "[parameters('vmName')]",
          "location": "[resourceGroup().location]",
          "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]",
            "[concat('Microsoft.Network/networkInterfaces/', parameters('nicName'))]"
          ],
          "properties": {
            "hardwareProfile": {
              "vmSize": "[parameters('vmSize')]"
            },
            "osProfile": {
              "computerName": "[parameters('vmName')]",
              "adminUsername": "[parameters('adminUsername')]",
              "adminPassword": "[parameters('adminPassword')]"
            },
            "storageProfile": {
              "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "2012-R2-Datacenter",
                "version": "latest"
              },
              "osDisk": {
                "name": "osdisk",
                "vhd": {
                  "uri": "[concat('http://',parameters('storageAccountName'),'.blob.core.windows.net/vhds/loadbalancertestOS.vhd')]"
                },
                "caching": "ReadWrite",
                "createOption": "FromImage"
              },
              "dataDisks": [
                {
                  "name": "datadisk1",
                  "diskSizeGB": "100",
                  "lun": 0,
                  "vhd": {
                    "uri": "[concat('http://',parameters('storageAccountName'),'.blob.core.windows.net/vhds/loadbalancertestData.vhd')]"
                  },
                  "createOption": "Empty"
                }
              ]
            },
            "networkProfile": {
              "networkInterfaces": [
                {
                  "id": "[resourceId('Microsoft.Network/networkInterfaces',parameters('nicName'))]"
                }
              ]
            },
            "diagnosticsProfile": {
              "bootDiagnostics": {
                "enabled": "true",
                "storageUri": "[concat('http://',parameters('storageAccountName'),'.blob.core.windows.net')]"
              }
            }
          }
        }
      ]
    }
    

    负载均衡器是设置在 NIC 和公共 IP 地址之间的东西,用于对互联网流量进行负载均衡。更多详情请见Azure Load Balancer overview

    更新

    关于将经典保留 IP 地址转换为静态公共 IP 地址,这是我发现的。如果按照“Migrate IaaS resources from classic to Azure Resource Manager by using Azure PowerShell”的文章,将预留IP分配给带有虚拟机的云服务,并将ASM虚拟机迁移到ARM虚拟机,预留IP将转换为静态公网IP。我已经测试了具有虚拟网络的虚拟机。它确实有效。

    【讨论】:

    • 嗨,非常感谢您提供如此详细的信息,将保留的 IP 地址与资源(即 VM 或负载平衡器)相关联的方法是什么。如果要通过负载均衡器将其分配给VM,我们可以通过这种方式为负载均衡器定义保留IP,是否有API调用作为服务管理API,我们可以轻松地将保留IP与云服务相关联使用 API 调用。那么有没有这样的API调用呢?
    • 我已经为你写了一个示例模板。
    • 非常感谢!我感到困惑的只有一件事是参数“publicIPAddressName”。它可能是保留IP地址的名称吗?如果是,那么如果保留的 IP 地址已经存在,为什么我们需要通过模板文件创建 IP 地址资源?实际上我担心的是为虚拟机使用保留 IP
    • 同样,保留 IP 地址用于经典部署模型。对于资源管理器部署模型,您必须使用静态公共 IP 地址。如果您检查资源 ID,您将看到保留的 IP 地址属于 Microsoft/ClassicNetwork 资源提供商,而静态公共 IP 地址属于 Microsoft/Network。它们是具有相似功能的两个不同的东西。如果您已经有公共 IP 地址,是的,请确保您可以从模板中删除 IP 地址创建。
    • 是的,看看Migrate IaaS resources from classic to Azure Resource Manager by using Azure PowerShell。如果将预留 IP 分配给带有虚拟机的云服务,并将 ASM 虚拟机迁移到 ARM 虚拟机,则预留 IP 将转换为静态公共 IP。
    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 2016-03-05
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多