diff --git a/pkg/agent/tunnel/tunnel.go b/pkg/agent/tunnel/tunnel.go
index 28e740662dc4a88e5828e67381d16291bcddd46a..489a21c6530e5853c59a1fba6364f955060353aa 100644
--- a/pkg/agent/tunnel/tunnel.go
+++ b/pkg/agent/tunnel/tunnel.go
@@ -6,13 +6,13 @@ import (
 	"fmt"
 	"net"
 	"reflect"
-	"strconv"
 	"sync"
 	"time"
 
 	"github.com/gorilla/websocket"
 	"github.com/rancher/k3s/pkg/agent/proxy"
 	"github.com/rancher/k3s/pkg/daemons/config"
+	"github.com/rancher/k3s/pkg/util"
 	"github.com/rancher/k3s/pkg/version"
 	"github.com/rancher/remotedialer"
 	"github.com/sirupsen/logrus"
@@ -32,26 +32,6 @@ var (
 	}
 )
 
-func getAddresses(endpoint *v1.Endpoints) []string {
-	serverAddresses := []string{}
-	if endpoint == nil {
-		return serverAddresses
-	}
-	for _, subset := range endpoint.Subsets {
-		var port string
-		if len(subset.Ports) > 0 {
-			port = strconv.Itoa(int(subset.Ports[0].Port))
-		}
-		if port == "" {
-			port = "443"
-		}
-		for _, address := range subset.Addresses {
-			serverAddresses = append(serverAddresses, net.JoinHostPort(address.IP, port))
-		}
-	}
-	return serverAddresses
-}
-
 func Setup(ctx context.Context, config *config.Node, proxy proxy.Proxy) error {
 	restConfig, err := clientcmd.BuildConfigFromFlags("", config.AgentConfig.KubeConfigK3sController)
 	if err != nil {
@@ -75,9 +55,9 @@ func Setup(ctx context.Context, config *config.Node, proxy proxy.Proxy) error {
 
 	endpoint, _ := client.CoreV1().Endpoints("default").Get(ctx, "kubernetes", metav1.GetOptions{})
 	if endpoint != nil {
-		addresses := getAddresses(endpoint)
+		addresses := util.GetAddresses(endpoint)
 		if len(addresses) > 0 {
-			proxy.Update(getAddresses(endpoint))
+			proxy.Update(util.GetAddresses(endpoint))
 		}
 	}
 
@@ -119,7 +99,7 @@ func Setup(ctx context.Context, config *config.Node, proxy proxy.Proxy) error {
 						continue watching
 					}
 
-					newAddresses := getAddresses(endpoint)
+					newAddresses := util.GetAddresses(endpoint)
 					if reflect.DeepEqual(newAddresses, proxy.SupervisorAddresses()) {
 						continue watching
 					}
diff --git a/pkg/apiaddresses/controller.go b/pkg/apiaddresses/controller.go
index 122e067aa6074821e736e068faf04255b6ecc61a..38c0b8e12a7d67ee367ad017080e494f3f5a7b6f 100644
--- a/pkg/apiaddresses/controller.go
+++ b/pkg/apiaddresses/controller.go
@@ -4,11 +4,10 @@ import (
 	"bytes"
 	"context"
 	"encoding/json"
-	"net"
-	"strconv"
 
 	"github.com/rancher/k3s/pkg/daemons/config"
 	"github.com/rancher/k3s/pkg/etcd"
+	"github.com/rancher/k3s/pkg/util"
 	"github.com/rancher/k3s/pkg/version"
 	controllerv1 "github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1"
 	etcdv3 "go.etcd.io/etcd/clientv3"
@@ -54,7 +53,7 @@ func (h *handler) sync(key string, endpoint *v1.Endpoints) (*v1.Endpoints, error
 	}
 
 	w := &bytes.Buffer{}
-	if err := json.NewEncoder(w).Encode(getAddresses(endpoint)); err != nil {
+	if err := json.NewEncoder(w).Encode(util.GetAddresses(endpoint)); err != nil {
 		return nil, err
 	}
 
@@ -65,23 +64,3 @@ func (h *handler) sync(key string, endpoint *v1.Endpoints) (*v1.Endpoints, error
 
 	return endpoint, nil
 }
-
-func getAddresses(endpoint *v1.Endpoints) []string {
-	serverAddresses := []string{}
-	if endpoint == nil {
-		return serverAddresses
-	}
-	for _, subset := range endpoint.Subsets {
-		var port string
-		if len(subset.Ports) > 0 {
-			port = strconv.Itoa(int(subset.Ports[0].Port))
-		}
-		if port == "" {
-			port = "443"
-		}
-		for _, address := range subset.Addresses {
-			serverAddresses = append(serverAddresses, net.JoinHostPort(address.IP, port))
-		}
-	}
-	return serverAddresses
-}
diff --git a/pkg/util/api.go b/pkg/util/api.go
new file mode 100644
index 0000000000000000000000000000000000000000..49d4a5d021dc5231a9088131ff43de16b67bd510
--- /dev/null
+++ b/pkg/util/api.go
@@ -0,0 +1,28 @@
+package util
+
+import (
+	"net"
+	"strconv"
+
+	v1 "k8s.io/api/core/v1"
+)
+
+func GetAddresses(endpoint *v1.Endpoints) []string {
+	serverAddresses := []string{}
+	if endpoint == nil {
+		return serverAddresses
+	}
+	for _, subset := range endpoint.Subsets {
+		var port string
+		if len(subset.Ports) > 0 {
+			port = strconv.Itoa(int(subset.Ports[0].Port))
+		}
+		if port == "" {
+			port = "443"
+		}
+		for _, address := range subset.Addresses {
+			serverAddresses = append(serverAddresses, net.JoinHostPort(address.IP, port))
+		}
+	}
+	return serverAddresses
+}