Repository navigation
Description
Summary
MetalLB v0.15.2 (currently used in cozystack) has a bug where ServiceL2Status objects cannot be reassigned to a different node after failover. The status.node field is immutable, so when the L2 leader changes (e.g. after node reboot), the speaker fails to update the existing ServiceL2Status and enters an error loop:
ServiceL2Status.metallb.io "l2-xxx" is invalid: status.node: Invalid value: "string": Value is immutable
This causes LoadBalancer VIPs to become unreachable externally until speaker pods are manually restarted.
Upstream issue: metallb/metallb#2930
Fix PR (merged to main): metallb/metallb#2938
The fix has not been included in any MetalLB release yet (latest is v0.15.3, released before the fix was merged).
Impact
After any node failover or reboot, LoadBalancer services may lose external connectivity because ServiceL2Status cannot be recreated for the new leader node.
Activity
dosubot commentedon Jul 27, 2026
Hi, Andrei Kvapil (@kvaps). I'm Dosu, and I'm helping the cozystack team manage their backlog and am marking this issue as stale.
Recap
ServiceL2Status.status.nodeas immutable, which prevents the speaker from updating the leader node after failover.Next Steps
Thanks for your understanding and contribution.
myasnikovdaniil commentedon Nov 6, 2026
Main has MetalLB 0.16.1 since #2699, it replaces another node's L2 status instead of updating the immutable node field.