From 933f0789120e925579a6560f53ac53f5d3de50e6 Mon Sep 17 00:00:00 2001 From: Laszlo Kiraly Date: Tue, 10 May 2022 12:08:56 +0200 Subject: [PATCH] Fix for IPv6 cluster Related issue:deployments-k8s/5775 Related PRs: cmd-nsmgr/488 sdk/1281 Signed-off-by: Laszlo Kiraly --- internal/pkg/imports/imports_linux.go | 2 +- main.go | 36 ++++++++++----------------- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/internal/pkg/imports/imports_linux.go b/internal/pkg/imports/imports_linux.go index 4a9f7fa..9c54d65 100644 --- a/internal/pkg/imports/imports_linux.go +++ b/internal/pkg/imports/imports_linux.go @@ -3,7 +3,6 @@ package imports import ( _ "context" - _ "fmt" _ "github.com/antonfisher/nested-logrus-formatter" _ "github.com/edwarnicke/grpcfd" _ "github.com/golang/protobuf/ptypes/empty" @@ -24,6 +23,7 @@ import ( _ "github.com/networkservicemesh/sdk/pkg/registry/common/sendfd" _ "github.com/networkservicemesh/sdk/pkg/tools/debug" _ "github.com/networkservicemesh/sdk/pkg/tools/grpcutils" + _ "github.com/networkservicemesh/sdk/pkg/tools/listenonurl" _ "github.com/networkservicemesh/sdk/pkg/tools/log" _ "github.com/networkservicemesh/sdk/pkg/tools/log/logruslogger" _ "github.com/networkservicemesh/sdk/pkg/tools/opentelemetry" diff --git a/main.go b/main.go index a6814fc..7fe6b26 100644 --- a/main.go +++ b/main.go @@ -22,7 +22,6 @@ package main import ( "context" - "fmt" "net" "net/url" "os" @@ -55,6 +54,7 @@ import ( registrysendfd "github.com/networkservicemesh/sdk/pkg/registry/common/sendfd" "github.com/networkservicemesh/sdk/pkg/tools/debug" "github.com/networkservicemesh/sdk/pkg/tools/grpcutils" + "github.com/networkservicemesh/sdk/pkg/tools/listenonurl" "github.com/networkservicemesh/sdk/pkg/tools/log" "github.com/networkservicemesh/sdk/pkg/tools/log/logruslogger" "github.com/networkservicemesh/sdk/pkg/tools/opentelemetry" @@ -232,7 +232,7 @@ func main() { registrysendfd.NewNetworkServiceEndpointRegistryClient(), ), ) - nse := getNseEndpoint(listenOn, cfg) + nse := getNseEndpoint(listenOn, cfg, logger) nse, err = nseRegistryClient.Register(ctx, nse) logrus.Infof("nse: %+v", nse) @@ -263,33 +263,15 @@ func exitOnErr(ctx context.Context, cancel context.CancelFunc, errCh <-chan erro }(ctx, errCh) } -func getPublicURL(u *url.URL) string { - if u.Port() == "" || len(u.Host) != len(":")+len(u.Port()) { - return u.String() - } - addrs, err := net.InterfaceAddrs() - if err != nil { - logrus.Warn(err.Error()) - return u.String() - } - for _, a := range addrs { - if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { - if ipnet.IP.To4() != nil { - return fmt.Sprintf("tcp://%v:%v", ipnet.IP.String(), u.Port()) - } - } - } - return u.String() -} - -func getNseEndpoint(listenOn *url.URL, cfg *config.Config) *registryapi.NetworkServiceEndpoint { +func getNseEndpoint(listenOn *url.URL, cfg *config.Config, logger log.Logger) *registryapi.NetworkServiceEndpoint { expireTime := timestamppb.New(time.Now().Add(cfg.MaxTokenLifetime)) + pubURL := genPublishableURL(listenOn, logger) nse := ®istryapi.NetworkServiceEndpoint{ Name: cfg.Name, NetworkServiceNames: make([]string, len(cfg.Services)), NetworkServiceLabels: make(map[string]*registryapi.NetworkServiceLabels, len(cfg.Services)), - Url: getPublicURL(listenOn), + Url: pubURL.String(), ExpirationTime: expireTime, } @@ -307,6 +289,14 @@ func getNseEndpoint(listenOn *url.URL, cfg *config.Config) *registryapi.NetworkS } return nse } +func genPublishableURL(listenOn *url.URL, logger log.Logger) *url.URL { + addrs, err := net.InterfaceAddrs() + if err != nil { + logger.Warn(err.Error()) + return listenOn + } + return listenonurl.GetPublicURL(addrs, listenOn) +} func getIPAMChain(ctx context.Context, cIDRs []string) networkservice.NetworkServiceServer { var ipamchain []networkservice.NetworkServiceServer