如何通过ARM模板为Azure云服务扩展支持应用的经典负载均衡器添加健康探测?
问题解答
能否通过ARM模板为经典负载均衡器添加健康探测?
可以,但经典负载均衡器的ARM模板结构与标准负载均衡器完全不同,错误的属性结构或资源类型是导致你遇到解析错误的核心原因。
错误原因及修正方向
你遇到的Invalid request format. Unable to parse request错误,通常是因为套用了标准LB的探测配置写法,或者经典LB的JSON属性格式、字段名不符合要求。经典LB的健康探测必须嵌套在Microsoft.ClassicNetwork/loadBalancers资源的properties.probes数组中,且字段名有严格规范。
参考ARM模板片段
以下是为经典负载均衡器配置健康探测的完整模板示例(包含负载均衡规则关联探测):
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "lbName": { "type": "string", "metadata": { "description": "经典负载均衡器名称" } }, "publicIpName": { "type": "string", "metadata": { "description": "已存在的公网IP名称" } }, "location": { "type": "string", "metadata": { "description": "资源所在Azure区域" } } }, "resources": [ { "type": "Microsoft.ClassicNetwork/loadBalancers", "apiVersion": "2016-04-01", "name": "[parameters('lbName')]", "location": "[parameters('location')]", "properties": { "frontendIPConfigurations": [ { "name": "FrontendIP", "properties": { "publicIPAddress": { "id": "[resourceId('Microsoft.ClassicNetwork/publicIPAddresses', parameters('publicIpName'))]" } } } ], "backendAddressPools": [ { "name": "BackendPool" } ], "probes": [ { "name": "HttpHealthProbe", "properties": { "protocol": "Http", "port": 80, "requestPath": "/health", "intervalInSeconds": 15, "numberOfProbes": 2 } } ], "loadBalancingRules": [ { "name": "HttpRule", "properties": { "frontendIPConfiguration": { "id": "[concat(resourceId('Microsoft.ClassicNetwork/loadBalancers', parameters('lbName')), '/frontendIPConfigurations/FrontendIP')]" }, "backendAddressPool": { "id": "[concat(resourceId('Microsoft.ClassicNetwork/loadBalancers', parameters('lbName')), '/backendAddressPools/BackendPool')]" }, "protocol": "Tcp", "frontendPort": 80, "backendPort": 80, "probe": { "id": "[concat(resourceId('Microsoft.ClassicNetwork/loadBalancers', parameters('lbName')), '/probes/HttpHealthProbe')]" } } } ] } } ] }
关键注意事项
- 资源类型必须使用
Microsoft.ClassicNetwork/loadBalancers,API版本推荐用2016-04-01(经典LB的稳定版本) - 健康探测必须定义在
probes数组内,负载均衡规则需通过id字段关联探测资源 - Http探测需指定
requestPath(如/health),Tcp探测无需此属性 - 字段名必须严格匹配:比如
intervalInSeconds不能简写为interval,numberOfProbes不能拼写错误 - 若仍报错,优先检查JSON语法(如逗号、括号是否闭合),以及探测属性值是否符合范围(如端口需在1-65535之间)
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

