从该实例中找出 VMSS 实例的公共 IP(每个实例的公共 IP VMSS)

时间:2021-02-07 18:35:56

标签: azure azure-virtual-network azure-vm-scale-set

我在 Azure 中创建了一个 VMSS,其每个实例的公共 IP 都在此处描述:https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-networking#creating-a-scale-set-with-public-ip-per-virtual-machine。我需要每个实例的 IP 公共 IP 配置,以便每个单独的实例都可以从外部独立使用。

由于显然无法为此类 IP 指定 sku(完整格式在此:https://docs.microsoft.com/en-us/azure/templates/microsoft.compute/virtualmachinescalesets#virtualmachinescalesetpublicipaddressconfigurationproperties-object),因此所有 IP 始终是标准的。我可以查询公共 IP,因为它们是由 VMSS 创建的,它们确实是标准的。

元数据服务(我计划用于从实例中获取 IP)仅返回基本公共 IP(如此处所述:https://docs.microsoft.com/en-us/azure/virtual-network/public-ip-addresses#standard)。

如何从实例内获取实例的公共 IP,而不是 ping 返回调用者 IP 的随机第 3 方网站或从实例与 ARM 通话?

1 个答案:

答案 0 :(得分:0)

经过我的验证,你可以从实例内部获取实例的公网IP,参考this sample。这也适用于从 Azure VM 获取基本公共 IP。

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET  -Uri "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-08-01&format=text" | ConvertTo-Json

enter image description here

我在 ARM 模板中使用公共 IP 创建 VMSS,如下所示:

                                            "publicIPAddressconfiguration": {
                                                "name": "publicip",
                                                "properties": {
                                                "idleTimeoutInMinutes": 10,
                                                "dnsSettings": {
                                                    "domainNameLabel": "[parameters('vmssName')]"
                                                }
                                                }
                                            }