diff --git a/cmd/kubefwd/services/services.go b/cmd/kubefwd/services/services.go index e81f0f00..0ed07517 100644 --- a/cmd/kubefwd/services/services.go +++ b/cmd/kubefwd/services/services.go @@ -245,6 +245,9 @@ Try: nsWatchesDone := &sync.WaitGroup{} // We'll wait on this to exit the program. Done() indicates that all namespace watches have shutdown cleanly. + // ShortName field only used if one namespace/context + useFullName := len(namespaces) > 1 || len(contexts) > 1 + for i, ctx := range contexts { // k8s REST config restConfig, err := configGetter.GetRestConfig(cfgFilePath, ctx) @@ -273,8 +276,7 @@ Try: for ii, namespace := range namespaces { nsWatchesDone.Add(1) - go func(ii int, namespace string) { - // ShortName field only use short name for the first namespace and context + go func(ctx string, namespace string, ipC int, ipD int) { nameSpaceOpts := NamespaceOpts{ ClientSet: clientSet, Context: ctx, @@ -284,16 +286,15 @@ Try: Hostfile: &fwdport.HostFileWithLock{Hosts: hostFile}, ClientConfig: restConfig, RESTClient: restClient, - ShortName: i < 1 && ii < 1, - Remote: i > 0, - IpC: byte(ipC + ii), + ShortName: !useFullName, + IpC: byte(ipC), IpD: ipD, Domain: domain, ManualStopChannel: stopListenCh, } nameSpaceOpts.watchServiceEvents(stopListenCh) nsWatchesDone.Done() - }(ii, namespace) + }(ctx, namespace, ipC+i, ipD+ii) } } @@ -316,7 +317,6 @@ type NamespaceOpts struct { ClientConfig *restclient.Config RESTClient *restclient.RESTClient ShortName bool - Remote bool IpC byte IpD int Domain string @@ -357,7 +357,7 @@ func (opts *NamespaceOpts) watchServiceEvents(stopListenCh <-chan struct{}) { // Start the informer, blocking call until we receive a stop signal controller.Run(stopListenCh) - log.Infof("Stopped watching Service events in namespace %s", opts.Namespace) + log.Infof("Stopped watching Service events in namespace %s, context %s", opts.Namespace, opts.Context) } // AddServiceHandler is the event handler for when a new service comes in from k8s (the initial list of services will also be coming in using this event for each). @@ -383,7 +383,6 @@ func (opts *NamespaceOpts) AddServiceHandler(obj interface{}) { ClientConfig: opts.ClientConfig, RESTClient: opts.RESTClient, ShortName: opts.ShortName, - Remote: opts.Remote, IpC: opts.IpC, IpD: &opts.IpD, Domain: opts.Domain, diff --git a/cmd/kubefwd/services/services_test.go b/cmd/kubefwd/services/services_test.go index e6f9ca9c..d1f6265d 100644 --- a/cmd/kubefwd/services/services_test.go +++ b/cmd/kubefwd/services/services_test.go @@ -123,7 +123,6 @@ func buildFwdServiceOpts(t *testing.T, namespace string) *FwdServiceOpts { ClientConfig: restConfig, RESTClient: restClient, ShortName: true, - Remote: false, IpC: byte(ipC), IpD: ipD, ExitOnFail: exitOnFail, diff --git a/pkg/fwdport/fwdport.go b/pkg/fwdport/fwdport.go index cbc0229a..1ad1df10 100644 --- a/pkg/fwdport/fwdport.go +++ b/pkg/fwdport/fwdport.go @@ -56,7 +56,6 @@ type PortForwardOpts struct { LocalPort string Hostfile *HostFileWithLock ShortName bool - Remote bool Domain string HostsParams *HostsParams ManualStopChan chan struct{} // Send a signal on this to stop the portforwarding @@ -154,11 +153,8 @@ func (pfo *PortForwardOpts) BuildTheHostsParams() { pfo.HostsParams = &HostsParams{} localServiceName := pfo.Service nsServiceName := pfo.Service + "." + pfo.Namespace - fullServiceName := fmt.Sprintf("%s.%s.svc.cluster.local", pfo.Service, pfo.Namespace) + fullServiceName := fmt.Sprintf("%s.%s.svc.cluster.%s", pfo.Service, pfo.Namespace, pfo.Context) svcServiceName := fmt.Sprintf("%s.%s.svc", pfo.Service, pfo.Namespace) - if pfo.Remote { - fullServiceName = fmt.Sprintf("%s.%s.svc.cluster.%s", pfo.Service, pfo.Namespace, pfo.Context) - } pfo.HostsParams.localServiceName = localServiceName pfo.HostsParams.nsServiceName = nsServiceName pfo.HostsParams.fullServiceName = fullServiceName @@ -169,40 +165,27 @@ func (pfo *PortForwardOpts) BuildTheHostsParams() { func (pfo *PortForwardOpts) AddHosts() { pfo.Hostfile.Lock() - if pfo.Remote { - - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.fullServiceName) - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.svcServiceName) + if pfo.ShortName { if pfo.Domain != "" { - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.Service+"."+pfo.Domain) - } - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.Service) - - } else { - - if pfo.ShortName { - if pfo.Domain != "" { - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName + "." + pfo.Domain) - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.localServiceName+"."+pfo.Domain) - } - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName) - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.localServiceName) + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName + "." + pfo.Domain) + pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.localServiceName+"."+pfo.Domain) } + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName) + pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.localServiceName) + } - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.fullServiceName) - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.fullServiceName) - - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.svcServiceName) - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.svcServiceName) + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.fullServiceName) + pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.fullServiceName) - if pfo.Domain != "" { - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName + "." + pfo.Domain) - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.nsServiceName+"."+pfo.Domain) - } - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName) - pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.nsServiceName) + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.svcServiceName) + pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.svcServiceName) + if pfo.Domain != "" { + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName + "." + pfo.Domain) + pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.nsServiceName+"."+pfo.Domain) } + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName) + pfo.Hostfile.Hosts.AddHost(pfo.LocalIp.String(), pfo.HostsParams.nsServiceName) err := pfo.Hostfile.Hosts.Save() if err != nil { log.Error("Error saving hosts file", err) @@ -223,18 +206,16 @@ func (pfo *PortForwardOpts) removeHosts() { return } - if !pfo.Remote { - if pfo.Domain != "" { - // fmt.Printf("removeHost: %s\r\n", (pfo.HostsParams.localServiceName + "." + pfo.Domain)) - // fmt.Printf("removeHost: %s\r\n", (pfo.HostsParams.nsServiceName + "." + pfo.Domain)) - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName + "." + pfo.Domain) - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName + "." + pfo.Domain) - } - // fmt.Printf("removeHost: %s\r\n", pfo.HostsParams.localServiceName) - // fmt.Printf("removeHost: %s\r\n", pfo.HostsParams.nsServiceName) - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName) - pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName) + if pfo.Domain != "" { + // fmt.Printf("removeHost: %s\r\n", (pfo.HostsParams.localServiceName + "." + pfo.Domain)) + // fmt.Printf("removeHost: %s\r\n", (pfo.HostsParams.nsServiceName + "." + pfo.Domain)) + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName + "." + pfo.Domain) + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName + "." + pfo.Domain) } + // fmt.Printf("removeHost: %s\r\n", pfo.HostsParams.localServiceName) + // fmt.Printf("removeHost: %s\r\n", pfo.HostsParams.nsServiceName) + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.localServiceName) + pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.nsServiceName) // fmt.Printf("removeHost: %s\r\n", pfo.HostsParams.fullServiceName) pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.fullServiceName) pfo.Hostfile.Hosts.RemoveHost(pfo.HostsParams.svcServiceName) diff --git a/pkg/fwdservice/fwdservice.go b/pkg/fwdservice/fwdservice.go index 5f8e8be2..0597e20b 100644 --- a/pkg/fwdservice/fwdservice.go +++ b/pkg/fwdservice/fwdservice.go @@ -29,7 +29,6 @@ type ServiceFWD struct { ClientConfig *restclient.Config RESTClient *restclient.RESTClient ShortName bool - Remote bool IpC byte IpD *int Domain string @@ -44,7 +43,7 @@ type ServiceFWD struct { } func (svcFwd *ServiceFWD) String() string { - return svcFwd.Svc.Name + "." + svcFwd.Namespace + return svcFwd.Svc.Name + "." + svcFwd.Namespace + "." + svcFwd.Context } // GetPodsForService queries k8s and returns all pods backing this service @@ -189,25 +188,15 @@ func (svcfwd *ServiceFWD) LoopPodsToForward(pods []v1.Pod, includePodNameInHost svcName = serviceHostName - if !svcfwd.ShortName { - serviceHostName = serviceHostName + "." + pod.Namespace - } - - if svcfwd.Domain != "" { - serviceHostName = serviceHostName + "." + svcfwd.Domain - } - - if svcfwd.Remote { - serviceHostName = fmt.Sprintf("%s.svc.cluster.%s", serviceHostName, svcfwd.Context) - } - log.Debugf("Resolving: %s to %s\n", serviceHostName, localIp.String(), ) - log.Printf("Port-Forward: %s:%d to pod %s:%s\n", - serviceHostName, + log.Printf("Port-Forward: %s.%s.svc.cluster.%s:%d to pod %s:%s\n", + svcfwd.Svc.Name, + svcfwd.Svc.Namespace, + svcfwd.Context, port.Port, pod.Name, podPort, @@ -228,7 +217,6 @@ func (svcfwd *ServiceFWD) LoopPodsToForward(pods []v1.Pod, includePodNameInHost LocalPort: localPort, Hostfile: svcfwd.Hostfile, ShortName: svcfwd.ShortName, - Remote: svcfwd.Remote, Domain: svcfwd.Domain, ManualStopChan: make(chan struct{}),