我在 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 通话?
答案 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
我在 ARM 模板中使用公共 IP 创建 VMSS,如下所示:
"publicIPAddressconfiguration": {
"name": "publicip",
"properties": {
"idleTimeoutInMinutes": 10,
"dnsSettings": {
"domainNameLabel": "[parameters('vmssName')]"
}
}
}