diff --git a/cmd/clean.go b/cmd/clean.go index 69020f489..ad6b42c88 100644 --- a/cmd/clean.go +++ b/cmd/clean.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/creasty/defaults" + "github.com/kubeshark/kubeshark/config" "github.com/kubeshark/kubeshark/config/configStructs" "github.com/kubeshark/kubeshark/kubernetes/helm" "github.com/kubeshark/kubeshark/misc" @@ -15,7 +16,11 @@ var cleanCmd = &cobra.Command{ Use: "clean", Short: fmt.Sprintf("Removes all %s resources", misc.Software), RunE: func(cmd *cobra.Command, args []string) error { - resp, err := helm.NewHelmDefault().Uninstall() + resp, err := helm.NewHelm( + config.Config.Tap.Release.Repo, + config.Config.Tap.Release.Name, + config.Config.Tap.Release.Namespace, + ).Uninstall() if err != nil { log.Error().Err(err).Send() } else { @@ -33,5 +38,5 @@ func init() { log.Debug().Err(err).Send() } - cleanCmd.Flags().StringP(configStructs.ReleaseNamespaceLabel, "s", defaultTapConfig.ReleaseNamespace, "Self-namespace of Kubeshark") + cleanCmd.Flags().StringP(configStructs.ReleaseNamespaceLabel, "s", defaultTapConfig.Release.Namespace, "Release namespace of Kubeshark") } diff --git a/cmd/common.go b/cmd/common.go index 3a8f513d1..753db264a 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -18,7 +18,7 @@ import ( ) func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, ctx context.Context, serviceName string, podName string, proxyPortLabel string, srcPort uint16, dstPort uint16, healthCheck string) { - httpServer, err := kubernetes.StartProxy(kubernetesProvider, config.Config.Tap.Proxy.Host, srcPort, config.Config.Tap.ReleaseNamespace, serviceName) + httpServer, err := kubernetes.StartProxy(kubernetesProvider, config.Config.Tap.Proxy.Host, srcPort, config.Config.Tap.Release.Namespace, serviceName) if err != nil { log.Error(). Err(errormessage.FormatError(err)). @@ -38,7 +38,7 @@ func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, ctx con } podRegex, _ := regexp.Compile(podName) - if _, err := kubernetes.NewPortForward(kubernetesProvider, config.Config.Tap.ReleaseNamespace, podRegex, srcPort, dstPort, ctx); err != nil { + if _, err := kubernetes.NewPortForward(kubernetesProvider, config.Config.Tap.Release.Namespace, podRegex, srcPort, dstPort, ctx); err != nil { log.Error(). Str("pod-regex", podRegex.String()). Err(errormessage.FormatError(err)). @@ -99,7 +99,7 @@ func handleKubernetesProviderError(err error) { } } -func finishSelfExecution(kubernetesProvider *kubernetes.Provider, isNsRestrictedMode bool, selfNamespace string) { +func finishSelfExecution(kubernetesProvider *kubernetes.Provider) { removalCtx, cancel := context.WithTimeout(context.Background(), cleanupTimeout) defer cancel() dumpLogsIfNeeded(removalCtx, kubernetesProvider) diff --git a/cmd/proxyRunner.go b/cmd/proxyRunner.go index d126908dd..2cc83818a 100644 --- a/cmd/proxyRunner.go +++ b/cmd/proxyRunner.go @@ -23,7 +23,7 @@ func runProxy(block bool, noBrowser bool) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - exists, err := kubernetesProvider.DoesServiceExist(ctx, config.Config.Tap.ReleaseNamespace, kubernetes.FrontServiceName) + exists, err := kubernetesProvider.DoesServiceExist(ctx, config.Config.Tap.Release.Namespace, kubernetes.FrontServiceName) if err != nil { log.Error(). Str("service", kubernetes.FrontServiceName). @@ -42,7 +42,7 @@ func runProxy(block bool, noBrowser bool) { return } - exists, err = kubernetesProvider.DoesServiceExist(ctx, config.Config.Tap.ReleaseNamespace, kubernetes.HubServiceName) + exists, err = kubernetesProvider.DoesServiceExist(ctx, config.Config.Tap.Release.Namespace, kubernetes.HubServiceName) if err != nil { log.Error(). Str("service", kubernetes.HubServiceName). diff --git a/cmd/tap.go b/cmd/tap.go index 7755e8659..4aeedae89 100644 --- a/cmd/tap.go +++ b/cmd/tap.go @@ -51,7 +51,7 @@ func init() { tapCmd.Flags().Uint16(configStructs.ProxyHubPortLabel, defaultTapConfig.Proxy.Hub.Port, "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().StringP(configStructs.ReleaseNamespaceLabel, "s", defaultTapConfig.ReleaseNamespace, "Self-namespace of Kubeshark") + tapCmd.Flags().StringP(configStructs.ReleaseNamespaceLabel, "s", defaultTapConfig.Release.Namespace, "Release namespace of Kubeshark") tapCmd.Flags().Bool(configStructs.PersistentStorageLabel, defaultTapConfig.PersistentStorage, "Enable persistent storage (PersistentVolumeClaim)") tapCmd.Flags().String(configStructs.StorageLimitLabel, defaultTapConfig.StorageLimit, "Override the default storage limit (per node)") tapCmd.Flags().String(configStructs.StorageClassLabel, defaultTapConfig.StorageClass, "Override the default storage class of the PersistentVolumeClaim (per node)") diff --git a/cmd/tapRunner.go b/cmd/tapRunner.go index b6a7a751e..eb1be1793 100644 --- a/cmd/tapRunner.go +++ b/cmd/tapRunner.go @@ -89,7 +89,11 @@ func tap() { log.Info().Msg(fmt.Sprintf("Waiting for the creation of %s resources...", misc.Software)) - rel, err := helm.NewHelmDefault().Install() + rel, err := helm.NewHelm( + config.Config.Tap.Release.Repo, + config.Config.Tap.Release.Name, + config.Config.Tap.Release.Namespace, + ).Install() if err != nil { log.Error().Err(err).Send() os.Exit(1) @@ -118,7 +122,7 @@ func printProxyCommandSuggestion() { } func finishTapExecution(kubernetesProvider *kubernetes.Provider) { - finishSelfExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.Tap.ReleaseNamespace) + finishSelfExecution(kubernetesProvider) } /* @@ -151,7 +155,7 @@ func printNoPodsFoundSuggestion(targetNamespaces []string) { func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) { podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s$", kubernetes.HubPodName)) podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex) - eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.ReleaseNamespace}, podWatchHelper) + eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.Release.Namespace}, podWatchHelper) isPodReady := false timeAfter := time.After(120 * time.Second) @@ -218,7 +222,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c log.Error(). Str("pod", kubernetes.HubPodName). - Str("namespace", config.Config.Tap.ReleaseNamespace). + Str("namespace", config.Config.Tap.Release.Namespace). Err(err). Msg("Failed creating pod.") cancel() @@ -242,7 +246,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) { podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s$", kubernetes.FrontPodName)) podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex) - eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.ReleaseNamespace}, podWatchHelper) + eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.Tap.Release.Namespace}, podWatchHelper) isPodReady := false timeAfter := time.After(120 * time.Second) @@ -307,7 +311,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, log.Error(). Str("pod", kubernetes.FrontPodName). - Str("namespace", config.Config.Tap.ReleaseNamespace). + Str("namespace", config.Config.Tap.Release.Namespace). Err(err). Msg("Failed creating pod.") @@ -330,7 +334,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, func watchHubEvents(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) { podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s", kubernetes.HubPodName)) eventWatchHelper := kubernetes.NewEventWatchHelper(kubernetesProvider, podExactRegex, "pod") - eventChan, errorChan := kubernetes.FilteredWatch(ctx, eventWatchHelper, []string{config.Config.Tap.ReleaseNamespace}, eventWatchHelper) + eventChan, errorChan := kubernetes.FilteredWatch(ctx, eventWatchHelper, []string{config.Config.Tap.Release.Namespace}, eventWatchHelper) for { select { case wEvent, ok := <-eventChan: diff --git a/config/configStruct.go b/config/configStruct.go index c80329fd7..5361b7a1f 100644 --- a/config/configStruct.go +++ b/config/configStruct.go @@ -5,7 +5,6 @@ import ( "path/filepath" "github.com/kubeshark/kubeshark/config/configStructs" - "github.com/kubeshark/kubeshark/misc" v1 "k8s.io/api/core/v1" "k8s.io/client-go/util/homedir" ) @@ -52,10 +51,6 @@ func (config *ConfigStruct) ImagePullSecrets() []v1.LocalObjectReference { return ref } -func (config *ConfigStruct) IsNsRestrictedMode() bool { - return config.Tap.ReleaseNamespace != misc.Program // Notice "kubeshark" string must match the default ReleaseNamespace -} - func (config *ConfigStruct) KubeConfigPath() string { if config.Kube.ConfigPathStr != "" { return config.Kube.ConfigPathStr diff --git a/config/configStructs/tapConfig.go b/config/configStructs/tapConfig.go index 2a5e23940..e44b2d560 100644 --- a/config/configStructs/tapConfig.go +++ b/config/configStructs/tapConfig.go @@ -17,7 +17,7 @@ const ( ProxyHubPortLabel = "proxy-hub-port" ProxyHostLabel = "proxy-host" NamespacesLabel = "namespaces" - ReleaseNamespaceLabel = "releasenamespace" + ReleaseNamespaceLabel = "release-namespace" PersistentStorageLabel = "persistentstorage" StorageLimitLabel = "storagelimit" StorageClassLabel = "storageclass" @@ -94,12 +94,18 @@ type IngressConfig struct { CertManager string `yaml:"certmanager" json:"certmanager" default:"letsencrypt-prod"` } +type ReleaseConfig struct { + Repo string `yaml:"repo" json:"repo" default:"https://helm.kubeshark.co"` + Name string `yaml:"name" json:"name" default:"kubeshark"` + Namespace string `yaml:"namespace" json:"namespace" default:"default"` +} + type TapConfig struct { Docker DockerConfig `yaml:"docker" json:"docker"` Proxy ProxyConfig `yaml:"proxy" json:"proxy"` PodRegexStr string `yaml:"regex" json:"regex" default:".*"` Namespaces []string `yaml:"namespaces" json:"namespaces" default:"[]"` - ReleaseNamespace string `yaml:"releasenamespace" json:"releasenamespace" default:"default"` + Release ReleaseConfig `yaml:"release" json:"release"` PersistentStorage bool `yaml:"persistentstorage" json:"persistentstorage" default:"false"` StorageLimit string `yaml:"storagelimit" json:"storagelimit" default:"200Mi"` StorageClass string `yaml:"storageclass" json:"storageclass" default:"standard"` diff --git a/helm-chart/values.yaml b/helm-chart/values.yaml index 7d999adf2..dd2e8e7d0 100644 --- a/helm-chart/values.yaml +++ b/helm-chart/values.yaml @@ -16,7 +16,10 @@ tap: host: 127.0.0.1 regex: .* namespaces: [] - releasenamespace: default + release: + repo: https://helm.kubeshark.co + name: kubeshark + namespace: default persistentstorage: false storagelimit: 200Mi storageclass: standard diff --git a/kubernetes/helm/helm.go b/kubernetes/helm/helm.go index ec8cc04ff..7378ed5ac 100644 --- a/kubernetes/helm/helm.go +++ b/kubernetes/helm/helm.go @@ -39,14 +39,6 @@ func NewHelm(repo string, releaseName string, releaseNamespace string) *Helm { } } -func NewHelmDefault() *Helm { - return &Helm{ - repo: "https://helm.kubeshark.co", - releaseName: "kubeshark", - releaseNamespace: "default", - } -} - func parseOCIRef(chartRef string) (string, string, error) { refTagRegexp := regexp.MustCompile(`^(oci://[^:]+(:[0-9]{1,5})?[^:]+):(.*)$`) caps := refTagRegexp.FindStringSubmatch(chartRef) diff --git a/misc/fsUtils/kubesharkLogsUtils.go b/misc/fsUtils/kubesharkLogsUtils.go index 52944a1ae..8368d66f6 100644 --- a/misc/fsUtils/kubesharkLogsUtils.go +++ b/misc/fsUtils/kubesharkLogsUtils.go @@ -15,13 +15,13 @@ import ( func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath string) error { podExactRegex := regexp.MustCompile("^" + kubernetes.SelfResourcesPrefix) - pods, err := provider.ListAllPodsMatchingRegex(ctx, podExactRegex, []string{config.Config.Tap.ReleaseNamespace}) + pods, err := provider.ListAllPodsMatchingRegex(ctx, podExactRegex, []string{config.Config.Tap.Release.Namespace}) if err != nil { return err } if len(pods) == 0 { - return fmt.Errorf("No %s pods found in namespace %s", misc.Software, config.Config.Tap.ReleaseNamespace) + return fmt.Errorf("No %s pods found in namespace %s", misc.Software, config.Config.Tap.Release.Namespace) } newZipFile, err := os.Create(filePath) @@ -60,17 +60,17 @@ func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath strin } } - events, err := provider.GetNamespaceEvents(ctx, config.Config.Tap.ReleaseNamespace) + events, err := provider.GetNamespaceEvents(ctx, config.Config.Tap.Release.Namespace) if err != nil { log.Error().Err(err).Msg("Failed to get k8b events!") } else { - log.Debug().Str("namespace", config.Config.Tap.ReleaseNamespace).Msg("Successfully read events.") + log.Debug().Str("namespace", config.Config.Tap.Release.Namespace).Msg("Successfully read events.") } - if err := AddStrToZip(zipWriter, events, fmt.Sprintf("%s_events.log", config.Config.Tap.ReleaseNamespace)); err != nil { + if err := AddStrToZip(zipWriter, events, fmt.Sprintf("%s_events.log", config.Config.Tap.Release.Namespace)); err != nil { log.Error().Err(err).Msg("Failed write logs!") } else { - log.Debug().Str("namespace", config.Config.Tap.ReleaseNamespace).Msg("Successfully added events.") + log.Debug().Str("namespace", config.Config.Tap.Release.Namespace).Msg("Successfully added events.") } if err := AddFileToZip(zipWriter, config.ConfigFilePath); err != nil {