Add customLabels field to config.yaml

This commit is contained in:
M. Mert Yildiran
2023-03-14 23:45:41 +03:00
parent 362b17dec4
commit d9ec538aff
7 changed files with 59 additions and 77 deletions

View File

@@ -37,6 +37,7 @@ type ConfigStruct struct {
HeadlessMode bool `yaml:"headless" default:"false"` HeadlessMode bool `yaml:"headless" default:"false"`
License string `yaml:"license" default:""` License string `yaml:"license" default:""`
Scripting configStructs.ScriptingConfig `yaml:"scripting"` Scripting configStructs.ScriptingConfig `yaml:"scripting"`
CustomLabels map[string]string `yaml:"customLabels" default:"{}"`
} }
func (config *ConfigStruct) SetDefaults() { func (config *ConfigStruct) SetDefaults() {

View File

@@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"regexp" "regexp"
"github.com/kubeshark/kubeshark/kubernetes"
"github.com/kubeshark/kubeshark/utils" "github.com/kubeshark/kubeshark/utils"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
@@ -27,6 +26,13 @@ const (
DebugLabel = "debug" 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 { type WorkerConfig struct {
SrcPort uint16 `yaml:"port" default:"8897"` SrcPort uint16 `yaml:"port" default:"8897"`
DstPort uint16 `yaml:"srvport" default:"8897"` DstPort uint16 `yaml:"srvport" default:"8897"`
@@ -57,8 +63,8 @@ type DockerConfig struct {
} }
type ResourcesConfig struct { type ResourcesConfig struct {
Worker kubernetes.Resources `yaml:"worker"` Worker Resources `yaml:"worker"`
Hub kubernetes.Resources `yaml:"hub"` Hub Resources `yaml:"hub"`
} }
type TapConfig struct { type TapConfig struct {

View File

@@ -10,6 +10,7 @@ import (
"path/filepath" "path/filepath"
"regexp" "regexp"
"github.com/kubeshark/kubeshark/config/configStructs"
"github.com/kubeshark/kubeshark/docker" "github.com/kubeshark/kubeshark/docker"
"github.com/kubeshark/kubeshark/misc" "github.com/kubeshark/kubeshark/misc"
"github.com/kubeshark/kubeshark/semver" "github.com/kubeshark/kubeshark/semver"
@@ -162,10 +163,7 @@ func (provider *Provider) CreateNamespace(ctx context.Context, name string) (*co
namespaceSpec := &core.Namespace{ namespaceSpec := &core.Namespace{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: name, Name: name,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{}, provider),
LabelManagedBy: provider.managedBy,
LabelCreatedBy: provider.createdBy,
},
}, },
} }
return provider.clientSet.CoreV1().Namespaces().Create(ctx, namespaceSpec, metav1.CreateOptions{}) return provider.clientSet.CoreV1().Namespaces().Create(ctx, namespaceSpec, metav1.CreateOptions{})
@@ -176,7 +174,7 @@ type PodOptions struct {
PodName string PodName string
PodImage string PodImage string
ServiceAccountName string ServiceAccountName string
Resources Resources Resources configStructs.Resources
ImagePullPolicy core.PullPolicy ImagePullPolicy core.PullPolicy
ImagePullSecrets []core.LocalObjectReference ImagePullSecrets []core.LocalObjectReference
Debug bool Debug bool
@@ -230,11 +228,9 @@ func (provider *Provider) BuildHubPod(opts *PodOptions) (*core.Pod, error) {
pod := &core.Pod{ pod := &core.Pod{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: opts.PodName, Name: opts.PodName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
"app": opts.PodName, "app": opts.PodName,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
Spec: core.PodSpec{ Spec: core.PodSpec{
Containers: containers, Containers: containers,
@@ -329,11 +325,9 @@ func (provider *Provider) BuildFrontPod(opts *PodOptions, hubHost string, hubPor
pod := &core.Pod{ pod := &core.Pod{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: opts.PodName, Name: opts.PodName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
"app": opts.PodName, "app": opts.PodName,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
Spec: core.PodSpec{ Spec: core.PodSpec{
Containers: containers, Containers: containers,
@@ -369,10 +363,7 @@ func (provider *Provider) CreateService(ctx context.Context, namespace string, s
service := core.Service{ service := core.Service{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: serviceName, Name: serviceName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{}, provider),
LabelManagedBy: provider.managedBy,
LabelCreatedBy: provider.createdBy,
},
}, },
Spec: core.ServiceSpec{ Spec: core.ServiceSpec{
Ports: []core.ServicePort{ Ports: []core.ServicePort{
@@ -461,21 +452,17 @@ func (provider *Provider) CreateSelfRBAC(ctx context.Context, namespace string,
serviceAccount := &core.ServiceAccount{ serviceAccount := &core.ServiceAccount{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: serviceAccountName, Name: serviceAccountName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
fmt.Sprintf("%s-cli-version", misc.Program): version, fmt.Sprintf("%s-cli-version", misc.Program): version,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
} }
clusterRole := &rbac.ClusterRole{ clusterRole := &rbac.ClusterRole{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: clusterRoleName, Name: clusterRoleName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
fmt.Sprintf("%s-cli-version", misc.Program): version, fmt.Sprintf("%s-cli-version", misc.Program): version,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
Rules: []rbac.PolicyRule{ Rules: []rbac.PolicyRule{
{ {
@@ -488,11 +475,9 @@ func (provider *Provider) CreateSelfRBAC(ctx context.Context, namespace string,
clusterRoleBinding := &rbac.ClusterRoleBinding{ clusterRoleBinding := &rbac.ClusterRoleBinding{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: clusterRoleBindingName, Name: clusterRoleBindingName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
fmt.Sprintf("%s-cli-version", misc.Program): version, fmt.Sprintf("%s-cli-version", misc.Program): version,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
RoleRef: rbac.RoleRef{ RoleRef: rbac.RoleRef{
Name: clusterRoleName, Name: clusterRoleName,
@@ -526,21 +511,17 @@ func (provider *Provider) CreateSelfRBACNamespaceRestricted(ctx context.Context,
serviceAccount := &core.ServiceAccount{ serviceAccount := &core.ServiceAccount{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: serviceAccountName, Name: serviceAccountName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
fmt.Sprintf("%s-cli-version", misc.Program): version, fmt.Sprintf("%s-cli-version", misc.Program): version,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
} }
role := &rbac.Role{ role := &rbac.Role{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: roleName, Name: roleName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
fmt.Sprintf("%s-cli-version", misc.Program): version, fmt.Sprintf("%s-cli-version", misc.Program): version,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
Rules: []rbac.PolicyRule{ Rules: []rbac.PolicyRule{
{ {
@@ -553,11 +534,9 @@ func (provider *Provider) CreateSelfRBACNamespaceRestricted(ctx context.Context,
roleBinding := &rbac.RoleBinding{ roleBinding := &rbac.RoleBinding{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: roleBindingName, Name: roleBindingName,
Labels: map[string]string{ Labels: buildWithDefaultLabels(map[string]string{
fmt.Sprintf("%s-cli-version", misc.Program): version, fmt.Sprintf("%s-cli-version", misc.Program): version,
LabelManagedBy: provider.managedBy, }, provider),
LabelCreatedBy: provider.createdBy,
},
}, },
RoleRef: rbac.RoleRef{ RoleRef: rbac.RoleRef{
Name: roleName, Name: roleName,
@@ -654,7 +633,7 @@ func (provider *Provider) ApplyWorkerDaemonSet(
podImage string, podImage string,
workerPodName string, workerPodName string,
serviceAccountName string, serviceAccountName string,
resources Resources, resources configStructs.Resources,
imagePullPolicy core.PullPolicy, imagePullPolicy core.PullPolicy,
imagePullSecrets []core.LocalObjectReference, imagePullSecrets []core.LocalObjectReference,
serviceMesh bool, serviceMesh bool,
@@ -799,11 +778,9 @@ func (provider *Provider) ApplyWorkerDaemonSet(
} }
podTemplate := applyconfcore.PodTemplateSpec() podTemplate := applyconfcore.PodTemplateSpec()
podTemplate.WithLabels(map[string]string{ podTemplate.WithLabels(buildWithDefaultLabels(map[string]string{
"app": workerPodName, "app": workerPodName,
LabelManagedBy: provider.managedBy, }, provider))
LabelCreatedBy: provider.createdBy,
})
podTemplate.WithSpec(podSpec) podTemplate.WithSpec(podSpec)
labelSelector := applyconfmeta.LabelSelector() labelSelector := applyconfmeta.LabelSelector()
@@ -816,10 +793,7 @@ func (provider *Provider) ApplyWorkerDaemonSet(
daemonSet := applyconfapp.DaemonSet(daemonSetName, namespace) daemonSet := applyconfapp.DaemonSet(daemonSetName, namespace)
daemonSet. daemonSet.
WithLabels(map[string]string{ WithLabels(buildWithDefaultLabels(map[string]string{}, provider)).
LabelManagedBy: provider.managedBy,
LabelCreatedBy: provider.createdBy,
}).
WithSpec(applyconfapp.DaemonSetSpec().WithSelector(labelSelector).WithTemplate(podTemplate)) WithSpec(applyconfapp.DaemonSetSpec().WithSelector(labelSelector).WithTemplate(podTemplate))
_, err = provider.clientSet.AppsV1().DaemonSets(namespace).Apply(ctx, daemonSet, applyOptions) _, 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) podSpec.WithAffinity(affinity)
podTemplate := applyconfcore.PodTemplateSpec() podTemplate := applyconfcore.PodTemplateSpec()
podTemplate.WithLabels(map[string]string{ podTemplate.WithLabels(buildWithDefaultLabels(map[string]string{
"app": workerPodName, "app": workerPodName,
LabelManagedBy: provider.managedBy, }, provider))
LabelCreatedBy: provider.createdBy,
})
podTemplate.WithSpec(podSpec) podTemplate.WithSpec(podSpec)
labelSelector := applyconfmeta.LabelSelector() labelSelector := applyconfmeta.LabelSelector()
@@ -865,10 +837,7 @@ func (provider *Provider) ResetWorkerDaemonSet(ctx context.Context, namespace st
daemonSet := applyconfapp.DaemonSet(daemonSetName, namespace) daemonSet := applyconfapp.DaemonSet(daemonSetName, namespace)
daemonSet. daemonSet.
WithLabels(map[string]string{ WithLabels(buildWithDefaultLabels(map[string]string{}, provider)).
LabelManagedBy: provider.managedBy,
LabelCreatedBy: provider.createdBy,
}).
WithSpec(applyconfapp.DaemonSetSpec().WithSelector(labelSelector).WithTemplate(podTemplate)) WithSpec(applyconfapp.DaemonSetSpec().WithSelector(labelSelector).WithTemplate(podTemplate))
_, err := provider.clientSet.AppsV1().DaemonSets(namespace).Apply(ctx, daemonSet, applyOptions) _, err := provider.clientSet.AppsV1().DaemonSets(namespace).Apply(ctx, daemonSet, applyOptions)

View File

@@ -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"`
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import ( import (
"github.com/kubeshark/base/pkg/models" "github.com/kubeshark/base/pkg/models"
"github.com/kubeshark/kubeshark/config"
core "k8s.io/api/core/v1" core "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
@@ -53,3 +54,14 @@ func GetPodInfosForPods(pods []core.Pod) []*models.PodInfo {
} }
return podInfos 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
}

View File

@@ -3,6 +3,7 @@ package kubernetes
import ( import (
"context" "context"
"github.com/kubeshark/kubeshark/config/configStructs"
"github.com/kubeshark/kubeshark/docker" "github.com/kubeshark/kubeshark/docker"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
core "k8s.io/api/core/v1" core "k8s.io/api/core/v1"
@@ -13,7 +14,7 @@ func CreateWorkers(
selfServiceAccountExists bool, selfServiceAccountExists bool,
ctx context.Context, ctx context.Context,
namespace string, namespace string,
resources Resources, resources configStructs.Resources,
imagePullPolicy core.PullPolicy, imagePullPolicy core.PullPolicy,
imagePullSecrets []core.LocalObjectReference, imagePullSecrets []core.LocalObjectReference,
serviceMesh bool, serviceMesh bool,

View File

@@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"github.com/kubeshark/kubeshark/config" "github.com/kubeshark/kubeshark/config"
"github.com/kubeshark/kubeshark/config/configStructs"
"github.com/kubeshark/kubeshark/docker" "github.com/kubeshark/kubeshark/docker"
"github.com/kubeshark/kubeshark/errormessage" "github.com/kubeshark/kubeshark/errormessage"
"github.com/kubeshark/kubeshark/kubernetes" "github.com/kubeshark/kubeshark/kubernetes"
@@ -13,7 +14,7 @@ import (
core "k8s.io/api/core/v1" 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 !isNsRestrictedMode {
if err := createSelfNamespace(ctx, kubernetesProvider, selfNamespace); err != nil { if err := createSelfNamespace(ctx, kubernetesProvider, selfNamespace); err != nil {
log.Debug().Err(err).Send() log.Debug().Err(err).Send()