修改/替换探针会导致CannotModifyRuleUsedByProbeUsedByVMSS

时间:2018-07-16 17:03:08

标签: azure azure-vm-scale-set azure-template azure-load-balancer

我创建了一个带有负载均衡器和为http 80地址/配置的探针的vmss。

我现在已使用专用的实时路线更新了我的应用,例如/api/alive可以更快地回复该基本URL,这就是我想用作负载均衡规则的探针。

我已经使用新的探针详细信息更新了模板(基数为https://github.com/Azure/vm-scale-sets/blob/master/preview/upgrade/autoupdate.json),但是仍然出现以下错误:

"error": {
    "code": "CannotModifyRuleUsedByProbeUsedByVMSS",
    "message": "Load balancer rule /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/loadBalancingRules/webhttpslb cannot be modified because it references the load balancer probe /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/probes/saProbe that used as health probe by VM scale set /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Compute/virtualMachineScaleSets/RESNAME. To make changes to this rule, please update VM scale set to remove the reference to the probe.",
}

无论如何尝试,删除所有探针,仅修改探针的详细信息,我都会不断收到此错误。

我们是否打算将所有规模的VM设置为更新探针?还有其他办法吗?非常感谢您提前提供的帮助。

更新

之前的模板:https://pastebin.com/YisgUbRk

后面的模板:https://pastebin.com/2VmgPMur

我正在尝试将规则和VMSS中的saProbe替换为规则中的httpProbe和VMSS中的sshProbe

我还尝试过将VMSS探针保持为saProbe,并且仅将httpProbe添加到LB规则中,但这也不起作用,也出现了相同的错误。

这是saProbe https://pasteboard.co/HuKMcwA.png的当前设置,它们与粘贴后的内容匹配。

更新2

试图将saProbe保留在LB规则上,但将VM探针更改为sshProbe,在webhttpslb规则上具有相同的结果和相同的错误。

有关如何正常更换探头的任何建议?没有LB和VM停机?

更新3

尼尔,确实是对的(好地方!),还有一个我没有注意到的额外变化。

但是,现在很明显,我实际上试图实现的目标可能无法实现。我将saProbe保留在LB规则上,但将VMSS探针更改为sshProbe并收到此错误:

"error": { "details": [], "code": "CannotUseInactiveHealthProbe", "message": "VM scale set /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Compute/virtualMachineScaleSets/RESNAME cannot use probe /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/probes/sshProbe as a HealthProbe because load balancing rules (weblb, webhttpslb) that send traffic to the scale set IPs in backend address pools (RESNAME-bepool) do not use this probe." }

任何人都可以确认吗?如果我添加了一个虚拟规则来激活sshProbe怎么办?这种情况下的最佳做法是什么?

更新4

是的,首先要从VMSS中删除探针是关键。不得不运行模板几次,但是最终仅包含规则和VMSS附带的httpProbe

2 个答案:

答案 0 :(得分:1)

好吧,该错误明确指出您无法修改此规则,可以创建一个新规则,而改用该规则。

好吧,正如错误所言,您不能对规则进行任何更改,只要它引用了用作VMSS健康状况探针的探针即可。

在您的模板中,您得到了:

"healthProbe": {
    "id": "[concat(variables('lbId'), '/probes/', variables('saProbeName'))]"
},

您应该在进行部署之前将其从vmss中删除,或者创建一组不使用该探针的新规则,那样便可以对其进行修改。

答案 1 :(得分:1)

看看之前和之后的模板,似乎loadDistribution从SourceIPProtocol更改为SourceIP(这似乎是两次都指定loadDistribution的情况)。这可能是导致您看到错误的原因(不确定,但这是我的最佳猜测)

希望这会有所帮助! :)

-Neil