🔨 Define ProxyConfig

This commit is contained in:
M. Mert Yildiran 2022-12-28 05:10:40 +03:00
parent 647d197f51
commit 23b6dd220a
No known key found for this signature in database
GPG Key ID: DA5D6DCBB758A461
10 changed files with 37 additions and 50 deletions

View File

@ -12,14 +12,14 @@ func ServerConnection(kubernetesProvider *kubernetes.Provider) bool {
var connectedToHub, connectedToFront bool var connectedToHub, connectedToFront bool
if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort), "/echo", kubernetesProvider); err != nil { if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort), "/echo", kubernetesProvider); err != nil {
log.Error().Err(err).Msg("Couldn't connect to Hub using proxy!") log.Error().Err(err).Msg("Couldn't connect to Hub using proxy!")
} else { } else {
connectedToHub = true connectedToHub = true
log.Info().Msg("Connected successfully to Hub using proxy.") log.Info().Msg("Connected successfully to Hub using proxy.")
} }
if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Front.SrcPort), "", kubernetesProvider); err != nil { if err := checkProxy(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Front.SrcPort), "", kubernetesProvider); err != nil {
log.Error().Err(err).Msg("Couldn't connect to Front using proxy!") log.Error().Err(err).Msg("Couldn't connect to Front using proxy!")
} else { } else {
connectedToFront = true connectedToFront = true

View File

@ -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.ProxyHost, srcPort, config.Config.ResourcesNamespace, serviceName, cancel) httpServer, err := kubernetes.StartProxy(kubernetesProvider, config.Config.Tap.Proxy.Host, srcPort, config.Config.ResourcesNamespace, serviceName, cancel)
if err != nil { if err != nil {
log.Error(). log.Error().
Err(errormessage.FormatError(err)). Err(errormessage.FormatError(err)).

View File

@ -24,7 +24,7 @@ func init() {
log.Debug().Err(err).Send() log.Debug().Err(err).Send()
} }
proxyCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.") proxyCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Proxy.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.")
proxyCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.") proxyCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Proxy.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.")
proxyCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.ProxyHost, "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.")
} }

View File

