Azure Load Balancer转发流量至Container Apps失败:健康探针状态为0
问题排查:Azure LB健康探测失败(指向内部负载均衡的Container App环境)
核心问题定位与修复方案
1. 修正Backend Address Pool的IP引用错误
你的Terraform代码中,azurerm_lb_backend_address_pool_address的ip_address字段引用了错误的资源ID:azurerm_container_app_environment.myapp.static_ip_address,但你的Container App环境资源名是myenv,而非myapp,这会导致LB指向无效IP,直接引发探测失败。正确配置如下:
resource "azurerm_lb_backend_address_pool_address" "address_pool" { name = "address_pool" backend_address_pool_id = azurerm_lb_backend_address_pool.pool.id virtual_network_id = var.vnet_id ip_address = azurerm_container_app_environment.myenv.static_ip_address }
2. 验证网络连通性与NSG规则
- 子网可达性:确保LB所在子网与Container App环境的
infrastructure_subnet处于同一VNet,或已配置正常的VNet对等连接与路由。 - NSG入站规则:为Container App环境的基础设施子网添加NSG规则,允许来自LB子网的TCP 8000端口入站流量(覆盖健康探测和业务流量)。
- NSG出站规则:确认LB所在子网的NSG允许出站访问Container App环境静态IP的8000端口。
3. 调整健康探测参数(可选)
默认探测间隔可能过短导致误判,可调整参数提升探测稳定性:
resource "azurerm_lb_probe" "probe" { loadbalancer_id = var.load_balancer_id name = "probe" port = 8000 protocol = "Tcp" interval_in_seconds = 10 number_of_probes = 3 .... }
4. 确认Container App环境的静态IP属性
验证azurerm_container_app_environment.myenv.static_ip_address返回的是你能正常curl访问的私网IP,可通过Azure CLI确认:
az containerapp env show --name <环境名> --resource-group <资源组名> --query properties.staticIpAddress
验证流程
- 修正Terraform代码中的IP引用错误,重新部署资源。
- 检查NSG规则配置是否符合要求。
- 在LB所在子网的虚拟机内,执行
curl -kvvv http://<环境静态IP>:8000,确认LB能正常访问后端服务。 - 查看Azure Portal中LB的健康探测详情,确认状态是否更新。
内容的提问来源于stack exchange,提问作者Fabry
相关产品推荐
相关产品推荐

