缺少Azure VM元数据/ emtpy publicIpAddress

hec6srdp  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(89)

在Azure VM上查询元数据时,publicIpAddress没有值,即使计算机是公共IP。

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

为publicIpAddress返回空字符串

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

有人知道为什么吗?我检查了https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service,但找不到任何原因导致公共IP地址不显示

i2loujxw

i2loujxw1#

我相信您的公网IP是Standard SKU,而不是Basic SKU,不支持示例元数据服务。
来自MSDN:
使用示例元数据服务IMDS时,仅支持基本SKU的公网IP地址,不支持标准SKU。
这个GitHub Issue也有更多的信息。
我还使用基本和标准SKU公有IP地址对此进行了测试,当查询示例元数据示例API时,标准SKU将给予您"publicIpAddress":""

解决方案

为了能够使用示例元数据服务,您需要使用基本SKU公网IP地址。公网IP地址创建后,您 * 无法 * 更改SKU,MSDN中已突出显示。
您可以先解除标准SKU公网IP示例与虚拟机网络接口的关联,使用基本SKU创建一个新的公网IP,然后将此公网IP与虚拟机网络接口关联。这是必需的,因为一个网络接口只能关联一个公网IP。

检查公网IP SKU

您可以从Azure PowerShell命令运行Get-AzPublicIpAddress来检查您的公共地址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门户导航到公共IP地址示例进行检查。

1bqhqjot

1bqhqjot2#

我的回答可能太晚了,但这将帮助其他人谁正在寻找这个解决方案.是的,因为RoadRunner提到你不能从上述API访问一个标准SKU公共IP.
解决方案是查询负载均衡器API端点,它将返回VM的标准公网IP地址列表。
API调用:

curl -H "Metadata:true" http://169.254.169.254/metadata/loadbalancer?api-version=2020-10-01

您也可以使用更新的API版本。
回复:

{
  "loadbalancer": {
    "publicIpAddresses": [
      {
        "frontendIpAddress": "20.X.Y.Z",
        "privateIpAddress": "10.X.Y.Z"
      }
    ],
    "inboundRules": [],
    "outboundRules": []
  }
}

publicIpAddresses将包含与VM关联的所有标准IP。

密钥frontendIpAddress为VM的公网IP地址。

相关问题