Modifying/Replacing 探测导致 CannotModifyRuleUsedByProbeUsedByVMSS

Modifying/Replacing Probe causes CannotModifyRuleUsedByProbeUsedByVMSS

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

我现在已经用专用的实时路线更新了我的应用程序,例如/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

试图在 LB 规则上保持 saProbe,但将 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

嗯,错误明确指出您不能修改此规则,您可以创建一个新规则并改用那个规则。

好的,如错误所述,您不能对规则进行任何更改,只要它引用用作 VMSS 运行状况探测的探测即可:

在您的模板中您得到了:

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

您应该在部署之前从 vmss 中删除它,或者创建一组不使用该探测器的新规则,这样您就可以修改它们。

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

希望对您有所帮助! :)

-尼尔