mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-08-01 00:35:31 +00:00
🔨 Add tracer
as a separate container to worker DaemonSet
(#1428)
* 🔨 Add `tracer` as a separate container to worker `DaemonSet` * 🔥 Delete some of the unused connector methods * 🔨 Set `POD_NAME` and `POD_NAMESPACE` environment variables in worker `DeamonSet` * 🔨 Set `POD_NAME` and `POD_NAMESPACE` environment variables in hub `Deployment` * Fix the labels * Fix the self config role * Restrict it to specific resource names * Run `make generate-manifests`
This commit is contained in:
parent
d94ce4dce3
commit
41dacbff1a
11
cmd/pro.go
11
cmd/pro.go
@ -69,7 +69,16 @@ func updateLicense(licenseKey string) {
|
|||||||
log.Error().Err(err).Send()
|
log.Error().Err(err).Send()
|
||||||
}
|
}
|
||||||
|
|
||||||
connector.PostLicenseSingle(config.Config.License)
|
kubernetesProvider, err := getKubernetesProviderForCli(false, false)
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Send()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = kubernetes.SetSecret(kubernetesProvider, "LICENSE", config.Config.License)
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Send()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
log.Info().Msg("Updated the license. Exiting.")
|
log.Info().Msg("Updated the license. Exiting.")
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ func tap() {
|
|||||||
|
|
||||||
kubernetesProvider, err := getKubernetesProviderForCli(false, false)
|
kubernetesProvider, err := getKubernetesProviderForCli(false, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error().Err(err).Send()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +200,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c
|
|||||||
ready.Lock()
|
ready.Lock()
|
||||||
ready.Hub = true
|
ready.Hub = true
|
||||||
ready.Unlock()
|
ready.Unlock()
|
||||||
postHubStarted(ctx, kubernetesProvider, cancel, false)
|
postHubStarted(ctx, kubernetesProvider, cancel)
|
||||||
}
|
}
|
||||||
|
|
||||||
ready.Lock()
|
ready.Lock()
|
||||||
@ -405,35 +406,7 @@ func watchHubEvents(ctx context.Context, kubernetesProvider *kubernetes.Provider
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func postHubStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc, update bool) {
|
func postHubStarted(ctx context.Context, kubernetesProvider *kubernetes.Provider, cancel context.CancelFunc) {
|
||||||
|
|
||||||
if update {
|
|
||||||
// Pod regex
|
|
||||||
connector.PostRegexToHub(config.Config.Tap.PodRegexStr, state.targetNamespaces)
|
|
||||||
|
|
||||||
// License
|
|
||||||
if config.Config.License != "" {
|
|
||||||
connector.PostLicense(config.Config.License)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scripting
|
|
||||||
connector.PostEnv(config.Config.Scripting.Env)
|
|
||||||
|
|
||||||
scripts, err := config.Config.Scripting.GetScripts()
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Send()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, script := range scripts {
|
|
||||||
_, err = connector.PostScript(script)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Send()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
connector.PostScriptDone()
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.Config.Scripting.Source != "" && config.Config.Scripting.WatchScripts {
|
if config.Config.Scripting.Source != "" && config.Config.Scripting.WatchScripts {
|
||||||
watchScripts(false)
|
watchScripts(false)
|
||||||
}
|
}
|
||||||
|
@ -34,18 +34,19 @@ metadata:
|
|||||||
{{- if .Values.tap.annotations }}
|
{{- if .Values.tap.annotations }}
|
||||||
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
name: kubeshark-self-secrets-role
|
name: kubeshark-self-config-role
|
||||||
namespace: {{ .Release.Namespace }}
|
namespace: {{ .Release.Namespace }}
|
||||||
rules:
|
rules:
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- "v1"
|
|
||||||
- ""
|
- ""
|
||||||
|
- v1
|
||||||
resourceNames:
|
resourceNames:
|
||||||
- kubeshark-secret
|
- kubeshark-secret
|
||||||
|
- kubeshark-config-map
|
||||||
resources:
|
resources:
|
||||||
- secrets
|
- secrets
|
||||||
|
- configmaps
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- watch
|
- watch
|
||||||
- update
|
- update
|
||||||
- patch
|
|
||||||
|
@ -22,19 +22,19 @@ subjects:
|
|||||||
apiVersion: rbac.authorization.k8s.io/v1
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
kind: RoleBinding
|
kind: RoleBinding
|
||||||
metadata:
|
metadata:
|
||||||
name: kubeshark-self-secrets-role-binding
|
|
||||||
labels:
|
labels:
|
||||||
{{- include "kubeshark.labels" . | nindent 4 }}
|
{{- include "kubeshark.labels" . | nindent 4 }}
|
||||||
annotations:
|
annotations:
|
||||||
{{- if .Values.tap.annotations }}
|
{{- if .Values.tap.annotations }}
|
||||||
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
name: kubeshark-self-config-role-binding
|
||||||
namespace: {{ .Release.Namespace }}
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: kubeshark-self-config-role
|
||||||
subjects:
|
subjects:
|
||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
name: {{ include "kubeshark.serviceAccountName" . }}
|
name: {{ include "kubeshark.serviceAccountName" . }}
|
||||||
namespace: {{ .Release.Namespace }}
|
namespace: {{ .Release.Namespace }}
|
||||||
roleRef:
|
|
||||||
kind: Role
|
|
||||||
name: kubeshark-self-secrets-role
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: {{ include "kubeshark.fullname" . }}-hub
|
|
||||||
namespace: {{ .Release.Namespace }}
|
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
{{- include "kubeshark.labels" . | nindent 4 }}
|
{{- include "kubeshark.labels" . | nindent 4 }}
|
||||||
@ -10,16 +9,19 @@ metadata:
|
|||||||
{{- if .Values.tap.annotations }}
|
{{- if .Values.tap.annotations }}
|
||||||
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
name: {{ include "kubeshark.fullname" . }}-hub
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
spec:
|
spec:
|
||||||
replicas: 1 # Set the desired number of replicas
|
replicas: 1 # Set the desired number of replicas
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
|
{{- include "kubeshark.labels" . | nindent 6 }}
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
sidecar.istio.io/inject: "false"
|
{{- include "kubeshark.labels" . | nindent 8 }}
|
||||||
spec:
|
spec:
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
serviceAccountName: {{ include "kubeshark.serviceAccountName" . }}
|
serviceAccountName: {{ include "kubeshark.serviceAccountName" . }}
|
||||||
@ -28,6 +30,15 @@ spec:
|
|||||||
command:
|
command:
|
||||||
- ./hub
|
- ./hub
|
||||||
{{ .Values.tap.debug | ternary "- -debug" "" }}
|
{{ .Values.tap.debug | ternary "- -debug" "" }}
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: kubeshark-config-map
|
name: kubeshark-config-map
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: {{ include "kubeshark.fullname" . }}-front
|
|
||||||
namespace: {{ .Release.Namespace }}
|
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
{{- include "kubeshark.labels" . | nindent 4 }}
|
{{- include "kubeshark.labels" . | nindent 4 }}
|
||||||
@ -10,15 +8,19 @@ metadata:
|
|||||||
{{- if .Values.tap.annotations }}
|
{{- if .Values.tap.annotations }}
|
||||||
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
name: {{ include "kubeshark.fullname" . }}-front
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
spec:
|
spec:
|
||||||
replicas: 1 # Set the desired number of replicas
|
replicas: 1 # Set the desired number of replicas
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
|
{{- include "kubeshark.labels" . | nindent 6 }}
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
|
{{- include "kubeshark.labels" . | nindent 8 }}
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- env:
|
||||||
|
@ -33,13 +33,21 @@ spec:
|
|||||||
- -port
|
- -port
|
||||||
- '{{ .Values.tap.proxy.worker.srvport }}'
|
- '{{ .Values.tap.proxy.worker.srvport }}'
|
||||||
- -servicemesh
|
- -servicemesh
|
||||||
{{ .Values.tap.tls | ternary "- -tls" "" }}
|
|
||||||
- -procfs
|
- -procfs
|
||||||
- /hostproc
|
- /hostproc
|
||||||
{{ .Values.tap.debug | ternary "- -debug" "" }}
|
{{ .Values.tap.debug | ternary "- -debug" "" }}
|
||||||
image: '{{ .Values.tap.docker.registry }}/worker:{{ .Values.tap.docker.tag }}'
|
image: '{{ .Values.tap.docker.registry }}/worker:{{ .Values.tap.docker.tag }}'
|
||||||
imagePullPolicy: {{ .Values.tap.docker.imagepullpolicy }}
|
imagePullPolicy: {{ .Values.tap.docker.imagepullpolicy }}
|
||||||
name: kubeshark-worker-daemon-set
|
name: sniffer
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
envFrom:
|
envFrom:
|
||||||
- secretRef:
|
- secretRef:
|
||||||
name: kubeshark-secret
|
name: kubeshark-secret
|
||||||
@ -67,7 +75,6 @@ spec:
|
|||||||
- SYS_ADMIN
|
- SYS_ADMIN
|
||||||
- SYS_PTRACE
|
- SYS_PTRACE
|
||||||
- DAC_OVERRIDE
|
- DAC_OVERRIDE
|
||||||
- SYS_RESOURCE
|
|
||||||
- SYS_MODULE
|
- SYS_MODULE
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
@ -92,10 +99,60 @@ spec:
|
|||||||
- mountPath: /sys
|
- mountPath: /sys
|
||||||
name: sys
|
name: sys
|
||||||
readOnly: true
|
readOnly: true
|
||||||
{{- if .Values.tap.persistentstorage }}
|
{{- if .Values.tap.persistentstorage }}
|
||||||
- mountPath: /app/data
|
- mountPath: /app/data
|
||||||
name: kubeshark-persistent-volume
|
name: kubeshark-persistent-volume
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.tap.tls }}
|
||||||
|
- command:
|
||||||
|
- ./tracer
|
||||||
|
- -procfs
|
||||||
|
- /hostproc
|
||||||
|
{{ .Values.tap.debug | ternary "- -debug" "" }}
|
||||||
|
image: '{{ .Values.tap.docker.registry }}/worker:{{ .Values.tap.docker.tag }}'
|
||||||
|
imagePullPolicy: {{ .Values.tap.docker.imagepullpolicy }}
|
||||||
|
name: tracer
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: kubeshark-secret
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: {{ .Values.tap.resources.worker.limits.cpu }}
|
||||||
|
memory: {{ .Values.tap.resources.worker.limits.memory }}
|
||||||
|
requests:
|
||||||
|
cpu: {{ .Values.tap.resources.worker.requests.cpu }}
|
||||||
|
memory: {{ .Values.tap.resources.worker.requests.memory }}
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- SYS_ADMIN
|
||||||
|
- SYS_PTRACE
|
||||||
|
- DAC_OVERRIDE
|
||||||
|
- SYS_RESOURCE
|
||||||
|
- SYS_MODULE
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /hostproc
|
||||||
|
name: proc
|
||||||
|
readOnly: true
|
||||||
|
- mountPath: /sys
|
||||||
|
name: sys
|
||||||
|
readOnly: true
|
||||||
|
{{- if .Values.tap.persistentstorage }}
|
||||||
|
- mountPath: /app/data
|
||||||
|
name: kubeshark-persistent-volume
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
serviceAccountName: {{ include "kubeshark.serviceAccountName" . }}
|
serviceAccountName: {{ include "kubeshark.serviceAccountName" . }}
|
||||||
|
@ -10,7 +10,7 @@ data:
|
|||||||
POD_REGEX: '{{ .Values.tap.regex }}'
|
POD_REGEX: '{{ .Values.tap.regex }}'
|
||||||
NAMESPACES: '{{ gt (len .Values.tap.namespaces) 0 | ternary (join "," .Values.tap.namespaces) "" }}'
|
NAMESPACES: '{{ gt (len .Values.tap.namespaces) 0 | ternary (join "," .Values.tap.namespaces) "" }}'
|
||||||
SCRIPTING_ENV: '{{ .Values.scripting.env | toJson }}'
|
SCRIPTING_ENV: '{{ .Values.scripting.env | toJson }}'
|
||||||
SCRIPTING_SCRIPTS: '[]'
|
SCRIPTING_SCRIPTS: '{}'
|
||||||
AUTH_ENABLED: '{{ .Values.tap.auth.enabled | ternary "true" "" }}'
|
AUTH_ENABLED: '{{ .Values.tap.auth.enabled | ternary "true" "" }}'
|
||||||
AUTH_APPROVED_EMAILS: '{{ gt (len .Values.tap.auth.approvedemails) 0 | ternary (join "," .Values.tap.auth.approvedemails) "" }}'
|
AUTH_APPROVED_EMAILS: '{{ gt (len .Values.tap.auth.approvedemails) 0 | ternary (join "," .Values.tap.auth.approvedemails) "" }}'
|
||||||
AUTH_APPROVED_DOMAINS: '{{ gt (len .Values.tap.auth.approveddomains) 0 | ternary (join "," .Values.tap.auth.approveddomains) "" }}'
|
AUTH_APPROVED_DOMAINS: '{{ gt (len .Values.tap.auth.approveddomains) 0 | ternary (join "," .Values.tap.auth.approveddomains) "" }}'
|
||||||
|
@ -90,39 +90,6 @@ func (connector *Connector) PostWorkerPodToHub(pod *v1.Pod) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type postRegexRequest struct {
|
|
||||||
Regex string `json:"regex"`
|
|
||||||
Namespaces []string `json:"namespaces"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (connector *Connector) PostRegexToHub(regex string, namespaces []string) {
|
|
||||||
postRegexUrl := fmt.Sprintf("%s/pods/regex", connector.url)
|
|
||||||
|
|
||||||
payload := postRegexRequest{
|
|
||||||
Regex: regex,
|
|
||||||
Namespaces: namespaces,
|
|
||||||
}
|
|
||||||
|
|
||||||
if payloadMarshalled, err := json.Marshal(payload); err != nil {
|
|
||||||
log.Error().Err(err).Msg("Failed to marshal the pod regex:")
|
|
||||||
} else {
|
|
||||||
ok := false
|
|
||||||
for !ok {
|
|
||||||
var resp *http.Response
|
|
||||||
if resp, err = utils.Post(postRegexUrl, "application/json", bytes.NewBuffer(payloadMarshalled), connector.client, config.Config.License); err != nil || resp.StatusCode != http.StatusOK {
|
|
||||||
if _, ok := err.(*url.Error); ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
log.Warn().Err(err).Msg("Failed sending the pod regex to Hub. Retrying...")
|
|
||||||
} else {
|
|
||||||
log.Debug().Str("regex", regex).Strs("namespaces", namespaces).Msg("Reported pod regex to Hub:")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
time.Sleep(DefaultSleep)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type postLicenseRequest struct {
|
type postLicenseRequest struct {
|
||||||
License string `json:"license"`
|
License string `json:"license"`
|
||||||
}
|
}
|
||||||
@ -154,53 +121,6 @@ func (connector *Connector) PostLicense(license string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (connector *Connector) PostLicenseSingle(license string) {
|
|
||||||
postLicenseUrl := fmt.Sprintf("%s/license", connector.url)
|
|
||||||
|
|
||||||
payload := postLicenseRequest{
|
|
||||||
License: license,
|
|
||||||
}
|
|
||||||
|
|
||||||
if payloadMarshalled, err := json.Marshal(payload); err != nil {
|
|
||||||
log.Error().Err(err).Msg("Failed to marshal the payload:")
|
|
||||||
} else {
|
|
||||||
var resp *http.Response
|
|
||||||
if resp, err = utils.Post(postLicenseUrl, "application/json", bytes.NewBuffer(payloadMarshalled), connector.client, config.Config.License); err != nil || resp.StatusCode != http.StatusOK {
|
|
||||||
log.Warn().Err(err).Msg("Failed sending the license to Hub.")
|
|
||||||
} else {
|
|
||||||
log.Debug().Str("license", license).Msg("Reported license to Hub:")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (connector *Connector) PostEnv(env map[string]interface{}) {
|
|
||||||
if len(env) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
postEnvUrl := fmt.Sprintf("%s/scripts/env", connector.url)
|
|
||||||
|
|
||||||
if envMarshalled, err := json.Marshal(env); err != nil {
|
|
||||||
log.Error().Err(err).Msg("Failed to marshal the env:")
|
|
||||||
} else {
|
|
||||||
ok := false
|
|
||||||
for !ok {
|
|
||||||
var resp *http.Response
|
|
||||||
if resp, err = utils.Post(postEnvUrl, "application/json", bytes.NewBuffer(envMarshalled), connector.client, config.Config.License); err != nil || resp.StatusCode != http.StatusOK {
|
|
||||||
if _, ok := err.(*url.Error); ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
log.Warn().Err(err).Msg("Failed sending the scripting environment variables to Hub. Retrying...")
|
|
||||||
} else {
|
|
||||||
log.Debug().Interface("env", env).Msg("Reported scripting environment variables to Hub:")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
time.Sleep(DefaultSleep)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (connector *Connector) PostScript(script *misc.Script) (index int64, err error) {
|
func (connector *Connector) PostScript(script *misc.Script) (index int64, err error) {
|
||||||
postScriptUrl := fmt.Sprintf("%s/scripts", connector.url)
|
postScriptUrl := fmt.Sprintf("%s/scripts", connector.url)
|
||||||
|
|
||||||
@ -323,26 +243,6 @@ func (connector *Connector) DeleteScript(index int64) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (connector *Connector) PostScriptDone() {
|
|
||||||
postScripDonetUrl := fmt.Sprintf("%s/scripts/done", connector.url)
|
|
||||||
|
|
||||||
ok := false
|
|
||||||
var err error
|
|
||||||
for !ok {
|
|
||||||
var resp *http.Response
|
|
||||||
if resp, err = utils.Post(postScripDonetUrl, "application/json", nil, connector.client, config.Config.License); err != nil || resp.StatusCode != http.StatusOK {
|
|
||||||
if _, ok := err.(*url.Error); ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
log.Warn().Err(err).Msg("Failed sending the POST scripts done to Hub. Retrying...")
|
|
||||||
} else {
|
|
||||||
log.Debug().Msg("Reported POST scripts done to Hub.")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
time.Sleep(DefaultSleep)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (connector *Connector) PostPcapsMerge(out *os.File) {
|
func (connector *Connector) PostPcapsMerge(out *os.File) {
|
||||||
postEnvUrl := fmt.Sprintf("%s/pcaps/merge", connector.url)
|
postEnvUrl := fmt.Sprintf("%s/pcaps/merge", connector.url)
|
||||||
|
|
||||||
|
26
kubernetes/config.go
Normal file
26
kubernetes/config.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package kubernetes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/kubeshark/kubeshark/config"
|
||||||
|
v1 "k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
SUFFIX_SECRET = "secret"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetSecret(provider *Provider, key string, value string) (err error) {
|
||||||
|
var secret *v1.Secret
|
||||||
|
secret, err = provider.clientSet.CoreV1().Secrets(config.Config.Tap.Release.Namespace).Get(context.TODO(), SelfResourcesPrefix+SUFFIX_SECRET, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
secret.StringData[key] = value
|
||||||
|
|
||||||
|
_, err = provider.clientSet.CoreV1().Secrets(config.Config.Tap.Release.Namespace).Update(context.TODO(), secret, metav1.UpdateOptions{})
|
||||||
|
return
|
||||||
|
}
|
@ -94,7 +94,7 @@ data:
|
|||||||
POD_REGEX: '.*'
|
POD_REGEX: '.*'
|
||||||
NAMESPACES: ''
|
NAMESPACES: ''
|
||||||
SCRIPTING_ENV: '{}'
|
SCRIPTING_ENV: '{}'
|
||||||
SCRIPTING_SCRIPTS: '[]'
|
SCRIPTING_SCRIPTS: '{}'
|
||||||
AUTH_ENABLED: ''
|
AUTH_ENABLED: ''
|
||||||
AUTH_APPROVED_EMAILS: ''
|
AUTH_APPROVED_EMAILS: ''
|
||||||
AUTH_APPROVED_DOMAINS: ''
|
AUTH_APPROVED_DOMAINS: ''
|
||||||
@ -161,27 +161,27 @@ metadata:
|
|||||||
app.kubernetes.io/version: "50.4"
|
app.kubernetes.io/version: "50.4"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-self-secrets-role
|
name: kubeshark-self-config-role
|
||||||
namespace: default
|
namespace: default
|
||||||
rules:
|
rules:
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- "v1"
|
|
||||||
- ""
|
- ""
|
||||||
|
- v1
|
||||||
resourceNames:
|
resourceNames:
|
||||||
- kubeshark-secret
|
- kubeshark-secret
|
||||||
|
- kubeshark-config-map
|
||||||
resources:
|
resources:
|
||||||
- secrets
|
- secrets
|
||||||
|
- configmaps
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- watch
|
- watch
|
||||||
- update
|
- update
|
||||||
- patch
|
|
||||||
---
|
---
|
||||||
# Source: kubeshark/templates/03-cluster-role-binding.yaml
|
# Source: kubeshark/templates/03-cluster-role-binding.yaml
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
kind: RoleBinding
|
kind: RoleBinding
|
||||||
metadata:
|
metadata:
|
||||||
name: kubeshark-self-secrets-role-binding
|
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-50.4
|
helm.sh/chart: kubeshark-50.4
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
@ -189,15 +189,16 @@ metadata:
|
|||||||
app.kubernetes.io/version: "50.4"
|
app.kubernetes.io/version: "50.4"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
|
name: kubeshark-self-config-role-binding
|
||||||
namespace: default
|
namespace: default
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: kubeshark-self-config-role
|
||||||
subjects:
|
subjects:
|
||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
name: kubeshark-service-account
|
name: kubeshark-service-account
|
||||||
namespace: default
|
namespace: default
|
||||||
roleRef:
|
|
||||||
kind: Role
|
|
||||||
name: kubeshark-self-secrets-role
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
---
|
---
|
||||||
# Source: kubeshark/templates/05-hub-service.yaml
|
# Source: kubeshark/templates/05-hub-service.yaml
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@ -288,13 +289,21 @@ spec:
|
|||||||
- -port
|
- -port
|
||||||
- '8897'
|
- '8897'
|
||||||
- -servicemesh
|
- -servicemesh
|
||||||
- -tls
|
|
||||||
- -procfs
|
- -procfs
|
||||||
- /hostproc
|
- /hostproc
|
||||||
|
|
||||||
image: 'docker.io/kubeshark/worker:latest'
|
image: 'docker.io/kubeshark/worker:latest'
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
name: kubeshark-worker-daemon-set
|
name: sniffer
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
envFrom:
|
envFrom:
|
||||||
- secretRef:
|
- secretRef:
|
||||||
name: kubeshark-secret
|
name: kubeshark-secret
|
||||||
@ -313,7 +322,6 @@ spec:
|
|||||||
- SYS_ADMIN
|
- SYS_ADMIN
|
||||||
- SYS_PTRACE
|
- SYS_PTRACE
|
||||||
- DAC_OVERRIDE
|
- DAC_OVERRIDE
|
||||||
- SYS_RESOURCE
|
|
||||||
- SYS_MODULE
|
- SYS_MODULE
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
@ -338,6 +346,50 @@ spec:
|
|||||||
- mountPath: /sys
|
- mountPath: /sys
|
||||||
name: sys
|
name: sys
|
||||||
readOnly: true
|
readOnly: true
|
||||||
|
- command:
|
||||||
|
- ./tracer
|
||||||
|
- -procfs
|
||||||
|
- /hostproc
|
||||||
|
|
||||||
|
image: 'docker.io/kubeshark/worker:latest'
|
||||||
|
imagePullPolicy: Always
|
||||||
|
name: tracer
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: kubeshark-secret
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 750m
|
||||||
|
memory: 1Gi
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 50Mi
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- SYS_ADMIN
|
||||||
|
- SYS_PTRACE
|
||||||
|
- DAC_OVERRIDE
|
||||||
|
- SYS_RESOURCE
|
||||||
|
- SYS_MODULE
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /hostproc
|
||||||
|
name: proc
|
||||||
|
readOnly: true
|
||||||
|
- mountPath: /sys
|
||||||
|
name: sys
|
||||||
|
readOnly: true
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
serviceAccountName: kubeshark-service-account
|
serviceAccountName: kubeshark-service-account
|
||||||
@ -368,8 +420,6 @@ spec:
|
|||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: kubeshark-hub
|
|
||||||
namespace: default
|
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-50.4
|
helm.sh/chart: kubeshark-50.4
|
||||||
@ -378,16 +428,27 @@ metadata:
|
|||||||
app.kubernetes.io/version: "50.4"
|
app.kubernetes.io/version: "50.4"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
|
name: kubeshark-hub
|
||||||
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
replicas: 1 # Set the desired number of replicas
|
replicas: 1 # Set the desired number of replicas
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
|
helm.sh/chart: kubeshark-50.4
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "50.4"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
sidecar.istio.io/inject: "false"
|
helm.sh/chart: kubeshark-50.4
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "50.4"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
serviceAccountName: kubeshark-service-account
|
serviceAccountName: kubeshark-service-account
|
||||||
@ -396,6 +457,15 @@ spec:
|
|||||||
command:
|
command:
|
||||||
- ./hub
|
- ./hub
|
||||||
|
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: kubeshark-config-map
|
name: kubeshark-config-map
|
||||||
@ -429,8 +499,6 @@ spec:
|
|||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: kubeshark-front
|
|
||||||
namespace: default
|
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
helm.sh/chart: kubeshark-50.4
|
helm.sh/chart: kubeshark-50.4
|
||||||
@ -439,15 +507,27 @@ metadata:
|
|||||||
app.kubernetes.io/version: "50.4"
|
app.kubernetes.io/version: "50.4"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
|
name: kubeshark-front
|
||||||
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
replicas: 1 # Set the desired number of replicas
|
replicas: 1 # Set the desired number of replicas
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
|
helm.sh/chart: kubeshark-50.4
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "50.4"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
|
helm.sh/chart: kubeshark-50.4
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "50.4"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- env:
|
||||||
|
Loading…
Reference in New Issue
Block a user