mirror of
https://github.com/cozystack/cozystack.git
synced 2026-10-30 00:27:04 +09:00
A reservation is only as good as the annotations that express it. The driver parks an address on a placeholder Service and hands it over by pinning the workload's Service with metallb.io/loadBalancerIPs — ordinary MetalLB annotations that any writer of a Service can set, so a tenant able to set them can steer MetalLB at an address reserved for someone else. The driver notices and marks the address Conflict, but only after the fact, and during the handoff gap the address is briefly unheld in MetalLB's books with admission the only thing in front of it. The driver's design leaves this policy to the installation rather than the controller, since who is allowed to pin is a property of the deployment; this package is that installation, so the policy ships beside the chart it protects and is withdrawn with it. Presence of an annotation is deliberately not what is forbidden: the driver writes the pin onto the tenant's own Service, and the tenant must stay able to edit the rest of it. The comparison is against oldObject, so an unchanged value always passes, while CREATE sees a null oldObject and reads as absent. spec.loadBalancerIP needs no clause — MetalLB stopped honouring it in v0.14 and this tree vendors v0.16.1. Assisted-by: LLM Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>