You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Azure虚拟机规模集(VMSS)实例的公共DNS名称

获取Azure VMSS实例公共DNS名称的实现方法

你不需要手动拼接DNS前缀和后缀,Azure实例元数据服务(IMDS)直接提供了对应公网IP的完整FQDN字段,是最稳定可靠的实现方式。


方法1:直接从IMDS拉取完整公共DNS名称(推荐)

你之前调用IMDS仅查询了公网IP地址字段,只要把接口版本升级到2021-02-01,同路径下直接提供publicIpFqdn字段,返回值就是你需要的完整格式域名(例如vm1.myvmss.westeurope.cloudapp.azure.com),直接在虚拟机内执行以下命令即可获取:

curl -H Metadata:true --noproxy "*" "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpFqdn?api-version=2021-02-01&format=text"

说明:IMDS是Azure平台侧提供的服务,不需要在虚拟机内安装任何组件,直接修改请求里的api-version参数即可使用,和你使用的Linux基础镜像版本无关。


方法2:手动拼接DNS名称的实现逻辑

如果你因为特殊场景必须手动拼接DNS名称,注意不要通过本地hostname命令的返回值推导实例前缀:本地返回的mkvmsa524000001是VMSS内部的实例计算机名,和公网DNS的实例前缀没有固定映射关系,平台分配公网IP时会独立生成DNS前缀,人工推算很容易因为平台规则调整失效。
手动拼接需要的三个字段获取方式如下:

  • 你创建VMSS时通过--vm-domain-name指定的域名标签(示例里的myvmss):这个值是你部署时手动传入的固定值,在配置Custom Script扩展时直接作为自定义参数传入脚本即可,不需要在实例内部查询。
  • 区域后缀(示例里的westeurope):可以通过IMDS直接拉取实例所在区域,执行命令:
    curl -H Metadata:true --noproxy "*" "http://169.254.169.254/metadata/instance/compute/location?api-version=2021-02-01&format=text"
    
    拿到区域值后固定拼接.cloudapp.azure.com就是域名的根后缀。
  • 实例前缀(示例里的vm1):这个值是平台分配公网IP时动态生成的,没有稳定的本地映射来源,如果你必须拿到这个值,还是需要调用方法1的接口拿到完整FQDN后再做字符串拆分,本质上不如直接用方法1的返回值高效。

注意事项

  • 你当前创建VMSS时已经指定了--public-ip-per-vm参数,每个实例有独立公网IP,上述接口可以正常返回公网FQDN;如果是实例共用负载均衡出站公网IP的场景,这个接口不会返回对应值。
  • 不要硬编码区域后缀或者实例前缀规则,Azure不同云环境(例如Azure中国、Azure政府)域名后缀不一致,直接从IMDS拉取完整FQDN可以避免跨环境适配问题。

内容的提问来源于stack exchange,提问作者JoeBloggs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:18:20