...
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
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