使用Terraform部署无负载均衡器的Azure VMSS如何配置健康探测
无负载均衡器场景下VMSS滚动升级健康检测配置方案
问题根因
你遇到的报错是Azure平台的强制要求:使用Rolling滚动升级策略的VMSS必须配置健康检测能力,用于判断升级过程中实例是否正常运行,避免全量升级故障版本。
解决方案
无负载均衡器场景下,不需要配置负载均衡器健康探针,直接在VMSS中内嵌应用健康扩展即可满足要求,该扩展会在虚拟机内部运行探测逻辑,直接向VMSS控制面上报实例健康状态,完全不依赖外部负载均衡资源。
具体配置步骤如下:
步骤1:修改VMSS Terraform配置
在你现有的azurerm_virtual_machine_scale_set资源块中新增health_extension配置块,示例如下(原有其他配置保持不变即可):
resource "azurerm_virtual_machine_scale_set" "example" { # 原有基础配置保持不变 name = "mytestscaleset-1" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name upgrade_policy_mode = "Rolling" # 新增健康扩展配置 health_extension { publisher = "Microsoft.CPlat.Core" type = "ApplicationHealthLinux" # Windows系统请替换为ApplicationHealthWindows type_handler_version = "1.0" protocol = "tcp" # 可选值:tcp/http/https,根据你的业务服务类型调整 port = 22 # 对应服务监听端口,示例用SSH端口,业务场景替换为实际服务端口 interval_in_seconds = 5 # 健康探测间隔时间,单位秒 timeout_in_seconds = 3 # 单次探测超时时间,单位秒 unhealthy_threshold = 3 # 连续多少次探测失败即判定实例不健康 # 若使用HTTP/HTTPS协议需要额外指定探测路径,例如:request_path = "/api/health" } # 原有rolling_upgrade_policy、sku、存储配置、网络配置、标签等配置保持不变 }
步骤2:配置校验规则
- 确保配置的端口/探测路径在VM实例内部可正常访问,若探测规则匹配不到正常运行的服务,实例会被判定为不健康,直接导致滚动升级中断
- 建议将azurerm provider版本升级到3.0以上,避免低版本不支持
health_extension内嵌块;如果使用低于3.0的版本,可单独创建azurerm_virtual_machine_scale_set_extension资源关联VMSS,配置逻辑和内嵌块完全一致 - 健康扩展会自动安装到所有VMSS实例中,无需额外修改实例内部配置
内容的提问来源于stack exchange,提问作者Karamzov
相关产品推荐
相关产品推荐

