缺少 Azure VM 元数据/emtpy publicIpAddress

Azure VM metadata missing / emtpy publicIpAddress

在 Azure VM 上查询元数据时,publicIpAddress 没有值,即使机器是 public IP。

curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2019-11-01"

returns publicIpAddress

的空字符串
{
  "compute": {
    // ... Omitted for brevity
  },
  "network": {
    "interface": [
      {
        "ipv4": {
          "ipAddress": [
            {
              "privateIpAddress": "10.3.0.4",
              "publicIpAddress": ""
            }
          ],
         // ... Rest has been omitted for brevity

有谁知道为什么?我检查了 https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service,但找不到 public IP 地址不显示的任何原因

我认为您的 public IP 地址是标准 SKU 而不是基本 SKU,它不支持实例元数据服务。

来自MSDN

Only Public IP addresses with basic SKU are available when using instance metadata service IMDS. Standard SKU is not supported.

这个GitHub Issue还有更多信息。

我还使用基本和标准 SKU public IP 地址进行了测试,标准 SKU 会在查询实例元数据实例 API 时为您提供 "publicIpAddress":""

解决方案

为了能够使用实例元数据服务,您需要使用 基本 SKU public IP 地址。一旦创建了 public IP 地址,您就无法 更改 SKU,如 MSDN.

中突出显示的那样

相反,您可以先取消您的 标准 SKU public IP 地址实例与虚拟机网络接口的关联,创建一个新的 public IP 地址基本 SKU,然后将此 public IP 地址与您的虚拟机网络接口相关联。这是必需的,因为网络接口只能关联一个 public IP 地址。

正在检查 Public IP 地址 SKU

您可以从 Azure PowerShell 命令 运行 Get-AzPublicIpAddress 检查您的 public 地址 SKU:

(Get-AzPublicIpAddress -Name "PUBLIC-IP-NAME" -ResourceGroupName "RESOURCE-GROUP").Sku.Name

或者如果您愿意,可以使用 Azure CLI 中的 az network public-ip show

az network public-ip show -n "PUBLIC-IP-NAME" -g "RESOURCE-GROUP" --query "sku.name"

或者通过 Azure 门户导航至您的 public IP 地址实例进行检查。