diff --git a/cmd/check/serverConnection.go b/cmd/check/serverConnection.go index 36bc08962..4c61043cd 100644 --- a/cmd/check/serverConnection.go +++ b/cmd/check/serverConnection.go @@ -12,14 +12,14 @@ func ServerConnection(kubernetesProvider *kubernetes.Provider) bool { var connectedToHub, connectedToFront bool - if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort), "/echo", kubernetesProvider); err != nil { + if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort), "/echo", kubernetesProvider); err != nil { log.Error().Err(err).Msg("Couldn't connect to Hub using proxy!") } else { connectedToHub = true log.Info().Msg("Connected successfully to Hub using proxy.") } - if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Front.SrcPort), "", kubernetesProvider); err != nil { + if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Front.SrcPort), "", kubernetesProvider); err != nil { log.Error().Err(err).Msg("Couldn't connect to Front using proxy!") } else { connectedToFront = true diff --git a/cmd/common.go b/cmd/common.go index 603404b6b..d5cc95496 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -21,7 +21,7 @@ import ( ) func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, ctx context.Context, cancel context.CancelFunc, serviceName string, proxyPortLabel string, srcPort uint16, dstPort uint16, healthCheck string) { - httpServer, err := kubernetes.StartProxy(kubernetesProvider, config.Config.Tap.ProxyHost, srcPort, config.Config.ResourcesNamespace, serviceName, cancel) + httpServer, err := kubernetes.StartProxy(kubernetesProvider, config.Config.Tap.Proxy.Host, srcPort, config.Config.ResourcesNamespace, serviceName, cancel) if err != nil { log.Error(). Err(errormessage.FormatError(err)). diff --git a/cmd/proxy.go b/cmd/proxy.go index 5d9dfdcb3..2114a0d85 100644 --- a/cmd/proxy.go +++ b/cmd/proxy.go @@ -24,7 +24,7 @@ func init() { log.Debug().Err(err).Send() } - proxyCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.") - proxyCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.") - proxyCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.ProxyHost, "Provide a custom host for the proxy/port-forward.") + proxyCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Proxy.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.") + proxyCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Proxy.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.") + proxyCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.Proxy.Host, "Provide a custom host for the proxy/port-forward.") } diff --git a/cmd/proxyRunner.go b/cmd/proxyRunner.go index d5133cc82..05580e84b 100644 --- a/cmd/proxyRunner.go +++ b/cmd/proxyRunner.go @@ -41,20 +41,20 @@ func runProxy() { return } - url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Front.SrcPort) + url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Front.SrcPort) response, err := http.Get(fmt.Sprintf("%s/", url)) if err == nil && response.StatusCode == 200 { log.Info(). Str("service", kubernetes.FrontServiceName). - Int("port", int(config.Config.Tap.Front.SrcPort)). + Int("port", int(config.Config.Tap.Proxy.Front.SrcPort)). Msg("Found a running service.") okToOpen(url) return } log.Info().Msg("Establishing connection to K8s cluster...") - startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortFrontLabel, config.Config.Tap.Front.SrcPort, config.Config.Tap.Front.DstPort, "") + startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortFrontLabel, config.Config.Tap.Proxy.Front.SrcPort, config.Config.Tap.Proxy.Front.DstPort, "") connector := connect.NewConnector(url, connect.DefaultRetries, connect.DefaultTimeout) if err := connector.TestConnection(""); err != nil { diff --git a/cmd/tap.go b/cmd/tap.go index 2d9acd3f6..c0f9391e3 100644 --- a/cmd/tap.go +++ b/cmd/tap.go @@ -48,9 +48,9 @@ func init() { tapCmd.Flags().StringP(configStructs.DockerRegistryLabel, "r", defaultTapConfig.DockerRegistry, "The Docker registry that's hosting the images.") tapCmd.Flags().StringP(configStructs.DockerTagLabel, "t", defaultTapConfig.DockerTag, "The tag of the Docker images that are going to be pulled.") - tapCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.") - tapCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.") - tapCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.ProxyHost, "Provide a custom host for the proxy/port-forward.") + tapCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Proxy.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.") + tapCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Proxy.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.") + tapCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.Proxy.Host, "Provide a custom host for the proxy/port-forward.") tapCmd.Flags().StringSliceP(configStructs.NamespacesLabel, "n", defaultTapConfig.Namespaces, "Namespaces selector.") tapCmd.Flags().BoolP(configStructs.AllNamespacesLabel, "A", defaultTapConfig.AllNamespaces, "Tap all namespaces.") tapCmd.Flags().String(configStructs.HumanMaxEntriesDBSizeLabel, defaultTapConfig.HumanMaxEntriesDBSize, "Override the default max entries db size.") diff --git a/cmd/tapPcapRunner.go b/cmd/tapPcapRunner.go index f54519a33..72f03ac77 100644 --- a/cmd/tapPcapRunner.go +++ b/cmd/tapPcapRunner.go @@ -102,10 +102,10 @@ func createAndStartContainers( hostConfigFront := &container.HostConfig{ PortBindings: nat.PortMap{ - nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Front.DstPort)): []nat.PortBinding{ + nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Proxy.Front.DstPort)): []nat.PortBinding{ { HostIP: hostIP, - HostPort: fmt.Sprintf("%d", config.Config.Tap.Front.SrcPort), + HostPort: fmt.Sprintf("%d", config.Config.Tap.Proxy.Front.SrcPort), }, }, }, @@ -130,16 +130,16 @@ func createAndStartContainers( hostConfigHub := &container.HostConfig{ PortBindings: nat.PortMap{ - nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Hub.DstPort)): []nat.PortBinding{ + nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Proxy.Hub.DstPort)): []nat.PortBinding{ { HostIP: hostIP, - HostPort: fmt.Sprintf("%d", config.Config.Tap.Hub.SrcPort), + HostPort: fmt.Sprintf("%d", config.Config.Tap.Proxy.Hub.SrcPort), }, }, }, } - cmdHub := []string{"-port", fmt.Sprintf("%d", config.Config.Tap.Hub.DstPort)} + cmdHub := []string{"-port", fmt.Sprintf("%d", config.Config.Tap.Proxy.Hub.DstPort)} if config.DebugMode { cmdHub = append(cmdHub, fmt.Sprintf("-%s", config.DebugFlag)) } @@ -148,7 +148,7 @@ func createAndStartContainers( Image: imageHub, Cmd: cmdHub, Tty: false, - ExposedPorts: nat.PortSet{nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Hub.DstPort)): {}}, + ExposedPorts: nat.PortSet{nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Proxy.Hub.DstPort)): {}}, }, hostConfigHub, nil, nil, "kubeshark-hub") if err != nil { return @@ -158,7 +158,7 @@ func createAndStartContainers( return } - cmdWorker := []string{"-f", "./import", "-port", fmt.Sprintf("%d", config.Config.Tap.Worker.DstPort)} + cmdWorker := []string{"-f", "./import", "-port", fmt.Sprintf("%d", config.Config.Tap.Proxy.Worker.DstPort)} if config.DebugMode { cmdWorker = append(cmdWorker, fmt.Sprintf("-%s", config.DebugFlag)) } @@ -285,14 +285,14 @@ func pcap(tarPath string) { }, } - connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout) + connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout) connector.PostWorkerPodToHub(workerPod) log.Info(). - Str("url", kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort)). + Str("url", kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort)). Msg(fmt.Sprintf(utils.Green, "Hub is available at:")) - url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Front.SrcPort) + url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Front.SrcPort) log.Info().Str("url", url).Msg(fmt.Sprintf(utils.Green, "Kubeshark is available at:")) if !config.Config.HeadlessMode { diff --git a/cmd/tapRunner.go b/cmd/tapRunner.go index 46d63142a..bea17d010 100644 --- a/cmd/tapRunner.go +++ b/cmd/tapRunner.go @@ -48,7 +48,7 @@ func tap() { return } - connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout) + connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout) kubernetesProvider, err := getKubernetesProviderForCli() if err != nil { @@ -441,21 +441,21 @@ func watchHubEvents(ctx context.Context, kubernetesProvider *kubernetes.Provider } func postHubStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) { - startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.HubServiceName, configStructs.ProxyPortFrontLabel, config.Config.Tap.Hub.SrcPort, config.Config.Tap.Hub.DstPort, "/echo") + startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.HubServiceName, configStructs.ProxyPortFrontLabel, config.Config.Tap.Proxy.Hub.SrcPort, config.Config.Tap.Proxy.Hub.DstPort, "/echo") if err := startWorkerSyncer(ctx, cancel, kubernetesProvider, state.targetNamespaces, state.startTime); err != nil { log.Error().Err(errormessage.FormatError(err)).Msg("Error starting worker syncer") cancel() } - url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort) + url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort) log.Info().Str("url", url).Msg(fmt.Sprintf(utils.Green, "Hub is available at:")) } func postFrontStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) { - startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortHubLabel, config.Config.Tap.Front.SrcPort, config.Config.Tap.Front.DstPort, "") + startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortHubLabel, config.Config.Tap.Proxy.Front.SrcPort, config.Config.Tap.Proxy.Front.DstPort, "") - url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Front.SrcPort) + url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Front.SrcPort) log.Info().Str("url", url).Msg(fmt.Sprintf(utils.Green, "Kubeshark is available at:")) if !config.Config.HeadlessMode { diff --git a/config/configStruct.go b/config/configStruct.go index 394b45c9a..cc740869b 100644 --- a/config/configStruct.go +++ b/config/configStruct.go @@ -18,24 +18,7 @@ const ( ) func CreateDefaultConfig() ConfigStruct { - config := ConfigStruct{} - - config.Tap.Worker = configStructs.WorkerConfig{ - SrcPort: 8897, - DstPort: 8897, - } - - config.Tap.Hub = configStructs.HubConfig{ - SrcPort: 8898, - DstPort: 8898, - } - - config.Tap.Front = configStructs.FrontConfig{ - SrcPort: 8899, - DstPort: 80, - } - - return config + return ConfigStruct{} } type ConfigStruct struct { diff --git a/config/configStructs/tapConfig.go b/config/configStructs/tapConfig.go index 188c7a662..fe4192ab1 100644 --- a/config/configStructs/tapConfig.go +++ b/config/configStructs/tapConfig.go @@ -39,14 +39,18 @@ type FrontConfig struct { DstPort uint16 `yaml:"dst-port" default:"80"` } +type ProxyConfig struct { + Worker WorkerConfig `yaml:"worker"` + Hub HubConfig `yaml:"hub"` + Front FrontConfig `yaml:"front"` + Host string `yaml:"host" default:"127.0.0.1"` +} + type TapConfig struct { - Worker WorkerConfig `yaml:"worker"` - Hub HubConfig `yaml:"hub"` - Front FrontConfig `yaml:"front"` + Proxy ProxyConfig `yaml:"proxy"` DockerRegistry string `yaml:"docker-registry" default:"docker.io/kubeshark"` DockerTag string `yaml:"docker-tag" default:"latest"` PodRegexStr string `yaml:"regex" default:".*"` - ProxyHost string `yaml:"proxy-host" default:"127.0.0.1"` Namespaces []string `yaml:"namespaces"` AllNamespaces bool `yaml:"all-namespaces" default:"false"` HumanMaxEntriesDBSize string `yaml:"max-entries-db-size" default:"200MB"` diff --git a/resources/createResources.go b/resources/createResources.go index dae54d8fa..85c26ba46 100644 --- a/resources/createResources.go +++ b/resources/createResources.go @@ -74,7 +74,7 @@ func CreateHubResources(ctx context.Context, kubernetesProvider *kubernetes.Prov log.Info().Str("service", kubernetes.HubServiceName).Msg("Successfully created a service.") - _, err = kubernetesProvider.CreateService(ctx, kubesharkResourcesNamespace, kubernetes.FrontServiceName, kubernetes.FrontServiceName, 80, int32(config.Config.Tap.Front.DstPort)) + _, err = kubernetesProvider.CreateService(ctx, kubesharkResourcesNamespace, kubernetes.FrontServiceName, kubernetes.FrontServiceName, 80, int32(config.Config.Tap.Proxy.Front.DstPort)) if err != nil { return kubesharkServiceAccountExists, err }