mirror of
https://github.com/kubeshark/kubeshark.git
synced 2026-05-07 17:57:47 +00:00
107 lines
3.7 KiB
Go
107 lines
3.7 KiB
Go
package resources
|
|
|
|
import (
|
|
"context"
|
|
"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"
|
|
"github.com/kubeshark/kubeshark/misc"
|
|
"github.com/rs/zerolog/log"
|
|
core "k8s.io/api/core/v1"
|
|
)
|
|
|
|
func CreateHubResources(ctx context.Context, kubernetesProvider *kubernetes.Provider, isNsRestrictedMode bool, selfNamespace string, hubResources configStructs.ResourceRequirements, 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()
|
|
}
|
|
}
|
|
|
|
err := kubernetesProvider.CreateSelfRBAC(ctx, selfNamespace)
|
|
var selfServiceAccountExists bool
|
|
if err != nil {
|
|
selfServiceAccountExists = true
|
|
log.Warn().Err(errormessage.FormatError(err)).Msg(fmt.Sprintf("Failed to ensure the resources required for IP resolving. %s will not resolve target IPs to names.", misc.Software))
|
|
}
|
|
|
|
hubOpts := &kubernetes.PodOptions{
|
|
Namespace: selfNamespace,
|
|
PodName: kubernetes.HubPodName,
|
|
PodImage: docker.GetHubImage(),
|
|
ServiceAccountName: kubernetes.ServiceAccountName,
|
|
Resources: hubResources,
|
|
ImagePullPolicy: imagePullPolicy,
|
|
ImagePullSecrets: imagePullSecrets,
|
|
Debug: debug,
|
|
}
|
|
|
|
frontOpts := &kubernetes.PodOptions{
|
|
Namespace: selfNamespace,
|
|
PodName: kubernetes.FrontPodName,
|
|
PodImage: docker.GetWorkerImage(),
|
|
ServiceAccountName: kubernetes.ServiceAccountName,
|
|
Resources: hubResources,
|
|
ImagePullPolicy: imagePullPolicy,
|
|
ImagePullSecrets: imagePullSecrets,
|
|
Debug: debug,
|
|
}
|
|
|
|
if err := createSelfHubPod(ctx, kubernetesProvider, hubOpts); err != nil {
|
|
return selfServiceAccountExists, err
|
|
}
|
|
|
|
if err := createFrontPod(ctx, kubernetesProvider, frontOpts); err != nil {
|
|
return selfServiceAccountExists, err
|
|
}
|
|
|
|
// TODO: Why the port values need to be 80?
|
|
_, err = kubernetesProvider.CreateService(ctx, selfNamespace, kubernetesProvider.BuildHubService(selfNamespace))
|
|
if err != nil {
|
|
return selfServiceAccountExists, err
|
|
}
|
|
|
|
log.Info().Str("service", kubernetes.HubServiceName).Msg("Successfully created a service.")
|
|
|
|
_, err = kubernetesProvider.CreateService(ctx, selfNamespace, kubernetesProvider.BuildFrontService(selfNamespace))
|
|
if err != nil {
|
|
return selfServiceAccountExists, err
|
|
}
|
|
|
|
log.Info().Str("service", kubernetes.FrontServiceName).Msg("Successfully created a service.")
|
|
|
|
return selfServiceAccountExists, nil
|
|
}
|
|
|
|
func createSelfNamespace(ctx context.Context, kubernetesProvider *kubernetes.Provider, selfNamespace string) error {
|
|
_, err := kubernetesProvider.CreateNamespace(ctx, kubernetesProvider.BuildNamespace(selfNamespace))
|
|
return err
|
|
}
|
|
|
|
func createSelfHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, opts *kubernetes.PodOptions) error {
|
|
pod, err := kubernetesProvider.BuildHubPod(opts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err = kubernetesProvider.CreatePod(ctx, opts.Namespace, pod); err != nil {
|
|
return err
|
|
}
|
|
log.Info().Str("pod", pod.Name).Msg("Successfully created a pod.")
|
|
return nil
|
|
}
|
|
|
|
func createFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, opts *kubernetes.PodOptions) error {
|
|
pod, err := kubernetesProvider.BuildFrontPod(opts, config.Config.Tap.Proxy.Host, fmt.Sprintf("%d", config.Config.Tap.Proxy.Hub.SrcPort))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err = kubernetesProvider.CreatePod(ctx, opts.Namespace, pod); err != nil {
|
|
return err
|
|
}
|
|
log.Info().Str("pod", pod.Name).Msg("Successfully created a pod.")
|
|
return nil
|
|
}
|