Skip to content

Commit

Permalink
one cluster have only one transport
Browse files Browse the repository at this point in the history
Signed-off-by: mengying <[email protected]>
  • Loading branch information
mengying committed Sep 27, 2024
1 parent f5bdaec commit 5b909be
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ require (
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64
go.uber.org/mock v0.4.0
golang.org/x/net v0.24.0
golang.org/x/sync v0.7.0
golang.org/x/term v0.19.0
golang.org/x/text v0.14.0
golang.org/x/time v0.5.0
Expand Down Expand Up @@ -174,7 +175,6 @@ require (
golang.org/x/exp v0.0.0-20231226003508-02704c960a9b // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/oauth2 v0.18.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.19.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 // indirect
Expand Down
35 changes: 32 additions & 3 deletions pkg/util/proxy/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ import (
"net/url"
"path"
"strings"
"sync"
"time"

"golang.org/x/sync/singleflight"
authenticationv1 "k8s.io/api/authentication/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/httpstream"
Expand All @@ -44,6 +46,13 @@ import (
// SecretGetterFunc is a function to get secret.
type SecretGetterFunc func(context.Context, string, string) (*corev1.Secret, error)

type clusterEndpointInfo struct {
Transport *http.Transport
}

var clusterEndpointInfoStore sync.Map
var singleExecution singleflight.Group

// ConnectCluster returns a handler for proxy cluster.
func ConnectCluster(ctx context.Context, cluster *clusterapis.Cluster, proxyPath string, secretGetter SecretGetterFunc, responder registryrest.Responder) (http.Handler, error) {
tlsConfig, err := GetTLSConfigForCluster(ctx, cluster, secretGetter)
Expand Down Expand Up @@ -159,12 +168,32 @@ func Location(cluster *clusterapis.Cluster, tlsConfig *tls.Config) (*url.URL, ht
return nil, nil, err
}

proxyTransport, err := createProxyTransport(cluster, tlsConfig)
if v, ok := clusterEndpointInfoStore.Load(cluster.UID); ok {
clusterEndpointsInfo := v.(clusterEndpointInfo)
return location, clusterEndpointsInfo.Transport, nil
}

endpointInfo, err, _ := singleExecution.Do(string(cluster.UID), func() (interface{}, error) {
if value, ok := clusterEndpointInfoStore.Load(cluster.UID); ok {
return value, nil
}
proxyTransport, err := createProxyTransport(cluster, tlsConfig)
if err != nil {
return nil, err
}
clusterEndpointInfoo := clusterEndpointInfo{
Transport: proxyTransport,
}
clusterEndpointInfoStore.Store(cluster.UID, clusterEndpointInfo{
Transport: proxyTransport,
})
return clusterEndpointInfoo, nil
})
if err != nil {
return nil, nil, err
}

return location, proxyTransport, nil
transport := endpointInfo.(clusterEndpointInfo).Transport
return location, transport, nil
}

func constructLocation(cluster *clusterapis.Cluster) (*url.URL, error) {
Expand Down

0 comments on commit 5b909be

Please sign in to comment.