...

Source file src/edge-infra.dev/pkg/sds/remoteaccess/service/service.go

Documentation: edge-infra.dev/pkg/sds/remoteaccess/service

     1  package service
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"net"
     7  
     8  	corev1 "k8s.io/api/core/v1"
     9  	kerrors "k8s.io/apimachinery/pkg/api/errors"
    10  	"sigs.k8s.io/controller-runtime/pkg/client"
    11  
    12  	"edge-infra.dev/pkg/sds/remoteaccess/constants"
    13  )
    14  
    15  var errExpectedOneLoadBalancerIPAddress = errors.New("load balancer has multiple IP addresses, expected one")
    16  
    17  // Get the relay load balancer external IP address, returning unavailable if so
    18  func GetLoadBalancerExternalIP(ctx context.Context, c client.Client) (net.IP, error) {
    19  	key := client.ObjectKey{Namespace: constants.VPNNamespace, Name: constants.RelayName}
    20  	lbService := &corev1.Service{}
    21  	if err := c.Get(ctx, key, lbService); kerrors.IsNotFound(err) {
    22  		return nil, nil
    23  	} else if err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	numIPAddresses := len(lbService.Status.LoadBalancer.Ingress)
    28  	if numIPAddresses == 0 {
    29  		return nil, nil
    30  	} else if numIPAddresses > 1 {
    31  		return nil, errExpectedOneLoadBalancerIPAddress
    32  	}
    33  
    34  	return net.ParseIP(lbService.Status.LoadBalancer.Ingress[0].IP), nil
    35  }
    36  

View as plain text