fix(lb): honor lb owner node annotation
deploy / build (push) Successful in 3m51s

This commit is contained in:
2026-08-03 03:08:49 +03:30
parent 8718d27fc7
commit d2b1a21a07
4 changed files with 16 additions and 0 deletions
+1
View File
@@ -5,6 +5,7 @@ const (
AnnotationIP = "lb.kloude.ir/ip"
AnnotationVIP = "lb.kloude.ir/vip"
AnnotationLBID = "lb.kloude.ir/id"
AnnotationNode = "lb.kloude.ir/node"
Namespace = "kube-system"
)
+3
View File
@@ -191,6 +191,9 @@ func (c *Controller) sync(ctx context.Context, key string) error {
patch.Annotations[kloudlb.AnnotationIP] = ingressIP
patch.Annotations[kloudlb.AnnotationVIP] = vip
patch.Annotations[kloudlb.AnnotationLBID] = lb.ID
if node := strings.TrimSpace(lb.Node); node != "" {
patch.Annotations[kloudlb.AnnotationNode] = node
}
patch.Status = corev1.ServiceStatus{
LoadBalancer: corev1.LoadBalancerStatus{
Ingress: []corev1.LoadBalancerIngress{{IP: ingressIP}},
+11
View File
@@ -147,6 +147,10 @@ func (s *Speaker) sync(ctx context.Context, key string) error {
s.stopLeading(key, vip)
return nil
}
if owner := serviceOwnerNode(svc); owner != "" && owner != s.nodeName {
s.stopLeading(key, vip)
return nil
}
leaseName := leaseNameFor(key)
leader, err := s.acquireLease(ctx, leaseName, vip)
@@ -161,6 +165,13 @@ func (s *Speaker) sync(ctx context.Context, key string) error {
return s.ensureVIP(vip)
}
func serviceOwnerNode(svc *corev1.Service) string {
if svc == nil || svc.Annotations == nil {
return ""
}
return strings.TrimSpace(svc.Annotations[kloudlb.AnnotationNode])
}
func serviceExternalVIP(svc *corev1.Service) string {
if svc.Annotations != nil {
if vip := strings.TrimSpace(svc.Annotations[kloudlb.AnnotationVIP]); vip != "" {
+1
View File
@@ -5,6 +5,7 @@ type LoadBalancer struct {
IP string `json:"ip"`
Namespace string `json:"namespace"`
Name string `json:"name"`
Node string `json:"node,omitempty"`
}
type AllocateRequest struct {