diff --git a/config/configStruct.go b/config/configStruct.go index d36967cda..63d2dd5ce 100644 --- a/config/configStruct.go +++ b/config/configStruct.go @@ -37,6 +37,7 @@ type ConfigStruct struct { HeadlessMode bool `yaml:"headless" default:"false"` License string `yaml:"license" default:""` Scripting configStructs.ScriptingConfig `yaml:"scripting"` + CustomLabels map[string]string `yaml:"customLabels" default:"{}"` } func (config *ConfigStruct) SetDefaults() { diff --git a/config/configStructs/tapConfig.go b/config/configStructs/tapConfig.go index 639e68a06..84fa54203 100644 --- a/config/configStructs/tapConfig.go +++ b/config/configStructs/tapConfig.go @@ -4,7 +4,6 @@ import ( "fmt" "regexp" - "github.com/kubeshark/kubeshark/kubernetes" "github.com/kubeshark/kubeshark/utils" "github.com/rs/zerolog/log" ) @@ -27,6 +26,13 @@ const ( DebugLabel = "debug" ) +type Resources struct { + CpuLimit string `yaml:"cpu-limit" default:"750m"` + MemoryLimit string `yaml:"memory-limit" default:"1Gi"` + CpuRequests string `yaml:"cpu-requests" default:"50m"` + MemoryRequests string `yaml:"memory-requests" default:"50Mi"` +} + type WorkerConfig struct { SrcPort uint16 `yaml:"port" default:"8897"` DstPort uint16 `yaml:"srvport" default:"8897"` @@ -57,8 +63,8 @@ type DockerConfig struct { } type ResourcesConfig struct { - Worker kubernetes.Resources `yaml:"worker"` - Hub kubernetes.Resources `yaml:"hub"` + Worker Resources `yaml:"worker"` + Hub Resources `yaml:"hub"` } type TapConfig struct { diff --git a/kubernetes/provider.go b/kubernetes/provider.go index 10878f47f..73df49071 100644 --- a/kubernetes/provider.go +++ b/kubernetes/provider.go @@ -10,6 +10,7 @@ import ( "path/filepath" "regexp" + "github.com/kubeshark/kubeshark/config/configStructs" "github.com/kubeshark/kubeshark/docker" "github.com/kubeshark/kubeshark/misc" "github.com/kubeshark/kubeshark/semver" @@ -161,11 +162,8 @@ func (provider *Provider) WaitUtilNamespaceDeleted(ctx context.Context, name str func (provider *Provider) CreateNamespace(ctx context.Context, name string) (*core.Namespace, error) { namespaceSpec := &core.Namespace{ ObjectMeta: metav1.ObjectMeta{ - Name: name, - Labels: map[string]string{ - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + Name: name, + Labels: buildWithDefaultLabels(map[string]string{}, provider), }, } return provider.clientSet.CoreV1().Namespaces().Create(ctx, namespaceSpec, metav1.CreateOptions{}) @@ -176,7 +174,7 @@ type PodOptions struct { PodName string PodImage string ServiceAccountName string - Resources Resources + Resources configStructs.Resources ImagePullPolicy core.PullPolicy ImagePullSecrets []core.LocalObjectReference Debug bool @@ -230,11 +228,9 @@ func (provider *Provider) BuildHubPod(opts *PodOptions) (*core.Pod, error) { pod := &core.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: opts.PodName, - Labels: map[string]string{ - "app": opts.PodName, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + Labels: buildWithDefaultLabels(map[string]string{ + "app": opts.PodName, + }, provider), }, Spec: core.PodSpec{ Containers: containers, @@ -329,11 +325,9 @@ func (provider *Provider) BuildFrontPod(opts *PodOptions, hubHost string, hubPor pod := &core.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: opts.PodName, - Labels: map[string]string{ - "app": opts.PodName, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + Labels: buildWithDefaultLabels(map[string]string{ + "app": opts.PodName, + }, provider), }, Spec: core.PodSpec{ Containers: containers, @@ -368,11 +362,8 @@ func (provider *Provider) CreatePod(ctx context.Context, namespace string, podSp func (provider *Provider) CreateService(ctx context.Context, namespace string, serviceName string, appLabelValue string, targetPort int, port int32) (*core.Service, error) { service := core.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: serviceName, - Labels: map[string]string{ - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + Name: serviceName, + Labels: buildWithDefaultLabels(map[string]string{}, provider), }, Spec: core.ServiceSpec{ Ports: []core.ServicePort{ @@ -461,21 +452,17 @@ func (provider *Provider) CreateSelfRBAC(ctx context.Context, namespace string, serviceAccount := &core.ServiceAccount{ ObjectMeta: metav1.ObjectMeta{ Name: serviceAccountName, - Labels: map[string]string{ + Labels: buildWithDefaultLabels(map[string]string{ fmt.Sprintf("%s-cli-version", misc.Program): version, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + }, provider), }, } clusterRole := &rbac.ClusterRole{ ObjectMeta: metav1.ObjectMeta{ Name: clusterRoleName, - Labels: map[string]string{ + Labels: buildWithDefaultLabels(map[string]string{ fmt.Sprintf("%s-cli-version", misc.Program): version, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + }, provider), }, Rules: []rbac.PolicyRule{ { @@ -488,11 +475,9 @@ func (provider *Provider) CreateSelfRBAC(ctx context.Context, namespace string, clusterRoleBinding := &rbac.ClusterRoleBinding{ ObjectMeta: metav1.ObjectMeta{ Name: clusterRoleBindingName, - Labels: map[string]string{ + Labels: buildWithDefaultLabels(map[string]string{ fmt.Sprintf("%s-cli-version", misc.Program): version, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + }, provider), }, RoleRef: rbac.RoleRef{ Name: clusterRoleName, @@ -526,21 +511,17 @@ func (provider *Provider) CreateSelfRBACNamespaceRestricted(ctx context.Context, serviceAccount := &core.ServiceAccount{ ObjectMeta: metav1.ObjectMeta{ Name: serviceAccountName, - Labels: map[string]string{ + Labels: buildWithDefaultLabels(map[string]string{ fmt.Sprintf("%s-cli-version", misc.Program): version, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + }, provider), }, } role := &rbac.Role{ ObjectMeta: metav1.ObjectMeta{ Name: roleName, - Labels: map[string]string{ + Labels: buildWithDefaultLabels(map[string]string{ fmt.Sprintf("%s-cli-version", misc.Program): version, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + }, provider), }, Rules: []rbac.PolicyRule{ { @@ -553,11 +534,9 @@ func (provider *Provider) CreateSelfRBACNamespaceRestricted(ctx context.Context, roleBinding := &rbac.RoleBinding{ ObjectMeta: metav1.ObjectMeta{ Name: roleBindingName, - Labels: map[string]string{ + Labels: buildWithDefaultLabels(map[string]string{ fmt.Sprintf("%s-cli-version", misc.Program): version, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }, + }, provider), }, RoleRef: rbac.RoleRef{ Name: roleName, @@ -654,7 +633,7 @@ func (provider *Provider) ApplyWorkerDaemonSet( podImage string, workerPodName string, serviceAccountName string, - resources Resources, + resources configStructs.Resources, imagePullPolicy core.PullPolicy, imagePullSecrets []core.LocalObjectReference, serviceMesh bool, @@ -799,11 +778,9 @@ func (provider *Provider) ApplyWorkerDaemonSet( } podTemplate := applyconfcore.PodTemplateSpec() - podTemplate.WithLabels(map[string]string{ - "app": workerPodName, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }) + podTemplate.WithLabels(buildWithDefaultLabels(map[string]string{ + "app": workerPodName, + }, provider)) podTemplate.WithSpec(podSpec) labelSelector := applyconfmeta.LabelSelector() @@ -816,10 +793,7 @@ func (provider *Provider) ApplyWorkerDaemonSet( daemonSet := applyconfapp.DaemonSet(daemonSetName, namespace) daemonSet. - WithLabels(map[string]string{ - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }). + WithLabels(buildWithDefaultLabels(map[string]string{}, provider)). WithSpec(applyconfapp.DaemonSetSpec().WithSelector(labelSelector).WithTemplate(podTemplate)) _, err = provider.clientSet.AppsV1().DaemonSets(namespace).Apply(ctx, daemonSet, applyOptions) @@ -848,11 +822,9 @@ func (provider *Provider) ResetWorkerDaemonSet(ctx context.Context, namespace st podSpec.WithAffinity(affinity) podTemplate := applyconfcore.PodTemplateSpec() - podTemplate.WithLabels(map[string]string{ - "app": workerPodName, - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }) + podTemplate.WithLabels(buildWithDefaultLabels(map[string]string{ + "app": workerPodName, + }, provider)) podTemplate.WithSpec(podSpec) labelSelector := applyconfmeta.LabelSelector() @@ -865,10 +837,7 @@ func (provider *Provider) ResetWorkerDaemonSet(ctx context.Context, namespace st daemonSet := applyconfapp.DaemonSet(daemonSetName, namespace) daemonSet. - WithLabels(map[string]string{ - LabelManagedBy: provider.managedBy, - LabelCreatedBy: provider.createdBy, - }). + WithLabels(buildWithDefaultLabels(map[string]string{}, provider)). WithSpec(applyconfapp.DaemonSetSpec().WithSelector(labelSelector).WithTemplate(podTemplate)) _, err := provider.clientSet.AppsV1().DaemonSets(namespace).Apply(ctx, daemonSet, applyOptions) diff --git a/kubernetes/structs.go b/kubernetes/structs.go deleted file mode 100644 index 236a8f8ec..000000000 --- a/kubernetes/structs.go +++ /dev/null @@ -1,8 +0,0 @@ -package kubernetes - -type Resources struct { - CpuLimit string `yaml:"cpu-limit" default:"750m"` - MemoryLimit string `yaml:"memory-limit" default:"1Gi"` - CpuRequests string `yaml:"cpu-requests" default:"50m"` - MemoryRequests string `yaml:"memory-requests" default:"50Mi"` -} diff --git a/kubernetes/utils.go b/kubernetes/utils.go index da6c2098a..d5528386a 100644 --- a/kubernetes/utils.go +++ b/kubernetes/utils.go @@ -2,6 +2,7 @@ package kubernetes import ( "github.com/kubeshark/base/pkg/models" + "github.com/kubeshark/kubeshark/config" core "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -53,3 +54,14 @@ func GetPodInfosForPods(pods []core.Pod) []*models.PodInfo { } return podInfos } + +func buildWithDefaultLabels(labels map[string]string, provider *Provider) map[string]string { + labels["LabelManagedBy"] = provider.managedBy + labels["LabelCreatedBy"] = provider.createdBy + + for k, v := range config.Config.CustomLabels { + labels[k] = v + } + + return labels +} diff --git a/kubernetes/workers.go b/kubernetes/workers.go index e553fbf32..758210b0f 100644 --- a/kubernetes/workers.go +++ b/kubernetes/workers.go @@ -3,6 +3,7 @@ package kubernetes import ( "context" + "github.com/kubeshark/kubeshark/config/configStructs" "github.com/kubeshark/kubeshark/docker" "github.com/rs/zerolog/log" core "k8s.io/api/core/v1" @@ -13,7 +14,7 @@ func CreateWorkers( selfServiceAccountExists bool, ctx context.Context, namespace string, - resources Resources, + resources configStructs.Resources, imagePullPolicy core.PullPolicy, imagePullSecrets []core.LocalObjectReference, serviceMesh bool, diff --git a/resources/createResources.go b/resources/createResources.go index f43d01bf5..29bf88730 100644 --- a/resources/createResources.go +++ b/resources/createResources.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/kubeshark/kubeshark/config" + "github.com/kubeshark/kubeshark/config/configStructs" "github.com/kubeshark/kubeshark/docker" "github.com/kubeshark/kubeshark/errormessage" "github.com/kubeshark/kubeshark/kubernetes" @@ -13,7 +14,7 @@ import ( core "k8s.io/api/core/v1" ) -func CreateHubResources(ctx context.Context, kubernetesProvider *kubernetes.Provider, isNsRestrictedMode bool, selfNamespace string, hubResources kubernetes.Resources, imagePullPolicy core.PullPolicy, imagePullSecrets []core.LocalObjectReference, debug bool) (bool, error) { +func CreateHubResources(ctx context.Context, kubernetesProvider *kubernetes.Provider, isNsRestrictedMode bool, selfNamespace string, hubResources configStructs.Resources, imagePullPolicy core.PullPolicy, imagePullSecrets []core.LocalObjectReference, debug bool) (bool, error) { if !isNsRestrictedMode { if err := createSelfNamespace(ctx, kubernetesProvider, selfNamespace); err != nil { log.Debug().Err(err).Send()