package service import ( "context" "errors" "net" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" "sigs.k8s.io/controller-runtime/pkg/client" "edge-infra.dev/pkg/sds/remoteaccess/constants" ) var errExpectedOneLoadBalancerIPAddress = errors.New("load balancer has multiple IP addresses, expected one") // Get the relay load balancer external IP address, returning unavailable if so func GetLoadBalancerExternalIP(ctx context.Context, c client.Client) (net.IP, error) { key := client.ObjectKey{Namespace: constants.VPNNamespace, Name: constants.RelayName} lbService := &corev1.Service{} if err := c.Get(ctx, key, lbService); kerrors.IsNotFound(err) { return nil, nil } else if err != nil { return nil, err } numIPAddresses := len(lbService.Status.LoadBalancer.Ingress) if numIPAddresses == 0 { return nil, nil } else if numIPAddresses > 1 { return nil, errExpectedOneLoadBalancerIPAddress } return net.ParseIP(lbService.Status.LoadBalancer.Ingress[0].IP), nil }