@ -41,20 +41,20 @@ func runProxy() {
return return
} }
url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Front.SrcPort) url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Front.SrcPort)
response, err := http.Get(fmt.Sprintf("%s/", url)) response, err := http.Get(fmt.Sprintf("%s/", url))
if err == nil && response.StatusCode == 200 { if err == nil && response.StatusCode == 200 {
log.Info(). log.Info().
Str("service", kubernetes.FrontServiceName). Str("service", kubernetes.FrontServiceName).
Int("port", int(config.Config.Tap.Front.SrcPort)). Int("port", int(config.Config.Tap.Proxy.Front.SrcPort)).
Msg("Found a running service.") Msg("Found a running service.")
okToOpen(url) okToOpen(url)
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.Front.SrcPort, config.Config.Tap.Front.DstPort, "") startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortFrontLabel, 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 {

View File

@ -48,9 +48,9 @@ func init() {
tapCmd.Flags().StringP(configStructs.DockerRegistryLabel, "r", defaultTapConfig.DockerRegistry, "The Docker registry that's hosting the images.") tapCmd.Flags().StringP(configStructs.DockerRegistryLabel, "r", defaultTapConfig.DockerRegistry, "The Docker registry that's hosting the images.")
tapCmd.Flags().StringP(configStructs.DockerTagLabel, "t", defaultTapConfig.DockerTag, "The tag of the Docker images that are going to be pulled.") tapCmd.Flags().StringP(configStructs.DockerTagLabel, "t", defaultTapConfig.DockerTag, "The tag of the Docker images that are going to be pulled.")
tapCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.") tapCmd.Flags().Uint16(configStructs.ProxyPortFrontLabel, defaultTapConfig.Proxy.Front.SrcPort, "Provide a custom port for the front-end proxy/port-forward.")
tapCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.") tapCmd.Flags().Uint16(configStructs.ProxyPortHubLabel, defaultTapConfig.Proxy.Hub.SrcPort, "Provide a custom port for the Hub proxy/port-forward.")
tapCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.ProxyHost, "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.")
tapCmd.Flags().String(configStructs.HumanMaxEntriesDBSizeLabel, defaultTapConfig.HumanMaxEntriesDBSize, "Override the default max entries db size.") tapCmd.Flags().String(configStructs.HumanMaxEntriesDBSizeLabel, defaultTapConfig.HumanMaxEntriesDBSize, "Override the default max entries db size.")

View File

@ -102,10 +102,10 @@ func createAndStartContainers(
hostConfigFront := &container.HostConfig{ hostConfigFront := &container.HostConfig{
PortBindings: nat.PortMap{ PortBindings: nat.PortMap{
nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Front.DstPort)): []nat.PortBinding{ nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Proxy.Front.DstPort)): []nat.PortBinding{
{ {
HostIP: hostIP, HostIP: hostIP,
HostPort: fmt.Sprintf("%d", config.Config.Tap.Front.SrcPort), HostPort: fmt.Sprintf("%d", config.Config.Tap.Proxy.Front.SrcPort),
}, },
}, },
}, },
@ -130,16 +130,16 @@ func createAndStartContainers(
hostConfigHub := &container.HostConfig{ hostConfigHub := &container.HostConfig{
PortBindings: nat.PortMap{ PortBindings: nat.PortMap{
nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Hub.DstPort)): []nat.PortBinding{ nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Proxy.Hub.DstPort)): []nat.PortBinding{
{ {
HostIP: hostIP, HostIP: hostIP,
HostPort: fmt.Sprintf("%d", config.Config.Tap.Hub.SrcPort), HostPort: fmt.Sprintf("%d", config.Config.Tap.Proxy.Hub.SrcPort),
}, },
}, },
}, },
} }
cmdHub := []string{"-port", fmt.Sprintf("%d", config.Config.Tap.Hub.DstPort)} cmdHub := []string{"-port", fmt.Sprintf("%d", config.Config.Tap.Proxy.Hub.DstPort)}
if config.DebugMode { if config.DebugMode {
cmdHub = append(cmdHub, fmt.Sprintf("-%s", config.DebugFlag)) cmdHub = append(cmdHub, fmt.Sprintf("-%s", config.DebugFlag))
} }
@ -148,7 +148,7 @@ func createAndStartContainers(
Image: imageHub, Image: imageHub,
Cmd: cmdHub, Cmd: cmdHub,
Tty: false, Tty: false,
ExposedPorts: nat.PortSet{nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Hub.DstPort)): {}}, ExposedPorts: nat.PortSet{nat.Port(fmt.Sprintf("%d/tcp", config.Config.Tap.Proxy.Hub.DstPort)): {}},
}, hostConfigHub, nil, nil, "kubeshark-hub") }, hostConfigHub, nil, nil, "kubeshark-hub")
if err != nil { if err != nil {
return return
@ -158,7 +158,7 @@ func createAndStartContainers(
return return
} }
cmdWorker := []string{"-f", "./import", "-port", fmt.Sprintf("%d", config.Config.Tap.Worker.DstPort)} cmdWorker := []string{"-f", "./import", "-port", fmt.Sprintf("%d", config.Config.Tap.Proxy.Worker.DstPort)}
if config.DebugMode { if config.DebugMode {
cmdWorker = append(cmdWorker, fmt.Sprintf("-%s", config.DebugFlag)) cmdWorker = append(cmdWorker, fmt.Sprintf("-%s", config.DebugFlag))
} }
@ -285,14 +285,14 @@ func pcap(tarPath string) {
}, },
} }
connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout) connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout)
connector.PostWorkerPodToHub(workerPod) connector.PostWorkerPodToHub(workerPod)
log.Info(). log.Info().
Str("url", kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort)). Str("url", kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort)).
Msg(fmt.Sprintf(utils.Green, "Hub is available at:")) Msg(fmt.Sprintf(utils.Green, "Hub is available at:"))
url := kubernetes.GetLocalhostOnPort(config.Config.Tap.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:"))
if !config.Config.HeadlessMode { if !config.Config.HeadlessMode {

View File

@ -48,7 +48,7 @@ func tap() {
return return
} }
connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout) connector = connect.NewConnector(kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort), connect.DefaultRetries, connect.DefaultTimeout)
kubernetesProvider, err := getKubernetesProviderForCli() kubernetesProvider, err := getKubernetesProviderForCli()
if err != nil { if err != nil {
@ -441,21 +441,21 @@ 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.Hub.SrcPort, config.Config.Tap.Hub.DstPort, "/echo") startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.HubServiceName, configStructs.ProxyPortFrontLabel, 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")
cancel() cancel()
} }
url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Hub.SrcPort) url := kubernetes.GetLocalhostOnPort(config.Config.Tap.Proxy.Hub.SrcPort)
log.Info().Str("url", url).Msg(fmt.Sprintf(utils.Green, "Hub is available at:")) log.Info().Str("url", url).Msg(fmt.Sprintf(utils.Green, "Hub is available at:"))
} }
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.Front.SrcPort, config.Config.Tap.Front.DstPort, "") startProxyReportErrorIfAny(kubernetesProvider, ctx, cancel, kubernetes.FrontServiceName, configStructs.ProxyPortHubLabel, config.Config.Tap.Proxy.Front.SrcPort, config.Config.Tap.Proxy.Front.DstPort, "")
url := kubernetes.GetLocalhostOnPort(config.Config.Tap.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:"))
if !config.Config.HeadlessMode { if !config.Config.HeadlessMode {

View File

@ -18,24 +18,7 @@ const (
) )
func CreateDefaultConfig() ConfigStruct { func CreateDefaultConfig() ConfigStruct {
config := ConfigStruct{} return ConfigStruct{}
config.Tap.Worker = configStructs.WorkerConfig{
SrcPort: 8897,
DstPort: 8897,
}
config.Tap.Hub = configStructs.HubConfig{
SrcPort: 8898,
DstPort: 8898,
}
config.Tap.Front = configStructs.FrontConfig{
SrcPort: 8899,
DstPort: 80,
}
return config
} }
type ConfigStruct struct { type ConfigStruct struct {

View File

@ -39,14 +39,18 @@ type FrontConfig struct {
DstPort uint16 `yaml:"dst-port" default:"80"` DstPort uint16 `yaml:"dst-port" default:"80"`
} }
type ProxyConfig struct {
Worker WorkerConfig `yaml:"worker"`
Hub HubConfig `yaml:"hub"`
Front FrontConfig `yaml:"front"`
Host string `yaml:"host" default:"127.0.0.1"`
}
type TapConfig struct { type TapConfig struct {
Worker WorkerConfig `yaml:"worker"` Proxy ProxyConfig `yaml:"proxy"`
Hub HubConfig `yaml:"hub"`
Front FrontConfig `yaml:"front"`
DockerRegistry string `yaml:"docker-registry" default:"docker.io/kubeshark"` DockerRegistry string `yaml:"docker-registry" default:"docker.io/kubeshark"`
DockerTag string `yaml:"docker-tag" default:"latest"` DockerTag string `yaml:"docker-tag" default:"latest"`
PodRegexStr string `yaml:"regex" default:".*"` PodRegexStr string `yaml:"regex" default:".*"`
ProxyHost string `yaml:"proxy-host" default:"127.0.0.1"`
Namespaces []string `yaml:"namespaces"` Namespaces []string `yaml:"namespaces"`
AllNamespaces bool `yaml:"all-namespaces" default:"false"` AllNamespaces bool `yaml:"all-namespaces" default:"false"`
HumanMaxEntriesDBSize string `yaml:"max-entries-db-size" default:"200MB"` HumanMaxEntriesDBSize string `yaml:"max-entries-db-size" default:"200MB"`

View File

@ -74,7 +74,7 @@ func CreateHubResources(ctx context.Context, kubernetesProvider *kubernetes.Prov
log.Info().Str("service", kubernetes.HubServiceName).Msg("Successfully created a service.") log.Info().Str("service", kubernetes.HubServiceName).Msg("Successfully created a service.")
_, err = kubernetesProvider.CreateService(ctx, kubesharkResourcesNamespace, kubernetes.FrontServiceName, kubernetes.FrontServiceName, 80, int32(config.Config.Tap.Front.DstPort)) _, err = kubernetesProvider.CreateService(ctx, kubesharkResourcesNamespace, kubernetes.FrontServiceName, kubernetes.FrontServiceName, 80, int32(config.Config.Tap.Proxy.Front.DstPort))
if err != nil { if err != nil {
return kubesharkServiceAccountExists, err return kubesharkServiceAccountExists, err
} }