mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-06-28 17:19:44 +00:00
⚡ Parse flags into config splitting by hyphen character
This commit is contained in:
parent
5c1ce859b1
commit
46c5e18937
@ -10,7 +10,7 @@ import (
|
|||||||
func KubernetesApi() (*kubernetes.Provider, *semver.SemVersion, bool) {
|
func KubernetesApi() (*kubernetes.Provider, *semver.SemVersion, bool) {
|
||||||
log.Info().Str("procedure", "kubernetes-api").Msg("Checking:")
|
log.Info().Str("procedure", "kubernetes-api").Msg("Checking:")
|
||||||
|
|
||||||
kubernetesProvider, err := kubernetes.NewProvider(config.Config.KubeConfigPath(), config.Config.KubeContext)
|
kubernetesProvider, err := kubernetes.NewProvider(config.Config.KubeConfigPath(), config.Config.Kube.Context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("Can't initialize the client!")
|
log.Error().Err(err).Msg("Can't initialize the client!")
|
||||||
return nil, nil, false
|
return nil, nil, false
|
||||||
|
@ -37,7 +37,7 @@ func KubernetesPermissions(ctx context.Context, embedFS embed.FS, kubernetesProv
|
|||||||
|
|
||||||
switch resource := obj.(type) {
|
switch resource := obj.(type) {
|
||||||
case *rbac.Role:
|
case *rbac.Role:
|
||||||
return checkRulesPermissions(ctx, kubernetesProvider, resource.Rules, config.Config.ResourcesNamespace)
|
return checkRulesPermissions(ctx, kubernetesProvider, resource.Rules, config.Config.SelfNamespace)
|
||||||
case *rbac.ClusterRole:
|
case *rbac.ClusterRole:
|
||||||
return checkRulesPermissions(ctx, kubernetesProvider, resource.Rules, "")
|
return checkRulesPermissions(ctx, kubernetesProvider, resource.Rules, "")
|
||||||
}
|
}
|
||||||
|
@ -12,20 +12,20 @@ import (
|
|||||||
func KubernetesResources(ctx context.Context, kubernetesProvider *kubernetes.Provider) bool {
|
func KubernetesResources(ctx context.Context, kubernetesProvider *kubernetes.Provider) bool {
|
||||||
log.Info().Str("procedure", "k8s-components").Msg("Checking:")
|
log.Info().Str("procedure", "k8s-components").Msg("Checking:")
|
||||||
|
|
||||||
exist, err := kubernetesProvider.DoesNamespaceExist(ctx, config.Config.ResourcesNamespace)
|
exist, err := kubernetesProvider.DoesNamespaceExist(ctx, config.Config.SelfNamespace)
|
||||||
allResourcesExist := checkResourceExist(config.Config.ResourcesNamespace, "namespace", exist, err)
|
allResourcesExist := checkResourceExist(config.Config.SelfNamespace, "namespace", exist, err)
|
||||||
|
|
||||||
exist, err = kubernetesProvider.DoesConfigMapExist(ctx, config.Config.ResourcesNamespace, kubernetes.ConfigMapName)
|
exist, err = kubernetesProvider.DoesConfigMapExist(ctx, config.Config.SelfNamespace, kubernetes.ConfigMapName)
|
||||||
allResourcesExist = checkResourceExist(kubernetes.ConfigMapName, "config map", exist, err) && allResourcesExist
|
allResourcesExist = checkResourceExist(kubernetes.ConfigMapName, "config map", exist, err) && allResourcesExist
|
||||||
|
|
||||||
exist, err = kubernetesProvider.DoesServiceAccountExist(ctx, config.Config.ResourcesNamespace, kubernetes.ServiceAccountName)
|
exist, err = kubernetesProvider.DoesServiceAccountExist(ctx, config.Config.SelfNamespace, kubernetes.ServiceAccountName)
|
||||||
allResourcesExist = checkResourceExist(kubernetes.ServiceAccountName, "service account", exist, err) && allResourcesExist
|
allResourcesExist = checkResourceExist(kubernetes.ServiceAccountName, "service account", exist, err) && allResourcesExist
|
||||||
|
|
||||||
if config.Config.IsNsRestrictedMode() {
|
if config.Config.IsNsRestrictedMode() {
|
||||||
exist, err = kubernetesProvider.DoesRoleExist(ctx, config.Config.ResourcesNamespace, kubernetes.RoleName)
|
exist, err = kubernetesProvider.DoesRoleExist(ctx, config.Config.SelfNamespace, kubernetes.RoleName)
|
||||||
allResourcesExist = checkResourceExist(kubernetes.RoleName, "role", exist, err) && allResourcesExist
|
allResourcesExist = checkResourceExist(kubernetes.RoleName, "role", exist, err) && allResourcesExist
|
||||||
|
|
||||||
exist, err = kubernetesProvider.DoesRoleBindingExist(ctx, config.Config.ResourcesNamespace, kubernetes.RoleBindingName)
|
exist, err = kubernetesProvider.DoesRoleBindingExist(ctx, config.Config.SelfNamespace, kubernetes.RoleBindingName)
|
||||||
allResourcesExist = checkResourceExist(kubernetes.RoleBindingName, "role binding", exist, err) && allResourcesExist
|
allResourcesExist = checkResourceExist(kubernetes.RoleBindingName, "role binding", exist, err) && allResourcesExist
|
||||||
} else {
|
} else {
|
||||||
exist, err = kubernetesProvider.DoesClusterRoleExist(ctx, kubernetes.ClusterRoleName)
|
exist, err = kubernetesProvider.DoesClusterRoleExist(ctx, kubernetes.ClusterRoleName)
|
||||||
@ -35,7 +35,7 @@ func KubernetesResources(ctx context.Context, kubernetesProvider *kubernetes.Pro
|
|||||||
allResourcesExist = checkResourceExist(kubernetes.ClusterRoleBindingName, "cluster role binding", exist, err) && allResourcesExist
|
allResourcesExist = checkResourceExist(kubernetes.ClusterRoleBindingName, "cluster role binding", exist, err) && allResourcesExist
|
||||||
}
|
}
|
||||||
|
|
||||||
exist, err = kubernetesProvider.DoesServiceExist(ctx, config.Config.ResourcesNamespace, kubernetes.HubServiceName)
|
exist, err = kubernetesProvider.DoesServiceExist(ctx, config.Config.SelfNamespace, kubernetes.HubServiceName)
|
||||||
allResourcesExist = checkResourceExist(kubernetes.HubServiceName, "service", exist, err) && allResourcesExist
|
allResourcesExist = checkResourceExist(kubernetes.HubServiceName, "service", exist, err) && allResourcesExist
|
||||||
|
|
||||||
allResourcesExist = checkPodResourcesExist(ctx, kubernetesProvider) && allResourcesExist
|
allResourcesExist = checkPodResourcesExist(ctx, kubernetesProvider) && allResourcesExist
|
||||||
@ -44,7 +44,7 @@ func KubernetesResources(ctx context.Context, kubernetesProvider *kubernetes.Pro
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkPodResourcesExist(ctx context.Context, kubernetesProvider *kubernetes.Provider) bool {
|
func checkPodResourcesExist(ctx context.Context, kubernetesProvider *kubernetes.Provider) bool {
|
||||||
if pods, err := kubernetesProvider.ListPodsByAppLabel(ctx, config.Config.ResourcesNamespace, kubernetes.HubPodName); err != nil {
|
if pods, err := kubernetesProvider.ListPodsByAppLabel(ctx, config.Config.SelfNamespace, kubernetes.HubPodName); err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Str("name", kubernetes.HubPodName).
|
Str("name", kubernetes.HubPodName).
|
||||||
Err(err).
|
Err(err).
|
||||||
@ -66,7 +66,7 @@ func checkPodResourcesExist(ctx context.Context, kubernetesProvider *kubernetes.
|
|||||||
Str("name", kubernetes.HubPodName).
|
Str("name", kubernetes.HubPodName).
|
||||||
Msg("Pod is running.")
|
Msg("Pod is running.")
|
||||||
|
|
||||||
if pods, err := kubernetesProvider.ListPodsByAppLabel(ctx, config.Config.ResourcesNamespace, kubernetes.WorkerPodName); err != nil {
|
if pods, err := kubernetesProvider.ListPodsByAppLabel(ctx, config.Config.SelfNamespace, kubernetes.WorkerPodName); err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Str("name", kubernetes.WorkerPodName).
|
Str("name", kubernetes.WorkerPodName).
|
||||||
Err(err).
|
Err(err).
|
||||||
|
@ -10,5 +10,5 @@ func performCleanCommand() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
finishKubesharkExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.ResourcesNamespace)
|
finishKubesharkExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.SelfNamespace)
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
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.Proxy.Host, srcPort, config.Config.ResourcesNamespace, serviceName, cancel)
|
httpServer, err := kubernetes.StartProxy(kubernetesProvider, config.Config.Tap.Proxy.Host, srcPort, config.Config.SelfNamespace, serviceName, cancel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Err(errormessage.FormatError(err)).
|
Err(errormessage.FormatError(err)).
|
||||||
@ -40,7 +40,7 @@ func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, ctx con
|
|||||||
}
|
}
|
||||||
|
|
||||||
podRegex, _ := regexp.Compile(kubernetes.HubPodName)
|
podRegex, _ := regexp.Compile(kubernetes.HubPodName)
|
||||||
if _, err := kubernetes.NewPortForward(kubernetesProvider, config.Config.ResourcesNamespace, podRegex, srcPort, dstPort, ctx, cancel); err != nil {
|
if _, err := kubernetes.NewPortForward(kubernetesProvider, config.Config.SelfNamespace, podRegex, srcPort, dstPort, ctx, cancel); err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Str("pod-regex", podRegex.String()).
|
Str("pod-regex", podRegex.String()).
|
||||||
Err(errormessage.FormatError(err)).
|
Err(errormessage.FormatError(err)).
|
||||||
@ -62,7 +62,7 @@ func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, ctx con
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getKubernetesProviderForCli() (*kubernetes.Provider, error) {
|
func getKubernetesProviderForCli() (*kubernetes.Provider, error) {
|
||||||
kubernetesProvider, err := kubernetes.NewProvider(config.Config.KubeConfigPath(), config.Config.KubeContext)
|
kubernetesProvider, err := kubernetes.NewProvider(config.Config.KubeConfigPath(), config.Config.Kube.Context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handleKubernetesProviderError(err)
|
handleKubernetesProviderError(err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -24,7 +24,7 @@ func init() {
|
|||||||
log.Debug().Err(err).Send()
|
log.Debug().Err(err).Send()
|
||||||
}
|
}
|
||||||
|
|
||||||
proxyCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Proxy.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.")
|
proxyCmd.Flags().Uint16(configStructs.ProxyFrontPortLabel, 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().Uint16(configStructs.ProxyHubPortLabel, 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.")
|
proxyCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.Proxy.Host, "Provide a custom host for the proxy/port-forward.")
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ func runProxy() {
|
|||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
exists, err := kubernetesProvider.DoesServiceExist(ctx, config.Config.ResourcesNamespace, kubernetes.FrontServiceName)
|
exists, err := kubernetesProvider.DoesServiceExist(ctx, config.Config.SelfNamespace, kubernetes.FrontServiceName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Str("service", "kubeshark").
|
Str("service", "kubeshark").
|
||||||
@ -54,7 +54,7 @@ func runProxy() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info().Msg("Establishing connection to K8s cluster...")
|
log.Info().Msg("Establishing connection to K8s cluster...")
|
||||||
startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortFrontLabel, config.Config.Tap.Proxy.Front.SrcPort, config.Config.Tap.Proxy.Front.DstPort, "")
|
startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyFrontPortLabel, config.Config.Tap.Proxy.Front.SrcPort, config.Config.Tap.Proxy.Front.DstPort, "")
|
||||||
|
|
||||||
connector := connect.NewConnector(url, connect.DefaultRetries, connect.DefaultTimeout)
|
connector := connect.NewConnector(url, connect.DefaultRetries, connect.DefaultTimeout)
|
||||||
if err := connector.TestConnection(""); err != nil {
|
if err := connector.TestConnection(""); err != nil {
|
||||||
|
@ -48,8 +48,8 @@ func init() {
|
|||||||
|
|
||||||
tapCmd.Flags().StringP(configStructs.DockerRegistryLabel, "r", defaultTapConfig.Docker.Registry, "The Docker registry that's hosting the images.")
|
tapCmd.Flags().StringP(configStructs.DockerRegistryLabel, "r", defaultTapConfig.Docker.Registry, "The Docker registry that's hosting the images.")
|
||||||
tapCmd.Flags().StringP(configStructs.DockerTagLabel, "t", defaultTapConfig.Docker.Tag, "The tag of the Docker images that are going to be pulled.")
|
tapCmd.Flags().StringP(configStructs.DockerTagLabel, "t", defaultTapConfig.Docker.Tag, "The tag of the Docker images that are going to be pulled.")
|
||||||
tapCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Proxy.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.")
|
tapCmd.Flags().Uint16(configStructs.ProxyFrontPortLabel, 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().Uint16(configStructs.ProxyHubPortLabel, 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().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().StringSliceP(configStructs.NamespacesLabel, "n", defaultTapConfig.Namespaces, "Namespaces selector.")
|
||||||
tapCmd.Flags().BoolP(configStructs.AllNamespacesLabel, "A", defaultTapConfig.AllNamespaces, "Tap all namespaces.")
|
tapCmd.Flags().BoolP(configStructs.AllNamespacesLabel, "A", defaultTapConfig.AllNamespaces, "Tap all namespaces.")
|
||||||
|
@ -68,8 +68,8 @@ func tap() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if config.Config.IsNsRestrictedMode() {
|
if config.Config.IsNsRestrictedMode() {
|
||||||
if len(state.targetNamespaces) != 1 || !utils.Contains(state.targetNamespaces, config.Config.ResourcesNamespace) {
|
if len(state.targetNamespaces) != 1 || !utils.Contains(state.targetNamespaces, config.Config.SelfNamespace) {
|
||||||
log.Error().Msg(fmt.Sprintf("Kubeshark can't resolve IPs in other namespaces when running in namespace restricted mode. You can use the same namespace for --%s and --%s", configStructs.NamespacesLabel, config.ResourcesNamespaceConfigName))
|
log.Error().Msg(fmt.Sprintf("Kubeshark can't resolve IPs in other namespaces when running in namespace restricted mode. You can use the same namespace for --%s and --%s", configStructs.NamespacesLabel, config.SelfNamespaceConfigName))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,12 +85,12 @@ func tap() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Info().Msg("Waiting for the creation of Kubeshark resources...")
|
log.Info().Msg("Waiting for the creation of Kubeshark resources...")
|
||||||
if state.kubesharkServiceAccountExists, err = resources.CreateHubResources(ctx, kubernetesProvider, serializedKubesharkConfig, config.Config.IsNsRestrictedMode(), config.Config.ResourcesNamespace, config.Config.Tap.MaxEntriesDBSizeBytes(), config.Config.Tap.Resources.Hub, config.Config.ImagePullPolicy(), config.Config.Tap.Debug); err != nil {
|
if state.kubesharkServiceAccountExists, err = resources.CreateHubResources(ctx, kubernetesProvider, serializedKubesharkConfig, config.Config.IsNsRestrictedMode(), config.Config.SelfNamespace, config.Config.Tap.MaxEntriesDBSizeBytes(), config.Config.Tap.Resources.Hub, config.Config.ImagePullPolicy(), config.Config.Tap.Debug); err != nil {
|
||||||
var statusError *k8serrors.StatusError
|
var statusError *k8serrors.StatusError
|
||||||
if errors.As(err, &statusError) && (statusError.ErrStatus.Reason == metav1.StatusReasonAlreadyExists) {
|
if errors.As(err, &statusError) && (statusError.ErrStatus.Reason == metav1.StatusReasonAlreadyExists) {
|
||||||
log.Warn().Msg("Kubeshark is already running in this namespace, change the `kubeshark-resources-namespace` configuration or run `kubeshark clean` to remove the currently running Kubeshark instance")
|
log.Warn().Msg("Kubeshark is already running in this namespace, change the `kubeshark-resources-namespace` configuration or run `kubeshark clean` to remove the currently running Kubeshark instance")
|
||||||
} else {
|
} else {
|
||||||
defer resources.CleanUpKubesharkResources(ctx, cancel, kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.ResourcesNamespace)
|
defer resources.CleanUpKubesharkResources(ctx, cancel, kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.SelfNamespace)
|
||||||
log.Error().Err(errormessage.FormatError(err)).Msg("Error creating resources!")
|
log.Error().Err(errormessage.FormatError(err)).Msg("Error creating resources!")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,15 +108,15 @@ func tap() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func finishTapExecution(kubernetesProvider *kubernetes.Provider) {
|
func finishTapExecution(kubernetesProvider *kubernetes.Provider) {
|
||||||
finishKubesharkExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.ResourcesNamespace)
|
finishKubesharkExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.SelfNamespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTapConfig() *models.Config {
|
func getTapConfig() *models.Config {
|
||||||
conf := models.Config{
|
conf := models.Config{
|
||||||
MaxDBSizeBytes: config.Config.Tap.MaxEntriesDBSizeBytes(),
|
MaxDBSizeBytes: config.Config.Tap.MaxEntriesDBSizeBytes(),
|
||||||
PullPolicy: config.Config.ImagePullPolicyStr,
|
PullPolicy: config.Config.Tap.Docker.ImagePullPolicy,
|
||||||
WorkerResources: config.Config.Tap.Resources.Worker,
|
WorkerResources: config.Config.Tap.Resources.Worker,
|
||||||
ResourcesNamespace: config.Config.ResourcesNamespace,
|
ResourcesNamespace: config.Config.SelfNamespace,
|
||||||
DatabasePath: models.DataDirPath,
|
DatabasePath: models.DataDirPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ func startWorkerSyncer(ctx context.Context, cancel context.CancelFunc, provider
|
|||||||
workerSyncer, err := kubernetes.CreateAndStartWorkerSyncer(ctx, provider, kubernetes.WorkerSyncerConfig{
|
workerSyncer, err := kubernetes.CreateAndStartWorkerSyncer(ctx, provider, kubernetes.WorkerSyncerConfig{
|
||||||
TargetNamespaces: targetNamespaces,
|
TargetNamespaces: targetNamespaces,
|
||||||
PodFilterRegex: *config.Config.Tap.PodRegex(),
|
PodFilterRegex: *config.Config.Tap.PodRegex(),
|
||||||
KubesharkResourcesNamespace: config.Config.ResourcesNamespace,
|
SelfNamespace: config.Config.SelfNamespace,
|
||||||
WorkerResources: config.Config.Tap.Resources.Worker,
|
WorkerResources: config.Config.Tap.Resources.Worker,
|
||||||
ImagePullPolicy: config.Config.ImagePullPolicy(),
|
ImagePullPolicy: config.Config.ImagePullPolicy(),
|
||||||
KubesharkServiceAccountExists: state.kubesharkServiceAccountExists,
|
KubesharkServiceAccountExists: state.kubesharkServiceAccountExists,
|
||||||
@ -215,7 +215,7 @@ func getK8sTapManagerErrorText(err kubernetes.K8sTapManagerError) string {
|
|||||||
func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
||||||
podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s$", kubernetes.HubPodName))
|
podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s$", kubernetes.HubPodName))
|
||||||
podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex)
|
podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex)
|
||||||
eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.ResourcesNamespace}, podWatchHelper)
|
eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.SelfNamespace}, podWatchHelper)
|
||||||
isPodReady := false
|
isPodReady := false
|
||||||
|
|
||||||
timeAfter := time.After(120 * time.Second)
|
timeAfter := time.After(120 * time.Second)
|
||||||
@ -271,7 +271,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c
|
|||||||
|
|
||||||
log.Error().
|
log.Error().
|
||||||
Str("pod", kubernetes.HubPodName).
|
Str("pod", kubernetes.HubPodName).
|
||||||
Str("namespace", config.Config.ResourcesNamespace).
|
Str("namespace", config.Config.SelfNamespace).
|
||||||
Err(err).
|
Err(err).
|
||||||
Msg("Failed creating pod.")
|
Msg("Failed creating pod.")
|
||||||
cancel()
|
cancel()
|
||||||
@ -295,7 +295,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c
|
|||||||
func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
||||||
podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s$", kubernetes.FrontPodName))
|
podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s$", kubernetes.FrontPodName))
|
||||||
podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex)
|
podWatchHelper := kubernetes.NewPodWatchHelper(kubernetesProvider, podExactRegex)
|
||||||
eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.ResourcesNamespace}, podWatchHelper)
|
eventChan, errorChan := kubernetes.FilteredWatch(ctx, podWatchHelper, []string{config.Config.SelfNamespace}, podWatchHelper)
|
||||||
isPodReady := false
|
isPodReady := false
|
||||||
|
|
||||||
timeAfter := time.After(120 * time.Second)
|
timeAfter := time.After(120 * time.Second)
|
||||||
@ -350,7 +350,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider,
|
|||||||
|
|
||||||
log.Error().
|
log.Error().
|
||||||
Str("pod", kubernetes.FrontPodName).
|
Str("pod", kubernetes.FrontPodName).
|
||||||
Str("namespace", config.Config.ResourcesNamespace).
|
Str("namespace", config.Config.SelfNamespace).
|
||||||
Err(err).
|
Err(err).
|
||||||
Msg("Failed creating pod.")
|
Msg("Failed creating pod.")
|
||||||
cancel()
|
cancel()
|
||||||
@ -374,7 +374,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider,
|
|||||||
func watchHubEvents(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
func watchHubEvents(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
||||||
podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s", kubernetes.HubPodName))
|
podExactRegex := regexp.MustCompile(fmt.Sprintf("^%s", kubernetes.HubPodName))
|
||||||
eventWatchHelper := kubernetes.NewEventWatchHelper(kubernetesProvider, podExactRegex, "pod")
|
eventWatchHelper := kubernetes.NewEventWatchHelper(kubernetesProvider, podExactRegex, "pod")
|
||||||
eventChan, errorChan := kubernetes.FilteredWatch(ctx, eventWatchHelper, []string{config.Config.ResourcesNamespace}, eventWatchHelper)
|
eventChan, errorChan := kubernetes.FilteredWatch(ctx, eventWatchHelper, []string{config.Config.SelfNamespace}, eventWatchHelper)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case wEvent, ok := <-eventChan:
|
case wEvent, ok := <-eventChan:
|
||||||
@ -441,7 +441,7 @@ func watchHubEvents(ctx context.Context, kubernetesProvider *kubernetes.Provider
|
|||||||
}
|
}
|
||||||
|
|
||||||
func postHubStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
func postHubStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
||||||
startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.HubServiceName, configStructs.ProxyPortFrontLabel, config.Config.Tap.Proxy.Hub.SrcPort, config.Config.Tap.Proxy.Hub.DstPort, "/echo")
|
startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.HubServiceName, configStructs.ProxyFrontPortLabel, 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 {
|
if err := startWorkerSyncer(ctx, cancel, kubernetesProvider, state.targetNamespaces, state.startTime); err != nil {
|
||||||
log.Error().Err(errormessage.FormatError(err)).Msg("Error starting worker syncer")
|
log.Error().Err(errormessage.FormatError(err)).Msg("Error starting worker syncer")
|
||||||
@ -453,7 +453,7 @@ func postHubStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider
|
|||||||
}
|
}
|
||||||
|
|
||||||
func postFrontStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
func postFrontStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
||||||
startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortHubLabel, config.Config.Tap.Proxy.Front.SrcPort, config.Config.Tap.Proxy.Front.DstPort, "")
|
startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyHubPortLabel, config.Config.Tap.Proxy.Front.SrcPort, config.Config.Tap.Proxy.Front.DstPort, "")
|
||||||
|
|
||||||
url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.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:"))
|
log.Info().Str("url", url).Msg(fmt.Sprintf(utils.Green, "Kubeshark is available at:"))
|
||||||
|
@ -123,12 +123,12 @@ func initFlag(f *pflag.Flag) {
|
|||||||
configElemValue := reflect.ValueOf(&Config).Elem()
|
configElemValue := reflect.ValueOf(&Config).Elem()
|
||||||
|
|
||||||
var flagPath []string
|
var flagPath []string
|
||||||
if utils.Contains([]string{ConfigFilePathCommandName}, f.Name) {
|
if !utils.Contains([]string{ConfigFilePathCommandName}, f.Name) {
|
||||||
flagPath = []string{f.Name}
|
flagPath = append(flagPath, cmdName)
|
||||||
} else {
|
|
||||||
flagPath = []string{cmdName, f.Name}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flagPath = append(flagPath, strings.Split(f.Name, "-")...)
|
||||||
|
|
||||||
sliceValue, isSliceValue := f.Value.(pflag.SliceValue)
|
sliceValue, isSliceValue := f.Value.(pflag.SliceValue)
|
||||||
if !isSliceValue {
|
if !isSliceValue {
|
||||||
if err := mergeFlagValue(configElemValue, flagPath, strings.Join(flagPath, "."), f.Value.String()); err != nil {
|
if err := mergeFlagValue(configElemValue, flagPath, strings.Join(flagPath, "."), f.Value.String()); err != nil {
|
||||||
|
@ -12,26 +12,29 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ResourcesNamespaceConfigName = "resources-namespace"
|
SelfNamespaceConfigName = "selfnamespace"
|
||||||
ConfigFilePathCommandName = "config-path"
|
ConfigFilePathCommandName = "configpath"
|
||||||
KubeConfigPathConfigName = "kube-config-path"
|
KubeConfigPathConfigName = "kube-configpath"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateDefaultConfig() ConfigStruct {
|
func CreateDefaultConfig() ConfigStruct {
|
||||||
return ConfigStruct{}
|
return ConfigStruct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type KubeConfig struct {
|
||||||
|
ConfigPathStr string `yaml:"configpath"`
|
||||||
|
Context string `yaml:"context"`
|
||||||
|
}
|
||||||
|
|
||||||
type ConfigStruct struct {
|
type ConfigStruct struct {
|
||||||
Tap configStructs.TapConfig `yaml:"tap"`
|
Tap configStructs.TapConfig `yaml:"tap"`
|
||||||
Logs configStructs.LogsConfig `yaml:"logs"`
|
Logs configStructs.LogsConfig `yaml:"logs"`
|
||||||
Config configStructs.ConfigConfig `yaml:"config,omitempty"`
|
Config configStructs.ConfigConfig `yaml:"config,omitempty"`
|
||||||
ImagePullPolicyStr string `yaml:"image-pull-policy" default:"Always"`
|
Kube KubeConfig `yaml:"kube"`
|
||||||
ResourcesNamespace string `yaml:"resources-namespace" default:"kubeshark"`
|
SelfNamespace string `yaml:"selfnamespace" default:"kubeshark"`
|
||||||
DumpLogs bool `yaml:"dump-logs" default:"false"`
|
DumpLogs bool `yaml:"dumplogs" default:"false"`
|
||||||
KubeConfigPathStr string `yaml:"kube-config-path"`
|
ConfigFilePath string `yaml:"configpath" readonly:""`
|
||||||
KubeContext string `yaml:"kube-context"`
|
HeadlessMode bool `yaml:"headless" default:"false"`
|
||||||
ConfigFilePath string `yaml:"config-path,omitempty" readonly:""`
|
|
||||||
HeadlessMode bool `yaml:"headless" default:"false"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *ConfigStruct) SetDefaults() {
|
func (config *ConfigStruct) SetDefaults() {
|
||||||
@ -39,16 +42,16 @@ func (config *ConfigStruct) SetDefaults() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (config *ConfigStruct) ImagePullPolicy() v1.PullPolicy {
|
func (config *ConfigStruct) ImagePullPolicy() v1.PullPolicy {
|
||||||
return v1.PullPolicy(config.ImagePullPolicyStr)
|
return v1.PullPolicy(config.Tap.Docker.ImagePullPolicy)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *ConfigStruct) IsNsRestrictedMode() bool {
|
func (config *ConfigStruct) IsNsRestrictedMode() bool {
|
||||||
return config.ResourcesNamespace != "kubeshark" // Notice "kubeshark" string must match the default KubesharkResourcesNamespace
|
return config.SelfNamespace != "kubeshark" // Notice "kubeshark" string must match the default SelfNamespace
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *ConfigStruct) KubeConfigPath() string {
|
func (config *ConfigStruct) KubeConfigPath() string {
|
||||||
if config.KubeConfigPathStr != "" {
|
if config.Kube.ConfigPathStr != "" {
|
||||||
return config.KubeConfigPathStr
|
return config.Kube.ConfigPathStr
|
||||||
}
|
}
|
||||||
|
|
||||||
envKubeConfigPath := os.Getenv("KUBECONFIG")
|
envKubeConfigPath := os.Getenv("KUBECONFIG")
|
||||||
|
@ -11,15 +11,15 @@ import (
|
|||||||
const (
|
const (
|
||||||
DockerRegistryLabel = "docker-registry"
|
DockerRegistryLabel = "docker-registry"
|
||||||
DockerTagLabel = "docker-tag"
|
DockerTagLabel = "docker-tag"
|
||||||
ProxyPortFrontLabel = "proxy-port-front"
|
ProxyFrontPortLabel = "proxy-front-port"
|
||||||
ProxyPortHubLabel = "proxy-port-hub"
|
ProxyHubPortLabel = "proxy-hub-port"
|
||||||
ProxyHostLabel = "proxy-host"
|
ProxyHostLabel = "proxy-host"
|
||||||
NamespacesLabel = "namespaces"
|
NamespacesLabel = "namespaces"
|
||||||
AllNamespacesLabel = "all-namespaces"
|
AllNamespacesLabel = "allnamespaces"
|
||||||
HumanMaxEntriesDBSizeLabel = "max-entries-db-size"
|
HumanMaxEntriesDBSizeLabel = "max-entries-db-size"
|
||||||
DryRunLabel = "dry-run"
|
DryRunLabel = "dryrun"
|
||||||
PcapLabel = "pcap"
|
PcapLabel = "pcap"
|
||||||
ServiceMeshLabel = "service-mesh"
|
ServiceMeshLabel = "servicemesh"
|
||||||
TlsLabel = "tls"
|
TlsLabel = "tls"
|
||||||
DebugLabel = "debug"
|
DebugLabel = "debug"
|
||||||
)
|
)
|
||||||
@ -47,8 +47,9 @@ type ProxyConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DockerConfig struct {
|
type DockerConfig struct {
|
||||||
Registry string `yaml:"registry" default:"docker.io/kubeshark"`
|
Registry string `yaml:"registry" default:"docker.io/kubeshark"`
|
||||||
Tag string `yaml:"tag" default:"latest"`
|
Tag string `yaml:"tag" default:"latest"`
|
||||||
|
ImagePullPolicy string `yaml:"imagepullpolicy" default:"Always"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ResourcesConfig struct {
|
type ResourcesConfig struct {
|
||||||
@ -61,14 +62,14 @@ type TapConfig struct {
|
|||||||
Proxy ProxyConfig `yaml:"proxy"`
|
Proxy ProxyConfig `yaml:"proxy"`
|
||||||
PodRegexStr string `yaml:"regex" default:".*"`
|
PodRegexStr string `yaml:"regex" default:".*"`
|
||||||
Namespaces []string `yaml:"namespaces"`
|
Namespaces []string `yaml:"namespaces"`
|
||||||
AllNamespaces bool `yaml:"all-namespaces" default:"false"`
|
AllNamespaces bool `yaml:"allnamespaces" default:"false"`
|
||||||
HumanMaxEntriesDBSize string `yaml:"max-entries-db-size" default:"200MB"`
|
HumanMaxEntriesDBSize string `yaml:"max-entries-db-size" default:"200MB"`
|
||||||
DryRun bool `yaml:"dry-run" default:"false"`
|
DryRun bool `yaml:"dryrun" default:"false"`
|
||||||
Pcap string `yaml:"pcap" default:""`
|
Pcap string `yaml:"pcap" default:""`
|
||||||
Resources ResourcesConfig `yaml:"resources"`
|
Resources ResourcesConfig `yaml:"resources"`
|
||||||
ServiceMesh bool `yaml:"service-mesh" default:"true"`
|
ServiceMesh bool `yaml:"servicemesh" default:"true"`
|
||||||
Tls bool `yaml:"tls" default:"true"`
|
Tls bool `yaml:"tls" default:"true"`
|
||||||
PacketCapture string `yaml:"packet-capture" default:"libpcap"`
|
PacketCapture string `yaml:"packetcapture" default:"libpcap"`
|
||||||
Debug bool `yaml:"debug" default:"false"`
|
Debug bool `yaml:"debug" default:"false"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,9 +19,9 @@ func FormatError(err error) error {
|
|||||||
"supply the required permission or control Kubeshark's access to namespaces by setting %s "+
|
"supply the required permission or control Kubeshark's access to namespaces by setting %s "+
|
||||||
"in the config file or setting the targetted namespace with --%s %s=<NAMEPSACE>",
|
"in the config file or setting the targetted namespace with --%s %s=<NAMEPSACE>",
|
||||||
err,
|
err,
|
||||||
config.ResourcesNamespaceConfigName,
|
config.SelfNamespaceConfigName,
|
||||||
config.SetCommandName,
|
config.SetCommandName,
|
||||||
config.ResourcesNamespaceConfigName)
|
config.SelfNamespaceConfigName)
|
||||||
} else if syntaxError, isSyntaxError := asRegexSyntaxError(err); isSyntaxError {
|
} else if syntaxError, isSyntaxError := asRegexSyntaxError(err); isSyntaxError {
|
||||||
errorNew = fmt.Errorf("regex %s is invalid: %w", syntaxError.Expr, err)
|
errorNew = fmt.Errorf("regex %s is invalid: %w", syntaxError.Expr, err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -38,7 +38,7 @@ type WorkerSyncer struct {
|
|||||||
type WorkerSyncerConfig struct {
|
type WorkerSyncerConfig struct {
|
||||||
TargetNamespaces []string
|
TargetNamespaces []string
|
||||||
PodFilterRegex regexp.Regexp
|
PodFilterRegex regexp.Regexp
|
||||||
KubesharkResourcesNamespace string
|
SelfNamespace string
|
||||||
WorkerResources models.Resources
|
WorkerResources models.Resources
|
||||||
ImagePullPolicy v1.PullPolicy
|
ImagePullPolicy v1.PullPolicy
|
||||||
KubesharkServiceAccountExists bool
|
KubesharkServiceAccountExists bool
|
||||||
@ -76,7 +76,7 @@ func CreateAndStartWorkerSyncer(ctx context.Context, kubernetesProvider *Provide
|
|||||||
func (workerSyncer *WorkerSyncer) watchWorkerPods() {
|
func (workerSyncer *WorkerSyncer) watchWorkerPods() {
|
||||||
kubesharkResourceRegex := regexp.MustCompile(fmt.Sprintf("^%s.*", WorkerPodName))
|
kubesharkResourceRegex := regexp.MustCompile(fmt.Sprintf("^%s.*", WorkerPodName))
|
||||||
podWatchHelper := NewPodWatchHelper(workerSyncer.kubernetesProvider, kubesharkResourceRegex)
|
podWatchHelper := NewPodWatchHelper(workerSyncer.kubernetesProvider, kubesharkResourceRegex)
|
||||||
eventChan, errorChan := FilteredWatch(workerSyncer.context, podWatchHelper, []string{workerSyncer.config.KubesharkResourcesNamespace}, podWatchHelper)
|
eventChan, errorChan := FilteredWatch(workerSyncer.context, podWatchHelper, []string{workerSyncer.config.SelfNamespace}, podWatchHelper)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@ -120,7 +120,7 @@ func (workerSyncer *WorkerSyncer) watchWorkerPods() {
|
|||||||
func (workerSyncer *WorkerSyncer) watchWorkerEvents() {
|
func (workerSyncer *WorkerSyncer) watchWorkerEvents() {
|
||||||
kubesharkResourceRegex := regexp.MustCompile(fmt.Sprintf("^%s.*", WorkerPodName))
|
kubesharkResourceRegex := regexp.MustCompile(fmt.Sprintf("^%s.*", WorkerPodName))
|
||||||
eventWatchHelper := NewEventWatchHelper(workerSyncer.kubernetesProvider, kubesharkResourceRegex, "pod")
|
eventWatchHelper := NewEventWatchHelper(workerSyncer.kubernetesProvider, kubesharkResourceRegex, "pod")
|
||||||
eventChan, errorChan := FilteredWatch(workerSyncer.context, eventWatchHelper, []string{workerSyncer.config.KubesharkResourcesNamespace}, eventWatchHelper)
|
eventChan, errorChan := FilteredWatch(workerSyncer.context, eventWatchHelper, []string{workerSyncer.config.SelfNamespace}, eventWatchHelper)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@ -149,7 +149,7 @@ func (workerSyncer *WorkerSyncer) watchWorkerEvents() {
|
|||||||
Str("note", event.Note).
|
Str("note", event.Note).
|
||||||
Msg("Watching events.")
|
Msg("Watching events.")
|
||||||
|
|
||||||
pod, err1 := workerSyncer.kubernetesProvider.GetPod(workerSyncer.context, workerSyncer.config.KubesharkResourcesNamespace, event.Regarding.Name)
|
pod, err1 := workerSyncer.kubernetesProvider.GetPod(workerSyncer.context, workerSyncer.config.SelfNamespace, event.Regarding.Name)
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
log.Error().Str("name", event.Regarding.Name).Msg("Couldn't get pod")
|
log.Error().Str("name", event.Regarding.Name).Msg("Couldn't get pod")
|
||||||
continue
|
continue
|
||||||
@ -354,7 +354,7 @@ func (workerSyncer *WorkerSyncer) updateWorkers() error {
|
|||||||
|
|
||||||
if err := workerSyncer.kubernetesProvider.ApplyWorkerDaemonSet(
|
if err := workerSyncer.kubernetesProvider.ApplyWorkerDaemonSet(
|
||||||
workerSyncer.context,
|
workerSyncer.context,
|
||||||
workerSyncer.config.KubesharkResourcesNamespace,
|
workerSyncer.config.SelfNamespace,
|
||||||
WorkerDaemonSetName,
|
WorkerDaemonSetName,
|
||||||
image,
|
image,
|
||||||
WorkerPodName,
|
WorkerPodName,
|
||||||
@ -372,7 +372,7 @@ func (workerSyncer *WorkerSyncer) updateWorkers() error {
|
|||||||
} else {
|
} else {
|
||||||
if err := workerSyncer.kubernetesProvider.ResetWorkerDaemonSet(
|
if err := workerSyncer.kubernetesProvider.ResetWorkerDaemonSet(
|
||||||
workerSyncer.context,
|
workerSyncer.context,
|
||||||
workerSyncer.config.KubesharkResourcesNamespace,
|
workerSyncer.config.SelfNamespace,
|
||||||
WorkerDaemonSetName,
|
WorkerDaemonSetName,
|
||||||
image,
|
image,
|
||||||
WorkerPodName); err != nil {
|
WorkerPodName); err != nil {
|
||||||
|
@ -14,13 +14,13 @@ import (
|
|||||||
|
|
||||||
func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath string) error {
|
func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath string) error {
|
||||||
podExactRegex := regexp.MustCompile("^" + kubernetes.KubesharkResourcesPrefix)
|
podExactRegex := regexp.MustCompile("^" + kubernetes.KubesharkResourcesPrefix)
|
||||||
pods, err := provider.ListAllPodsMatchingRegex(ctx, podExactRegex, []string{config.Config.ResourcesNamespace})
|
pods, err := provider.ListAllPodsMatchingRegex(ctx, podExactRegex, []string{config.Config.SelfNamespace})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(pods) == 0 {
|
if len(pods) == 0 {
|
||||||
return fmt.Errorf("no kubeshark pods found in namespace %s", config.Config.ResourcesNamespace)
|
return fmt.Errorf("no kubeshark pods found in namespace %s", config.Config.SelfNamespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
newZipFile, err := os.Create(filePath)
|
newZipFile, err := os.Create(filePath)
|
||||||
@ -59,17 +59,17 @@ func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
events, err := provider.GetNamespaceEvents(ctx, config.Config.ResourcesNamespace)
|
events, err := provider.GetNamespaceEvents(ctx, config.Config.SelfNamespace)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("Failed to get k8b events!")
|
log.Error().Err(err).Msg("Failed to get k8b events!")
|
||||||
} else {
|
} else {
|
||||||
log.Debug().Str("namespace", config.Config.ResourcesNamespace).Msg("Successfully read events.")
|
log.Debug().Str("namespace", config.Config.SelfNamespace).Msg("Successfully read events.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := AddStrToZip(zipWriter, events, fmt.Sprintf("%s_events.log", config.Config.ResourcesNamespace)); err != nil {
|
if err := AddStrToZip(zipWriter, events, fmt.Sprintf("%s_events.log", config.Config.SelfNamespace)); err != nil {
|
||||||
log.Error().Err(err).Msg("Failed write logs!")
|
log.Error().Err(err).Msg("Failed write logs!")
|
||||||
} else {
|
} else {
|
||||||
log.Debug().Str("namespace", config.Config.ResourcesNamespace).Msg("Successfully added events.")
|
log.Debug().Str("namespace", config.Config.SelfNamespace).Msg("Successfully added events.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := AddFileToZip(zipWriter, config.Config.ConfigFilePath); err != nil {
|
if err := AddFileToZip(zipWriter, config.Config.ConfigFilePath); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user