mirror of
https://github.com/kubeshark/kubeshark.git
synced 2026-05-05 00:37:55 +00:00
Compare commits
103 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
219fc0a126 | ||
|
|
e70167c694 | ||
|
|
ba126dff51 | ||
|
|
377ff44d71 | ||
|
|
557506096c | ||
|
|
47d5764cdc | ||
|
|
32136520d8 | ||
|
|
19d2822d3e | ||
|
|
a31bb0e6e7 | ||
|
|
7de515dd3a | ||
|
|
5089e9ccb8 | ||
|
|
c837874bbe | ||
|
|
13b35f1672 | ||
|
|
4ec06b7c95 | ||
|
|
df0aea1462 | ||
|
|
64a4c5ce62 | ||
|
|
9c9cefc406 | ||
|
|
db23ff6338 | ||
|
|
a699755858 | ||
|
|
b7efd94414 | ||
|
|
be86ea8ecb | ||
|
|
6ea1073fe9 | ||
|
|
48bf3f25c5 | ||
|
|
28ae2a645b | ||
|
|
b7530a3c6b | ||
|
|
7168b5c515 | ||
|
|
50d29f1e93 | ||
|
|
01656b6c78 | ||
|
|
a16f818bdf | ||
|
|
c88b3b0ba7 | ||
|
|
e7778fe537 | ||
|
|
126f8b48d5 | ||
|
|
b9296d7849 | ||
|
|
cddccd58fa | ||
|
|
3965916837 | ||
|
|
ba1254f7e9 | ||
|
|
df1915cce6 | ||
|
|
88ea7120c4 | ||
|
|
f43a61f891 | ||
|
|
067875d544 | ||
|
|
77ed1fdefe | ||
|
|
e1f8a24897 | ||
|
|
40177b8fa9 | ||
|
|
6d0512fd57 | ||
|
|
75931d9123 | ||
|
|
d6143f5a6a | ||
|
|
a58f72ed87 | ||
|
|
d22e30f86d | ||
|
|
806aa12feb | ||
|
|
30e6d28672 | ||
|
|
ef84f90cd9 | ||
|
|
b49ca767c9 | ||
|
|
d1cc890cad | ||
|
|
a9a75533af | ||
|
|
1aef7be3fb | ||
|
|
c1e812e449 | ||
|
|
c2b73025f3 | ||
|
|
af2086a54d | ||
|
|
359623c538 | ||
|
|
3798bf7a01 | ||
|
|
487f0b9332 | ||
|
|
39c5df64e6 | ||
|
|
22a777ac79 | ||
|
|
06e0def53e | ||
|
|
b88f1c7014 | ||
|
|
f4e2d2f9ca | ||
|
|
f017020f62 | ||
|
|
32ffa6132d | ||
|
|
0bb0c4b256 | ||
|
|
28696d2f5c | ||
|
|
7ab63ec745 | ||
|
|
ddabbac317 | ||
|
|
5a4901f7bd | ||
|
|
5a322fc58a | ||
|
|
53c3dabcbf | ||
|
|
6b6915c7ee | ||
|
|
e819759c2d | ||
|
|
b39c5dd5d3 | ||
|
|
0f402789f1 | ||
|
|
d4fade3599 | ||
|
|
054c4a9e8b | ||
|
|
35c1a88724 | ||
|
|
fe3f93c91b | ||
|
|
24aa4db0bc | ||
|
|
ef44257942 | ||
|
|
0b58558f70 | ||
|
|
cdd306b890 | ||
|
|
3cc9ff8616 | ||
|
|
247498492a | ||
|
|
867c7058a0 | ||
|
|
f1021f61b6 | ||
|
|
9162c4fb64 | ||
|
|
e7fc7b791a | ||
|
|
9914183d7d | ||
|
|
c0751ad4cb | ||
|
|
0aca81fbcb | ||
|
|
24dccab3e4 | ||
|
|
db607aff16 | ||
|
|
ec1728ef91 | ||
|
|
93de6e8934 | ||
|
|
5998d00e6a | ||
|
|
afafb2c625 | ||
|
|
b125860d06 |
44
.github/workflows/release.yml
vendored
44
.github/workflows/release.yml
vendored
@@ -14,6 +14,8 @@ jobs:
|
|||||||
release:
|
release:
|
||||||
name: Build and publish a new release
|
name: Build and publish a new release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
version: ${{ steps.version.outputs.tag }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -47,35 +49,19 @@ jobs:
|
|||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
artifacts: "bin/*"
|
artifacts: "bin/*"
|
||||||
tag: ${{ steps.version.outputs.tag }}
|
tag: ${{ steps.version.outputs.tag }}
|
||||||
prerelease: true
|
prerelease: false
|
||||||
bodyFile: 'bin/README.md'
|
bodyFile: 'bin/README.md'
|
||||||
|
|
||||||
- name: Checkout
|
brew:
|
||||||
uses: actions/checkout@v4
|
name: Publish a new Homebrew formulae
|
||||||
|
needs: [release]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Bump core homebrew formula
|
||||||
|
uses: mislav/bump-homebrew-formula-action@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
# A PR will be sent to github.com/Homebrew/homebrew-core to update this formula:
|
||||||
repository: kubeshark/homebrew-kubeshark
|
formula-name: kubeshark
|
||||||
token: ${{ secrets.HOMEBREW_TOKEN }}
|
push-to: kubeshark/homebrew-core
|
||||||
path: homebrew-kubeshark
|
env:
|
||||||
|
COMMITTER_TOKEN: ${{ secrets.COMMITTER_TOKEN }}
|
||||||
- name: Generate Homebrew formulae
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
export FULL_VERSION=${{ steps.version.outputs.tag }}
|
|
||||||
export CLEAN_VERSION=$(echo $FULL_VERSION | sed 's/^v//')
|
|
||||||
export DARWIN_AMD64_SHA256=$(shasum -a 256 bin/kubeshark_darwin_amd64 | awk '{print $1}')
|
|
||||||
export DARWIN_ARM64_SHA256=$(shasum -a 256 bin/kubeshark_darwin_arm64 | awk '{print $1}')
|
|
||||||
export LINUX_AMD64_SHA256=$(shasum -a 256 bin/kubeshark_linux_amd64 | awk '{print $1}')
|
|
||||||
export LINUX_ARM64_SHA256=$(shasum -a 256 bin/kubeshark_linux_arm64 | awk '{print $1}')
|
|
||||||
envsubst < .github/static/kubeshark.rb.tmpl > homebrew-kubeshark/kubeshark.rb
|
|
||||||
|
|
||||||
cat homebrew-kubeshark/kubeshark.rb
|
|
||||||
|
|
||||||
- name: Commit and push Homebrew formulae
|
|
||||||
working-directory: homebrew-kubeshark
|
|
||||||
run: |
|
|
||||||
git config --global user.email "bot@kubeshark.io"
|
|
||||||
git config --global user.name "Kubeshark Bot"
|
|
||||||
git add kubeshark.rb
|
|
||||||
git commit -m "Release ${{ steps.version.outputs.tag }}"
|
|
||||||
git push
|
|
||||||
|
|||||||
66
Makefile
66
Makefile
@@ -14,7 +14,7 @@ export VER?=0.0.0
|
|||||||
help: ## Print this help message.
|
help: ## Print this help message.
|
||||||
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||||
|
|
||||||
build-debug: ## Build for debuging.
|
build-debug: ## Build for debugging.
|
||||||
export CGO_ENABLED=1
|
export CGO_ENABLED=1
|
||||||
export GCLFAGS='-gcflags="all=-N -l"'
|
export GCLFAGS='-gcflags="all=-N -l"'
|
||||||
${MAKE} build-base
|
${MAKE} build-base
|
||||||
@@ -49,6 +49,12 @@ build-brew: ## Build binary for brew/core CI
|
|||||||
-X 'github.com/kubeshark/kubeshark/misc.Ver=$(VER)'" \
|
-X 'github.com/kubeshark/kubeshark/misc.Ver=$(VER)'" \
|
||||||
-o kubeshark kubeshark.go
|
-o kubeshark kubeshark.go
|
||||||
|
|
||||||
|
build-windows-amd64:
|
||||||
|
$(MAKE) build GOOS=windows GOARCH=amd64 && \
|
||||||
|
mv ./bin/kubeshark_windows_amd64 ./bin/kubeshark.exe && \
|
||||||
|
rm bin/kubeshark_windows_amd64.sha256 && \
|
||||||
|
cd bin && shasum -a 256 kubeshark.exe > kubeshark.exe.sha256
|
||||||
|
|
||||||
build-all: ## Build for all supported platforms.
|
build-all: ## Build for all supported platforms.
|
||||||
export CGO_ENABLED=0
|
export CGO_ENABLED=0
|
||||||
echo "Compiling for every OS and Platform" && \
|
echo "Compiling for every OS and Platform" && \
|
||||||
@@ -57,8 +63,7 @@ build-all: ## Build for all supported platforms.
|
|||||||
$(MAKE) build GOOS=linux GOARCH=arm64 && \
|
$(MAKE) build GOOS=linux GOARCH=arm64 && \
|
||||||
$(MAKE) build GOOS=darwin GOARCH=amd64 && \
|
$(MAKE) build GOOS=darwin GOARCH=amd64 && \
|
||||||
$(MAKE) build GOOS=darwin GOARCH=arm64 && \
|
$(MAKE) build GOOS=darwin GOARCH=arm64 && \
|
||||||
$(MAKE) build GOOS=windows GOARCH=amd64 && \
|
$(MAKE) build-windows-amd64 && \
|
||||||
mv ./bin/kubeshark_windows_amd64 ./bin/kubeshark.exe && \
|
|
||||||
echo "---------" && \
|
echo "---------" && \
|
||||||
find ./bin -ls
|
find ./bin -ls
|
||||||
|
|
||||||
@@ -84,16 +89,34 @@ generate-helm-values: ## Generate the Helm values from config.yaml
|
|||||||
generate-manifests: ## Generate the manifests from the Helm chart using default configuration
|
generate-manifests: ## Generate the manifests from the Helm chart using default configuration
|
||||||
helm template kubeshark -n default ./helm-chart > ./manifests/complete.yaml
|
helm template kubeshark -n default ./helm-chart > ./manifests/complete.yaml
|
||||||
|
|
||||||
logs-worker:
|
logs-sniffer:
|
||||||
export LOGS_POD_PREFIX=kubeshark-worker-
|
export LOGS_POD_PREFIX=kubeshark-worker-
|
||||||
|
export LOGS_CONTAINER='-c sniffer'
|
||||||
export LOGS_FOLLOW=
|
export LOGS_FOLLOW=
|
||||||
${MAKE} logs
|
${MAKE} logs
|
||||||
|
|
||||||
logs-worker-follow:
|
logs-sniffer-follow:
|
||||||
export LOGS_POD_PREFIX=kubeshark-worker-
|
export LOGS_POD_PREFIX=kubeshark-worker-
|
||||||
|
export LOGS_CONTAINER='-c sniffer'
|
||||||
export LOGS_FOLLOW=--follow
|
export LOGS_FOLLOW=--follow
|
||||||
${MAKE} logs
|
${MAKE} logs
|
||||||
|
|
||||||
|
logs-tracer:
|
||||||
|
export LOGS_POD_PREFIX=kubeshark-worker-
|
||||||
|
export LOGS_CONTAINER='-c tracer'
|
||||||
|
export LOGS_FOLLOW=
|
||||||
|
${MAKE} logs
|
||||||
|
|
||||||
|
logs-tracer-follow:
|
||||||
|
export LOGS_POD_PREFIX=kubeshark-worker-
|
||||||
|
export LOGS_CONTAINER='-c tracer'
|
||||||
|
export LOGS_FOLLOW=--follow
|
||||||
|
${MAKE} logs
|
||||||
|
|
||||||
|
logs-worker: logs-sniffer
|
||||||
|
|
||||||
|
logs-worker-follow: logs-sniffer-follow
|
||||||
|
|
||||||
logs-hub:
|
logs-hub:
|
||||||
export LOGS_POD_PREFIX=kubeshark-hub
|
export LOGS_POD_PREFIX=kubeshark-hub
|
||||||
export LOGS_FOLLOW=
|
export LOGS_FOLLOW=
|
||||||
@@ -115,7 +138,7 @@ logs-front-follow:
|
|||||||
${MAKE} logs
|
${MAKE} logs
|
||||||
|
|
||||||
logs:
|
logs:
|
||||||
kubectl logs $$(kubectl get pods | awk '$$1 ~ /^$(LOGS_POD_PREFIX)/' | awk 'END {print $$1}') $(LOGS_FOLLOW)
|
kubectl logs $$(kubectl get pods | awk '$$1 ~ /^$(LOGS_POD_PREFIX)/' | awk 'END {print $$1}') $(LOGS_CONTAINER) $(LOGS_FOLLOW)
|
||||||
|
|
||||||
ssh-node:
|
ssh-node:
|
||||||
kubectl ssh node $$(kubectl get nodes | awk 'END {print $$1}')
|
kubectl ssh node $$(kubectl get nodes | awk 'END {print $$1}')
|
||||||
@@ -136,22 +159,13 @@ exec:
|
|||||||
kubectl exec --stdin --tty $$(kubectl get pods | awk '$$1 ~ /^$(EXEC_POD_PREFIX)/' | awk 'END {print $$1}') -- /bin/sh
|
kubectl exec --stdin --tty $$(kubectl get pods | awk '$$1 ~ /^$(EXEC_POD_PREFIX)/' | awk 'END {print $$1}') -- /bin/sh
|
||||||
|
|
||||||
helm-install:
|
helm-install:
|
||||||
cd helm-chart && helm install kubeshark . && cd ..
|
cd helm-chart && helm install kubeshark . --set tap.docker.tag=$(TAG) && cd ..
|
||||||
|
|
||||||
helm-install-canary:
|
|
||||||
cd helm-chart && helm install kubeshark . --set tap.docker.tag=canary && cd ..
|
|
||||||
|
|
||||||
helm-install-dev:
|
|
||||||
cd helm-chart && helm install kubeshark . --set tap.docker.tag=dev && cd ..
|
|
||||||
|
|
||||||
helm-install-debug:
|
helm-install-debug:
|
||||||
cd helm-chart && helm install kubeshark . --set tap.debug=true && cd ..
|
cd helm-chart && helm install kubeshark . --set tap.docker.tag=$(TAG) --set tap.debug=true && cd ..
|
||||||
|
|
||||||
helm-install-debug-canary:
|
helm-install-profile:
|
||||||
cd helm-chart && helm install kubeshark . --set tap.debug=true --set tap.docker.tag=canary && cd ..
|
cd helm-chart && helm install kubeshark . --set tap.docker.tag=$(TAG) --set tap.misc.profile=true && cd ..
|
||||||
|
|
||||||
helm-install-debug-dev:
|
|
||||||
cd helm-chart && helm install kubeshark . --set tap.debug=true --set tap.docker.tag=dev && cd ..
|
|
||||||
|
|
||||||
helm-uninstall:
|
helm-uninstall:
|
||||||
helm uninstall kubeshark
|
helm uninstall kubeshark
|
||||||
@@ -159,8 +173,8 @@ helm-uninstall:
|
|||||||
proxy:
|
proxy:
|
||||||
kubeshark proxy
|
kubeshark proxy
|
||||||
|
|
||||||
port-forward-worker:
|
port-forward:
|
||||||
kubectl port-forward $$(kubectl get pods | awk '$$1 ~ /^$(LOGS_POD_PREFIX)/' | awk 'END {print $$1}') $(LOGS_FOLLOW) 30001:30001
|
kubectl port-forward $$(kubectl get pods | awk '$$1 ~ /^$(POD_PREFIX)/' | awk 'END {print $$1}') $(SRC_PORT):$(DST_PORT)
|
||||||
|
|
||||||
release:
|
release:
|
||||||
@cd ../worker && git checkout master && git pull && git tag -d v$(VERSION); git tag v$(VERSION) && git push origin --tags
|
@cd ../worker && git checkout master && git pull && git tag -d v$(VERSION); git tag v$(VERSION) && git push origin --tags
|
||||||
@@ -172,3 +186,13 @@ release:
|
|||||||
@cd helm-chart && cp -r . ../../kubeshark.github.io/charts/chart
|
@cd helm-chart && cp -r . ../../kubeshark.github.io/charts/chart
|
||||||
@cd ../../kubeshark.github.io/ && git add -A . && git commit -m ":sparkles: Update the Helm chart" && git push
|
@cd ../../kubeshark.github.io/ && git add -A . && git commit -m ":sparkles: Update the Helm chart" && git push
|
||||||
@cd ../kubeshark
|
@cd ../kubeshark
|
||||||
|
|
||||||
|
branch:
|
||||||
|
@cd ../worker && git checkout master && git pull && git checkout -b $(name); git push --set-upstream origin $(name)
|
||||||
|
@cd ../hub && git checkout master && git pull && git checkout -b $(name); git push --set-upstream origin $(name)
|
||||||
|
@cd ../front && git checkout master && git pull && git checkout -b $(name); git push --set-upstream origin $(name)
|
||||||
|
|
||||||
|
switch-to-branch:
|
||||||
|
@cd ../worker && git checkout $(name)
|
||||||
|
@cd ../hub && git checkout $(name)
|
||||||
|
@cd ../front && git checkout $(name)
|
||||||
|
|||||||
23
README.md
23
README.md
@@ -22,10 +22,8 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<b>
|
<b>
|
||||||
NEW:
|
Want to see Kubeshark in action, right now? Visit this
|
||||||
<a href="https://github.com/kubeshark/kubeshark/releases/latest">Version 52.1.50</a>
|
<a href="https://demo.kubeshark.co/">live demo deployment</a> of Kubeshark.
|
||||||
now available, featuring enhanced
|
|
||||||
<a href="https://docs.kubeshark.co/en/half_connections">Network Error Detection & Analysis</a>.
|
|
||||||
</b>
|
</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -51,18 +49,21 @@ Running any of the :point_up: above commands will open the [Web UI](https://docs
|
|||||||
|
|
||||||
### Homebrew
|
### Homebrew
|
||||||
|
|
||||||
[Homebrew](https://brew.sh/) :beer: users can add Kubeshark formulae with:
|
[Homebrew](https://brew.sh/) :beer: users install Kubeshark CLI with:
|
||||||
|
|
||||||
```shell
|
|
||||||
brew tap kubeshark/kubeshark
|
|
||||||
```
|
|
||||||
|
|
||||||
and install Kubeshark CLI with:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
brew install kubeshark
|
brew install kubeshark
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Helm
|
||||||
|
|
||||||
|
Add the helm repository and install the chart:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
helm repo add kubeshark https://helm.kubeshark.co
|
||||||
|
helm install kubeshark kubeshark/kubeshark
|
||||||
|
```
|
||||||
|
|
||||||
## Building From Source
|
## Building From Source
|
||||||
|
|
||||||
Clone this repository and run `make` command to build it. After the build is complete, the executable can be found at `./bin/kubeshark__`.
|
Clone this repository and run `make` command to build it. After the build is complete, the executable can be found at `./bin/kubeshark__`.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Kubeshark release _VER_
|
# Kubeshark release _VER_
|
||||||
Kubeshark CHANGELOG is now part of [Kubeshark wiki](https://github.com/kubeshark/kubeshark/wiki/CHANGELOG)
|
Release notes coming soon ..
|
||||||
|
|
||||||
## Download Kubeshark for your platform
|
## Download Kubeshark for your platform
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, ctx con
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Err(errormessage.FormatError(err)).
|
Err(errormessage.FormatError(err)).
|
||||||
Msg(fmt.Sprintf("Error occured while running K8s proxy. Try setting different port using --%s", proxyPortLabel))
|
Msg(fmt.Sprintf("Error occurred while running K8s proxy. Try setting different port using --%s", proxyPortLabel))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, ctx con
|
|||||||
log.Error().
|
log.Error().
|
||||||
Str("pod-regex", podRegex.String()).
|
Str("pod-regex", podRegex.String()).
|
||||||
Err(errormessage.FormatError(err)).
|
Err(errormessage.FormatError(err)).
|
||||||
Msg(fmt.Sprintf("Error occured while running port forward. Try setting different port using --%s", proxyPortLabel))
|
Msg(fmt.Sprintf("Error occurred while running port forward. Try setting different port using --%s", proxyPortLabel))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ func dumpLogsIfNeeded(ctx context.Context, kubernetesProvider *kubernetes.Provid
|
|||||||
}
|
}
|
||||||
dotDir := misc.GetDotFolderPath()
|
dotDir := misc.GetDotFolderPath()
|
||||||
filePath := path.Join(dotDir, fmt.Sprintf("%s_logs_%s.zip", misc.Program, time.Now().Format("2006_01_02__15_04_05")))
|
filePath := path.Join(dotDir, fmt.Sprintf("%s_logs_%s.zip", misc.Program, time.Now().Format("2006_01_02__15_04_05")))
|
||||||
if err := fsUtils.DumpLogs(ctx, kubernetesProvider, filePath); err != nil {
|
if err := fsUtils.DumpLogs(ctx, kubernetesProvider, filePath, config.Config.Logs.Grep); err != nil {
|
||||||
log.Error().Err(err).Msg("Failed to dump logs.")
|
log.Error().Err(err).Msg("Failed to dump logs.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ func runConsole() {
|
|||||||
Path: "/scripts/logs",
|
Path: "/scripts/logs",
|
||||||
}
|
}
|
||||||
headers := http.Header{}
|
headers := http.Header{}
|
||||||
|
headers.Set(utils.X_KUBESHARK_CAPTURE_HEADER_KEY, utils.X_KUBESHARK_CAPTURE_HEADER_IGNORE_VALUE)
|
||||||
headers.Set("License-Key", config.Config.License)
|
headers.Set("License-Key", config.Config.License)
|
||||||
|
|
||||||
c, _, err := websocket.DefaultDialer.Dial(u.String(), headers)
|
c, _, err := websocket.DefaultDialer.Dial(u.String(), headers)
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ var logsCmd = &cobra.Command{
|
|||||||
|
|
||||||
log.Debug().Str("logs-path", config.Config.Logs.FilePath()).Msg("Using this logs path...")
|
log.Debug().Str("logs-path", config.Config.Logs.FilePath()).Msg("Using this logs path...")
|
||||||
|
|
||||||
if dumpLogsErr := fsUtils.DumpLogs(ctx, kubernetesProvider, config.Config.Logs.FilePath()); dumpLogsErr != nil {
|
if dumpLogsErr := fsUtils.DumpLogs(ctx, kubernetesProvider, config.Config.Logs.FilePath(), config.Config.Logs.Grep); dumpLogsErr != nil {
|
||||||
log.Error().Err(dumpLogsErr).Msg("Failed to dump logs.")
|
log.Error().Err(dumpLogsErr).Msg("Failed to dump logs.")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,4 +47,5 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logsCmd.Flags().StringP(configStructs.FileLogsName, "f", defaultLogsConfig.FileStr, fmt.Sprintf("Path for zip file (default current <pwd>\\%s_logs.zip)", misc.Program))
|
logsCmd.Flags().StringP(configStructs.FileLogsName, "f", defaultLogsConfig.FileStr, fmt.Sprintf("Path for zip file (default current <pwd>\\%s_logs.zip)", misc.Program))
|
||||||
|
logsCmd.Flags().StringP(configStructs.GrepLogsName, "g", defaultLogsConfig.Grep, "Regexp to do grepping on the logs")
|
||||||
}
|
}
|
||||||
|
|||||||
138
cmd/pro.go
138
cmd/pro.go
@@ -1,138 +0,0 @@
|
|||||||
package cmd
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/creasty/defaults"
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"github.com/kubeshark/kubeshark/config"
|
|
||||||
"github.com/kubeshark/kubeshark/config/configStructs"
|
|
||||||
"github.com/kubeshark/kubeshark/internal/connect"
|
|
||||||
"github.com/kubeshark/kubeshark/kubernetes"
|
|
||||||
"github.com/kubeshark/kubeshark/utils"
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
|
||||||
|
|
||||||
var proCmd = &cobra.Command{
|
|
||||||
Use: "pro",
|
|
||||||
Short: "Acquire a Pro license",
|
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
|
||||||
acquireLicense()
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
PRO_URL = "https://console.kubeshark.co/cli"
|
|
||||||
PRO_PORT = 5252
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
rootCmd.AddCommand(proCmd)
|
|
||||||
|
|
||||||
defaultTapConfig := configStructs.TapConfig{}
|
|
||||||
if err := defaults.Set(&defaultTapConfig); err != nil {
|
|
||||||
log.Debug().Err(err).Send()
|
|
||||||
}
|
|
||||||
|
|
||||||
proCmd.Flags().Uint16(configStructs.ProxyFrontPortLabel, defaultTapConfig.Proxy.Front.Port, "Provide a custom port for the Kubeshark")
|
|
||||||
proCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.Proxy.Host, "Provide a custom host for the Kubeshark")
|
|
||||||
proCmd.Flags().StringP(configStructs.ReleaseNamespaceLabel, "s", defaultTapConfig.Release.Namespace, "Release namespace of Kubeshark")
|
|
||||||
}
|
|
||||||
|
|
||||||
func acquireLicense() {
|
|
||||||
hubUrl := kubernetes.GetHubUrl()
|
|
||||||
response, err := http.Get(fmt.Sprintf("%s/echo", hubUrl))
|
|
||||||
if err != nil || response.StatusCode != 200 {
|
|
||||||
log.Info().Msg(fmt.Sprintf(utils.Yellow, "Couldn't connect to Hub. Establishing proxy..."))
|
|
||||||
runProxy(false, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
connector = connect.NewConnector(kubernetes.GetHubUrl(), connect.DefaultRetries, connect.DefaultTimeout)
|
|
||||||
|
|
||||||
log.Info().Str("url", PRO_URL).Msg("Opening in the browser:")
|
|
||||||
utils.OpenBrowser(PRO_URL)
|
|
||||||
|
|
||||||
runLicenseRecieverServer()
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateLicense(licenseKey string) {
|
|
||||||
log.Info().Str("key", licenseKey).Msg("Received license:")
|
|
||||||
|
|
||||||
config.Config.License = licenseKey
|
|
||||||
err := config.WriteConfig(&config.Config)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Send()
|
|
||||||
}
|
|
||||||
|
|
||||||
kubernetesProvider, err := getKubernetesProviderForCli(false, false)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Send()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
updated, err := kubernetes.SetSecret(kubernetesProvider, kubernetes.SECRET_LICENSE, config.Config.License)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Send()
|
|
||||||
}
|
|
||||||
|
|
||||||
if updated {
|
|
||||||
log.Info().Msg("Updated the license, exiting...")
|
|
||||||
} else {
|
|
||||||
log.Info().Msg("Exiting...")
|
|
||||||
}
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
time.Sleep(2 * time.Second)
|
|
||||||
os.Exit(0)
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
func runLicenseRecieverServer() {
|
|
||||||
gin.SetMode(gin.ReleaseMode)
|
|
||||||
ginApp := gin.New()
|
|
||||||
ginApp.Use(func(c *gin.Context) {
|
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
|
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With, x-session-token")
|
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")
|
|
||||||
c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Disposition")
|
|
||||||
|
|
||||||
if c.Request.Method == "OPTIONS" {
|
|
||||||
c.AbortWithStatus(http.StatusNoContent)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.Next()
|
|
||||||
})
|
|
||||||
|
|
||||||
ginApp.POST("/", func(c *gin.Context) {
|
|
||||||
data, err := io.ReadAll(c.Request.Body)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Err(err).Send()
|
|
||||||
c.AbortWithStatus(http.StatusBadRequest)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
licenseKey := string(data)
|
|
||||||
|
|
||||||
updateLicense(licenseKey)
|
|
||||||
})
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
if err := ginApp.Run(fmt.Sprintf(":%d", PRO_PORT)); err != nil {
|
|
||||||
log.Error().Err(err).Send()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
log.Info().Msg("Alternatively enter your license key:")
|
|
||||||
|
|
||||||
var licenseKey string
|
|
||||||
fmt.Scanf("%s", &licenseKey)
|
|
||||||
|
|
||||||
updateLicense(licenseKey)
|
|
||||||
}
|
|
||||||
@@ -48,6 +48,7 @@ func init() {
|
|||||||
tapCmd.Flags().Uint16(configStructs.ProxyFrontPortLabel, defaultTapConfig.Proxy.Front.Port, "Provide a custom port for the proxy/port-forward")
|
tapCmd.Flags().Uint16(configStructs.ProxyFrontPortLabel, defaultTapConfig.Proxy.Front.Port, "Provide a custom port for the proxy/port-forward")
|
||||||
tapCmd.Flags().String(configStructs.ProxyHostLabel, defaultTapConfig.Proxy.Host, "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().StringSliceP(configStructs.ExcludedNamespacesLabel, "e", defaultTapConfig.ExcludedNamespaces, "Excluded namespaces")
|
||||||
tapCmd.Flags().StringP(configStructs.ReleaseNamespaceLabel, "s", defaultTapConfig.Release.Namespace, "Release namespace of Kubeshark")
|
tapCmd.Flags().StringP(configStructs.ReleaseNamespaceLabel, "s", defaultTapConfig.Release.Namespace, "Release namespace of Kubeshark")
|
||||||
tapCmd.Flags().Bool(configStructs.PersistentStorageLabel, defaultTapConfig.PersistentStorage, "Enable persistent storage (PersistentVolumeClaim)")
|
tapCmd.Flags().Bool(configStructs.PersistentStorageLabel, defaultTapConfig.PersistentStorage, "Enable persistent storage (PersistentVolumeClaim)")
|
||||||
tapCmd.Flags().Bool(configStructs.PersistentStorageStaticLabel, defaultTapConfig.PersistentStorageStatic, "Persistent storage static provision")
|
tapCmd.Flags().Bool(configStructs.PersistentStorageStaticLabel, defaultTapConfig.PersistentStorageStatic, "Persistent storage static provision")
|
||||||
|
|||||||
@@ -193,6 +193,7 @@ func watchHubPod(ctx context.Context, kubernetesProvider *kubernetes.Provider, c
|
|||||||
ready.Lock()
|
ready.Lock()
|
||||||
ready.Hub = true
|
ready.Hub = true
|
||||||
ready.Unlock()
|
ready.Unlock()
|
||||||
|
log.Info().Str("pod", kubernetes.HubPodName).Msg("Ready.")
|
||||||
}
|
}
|
||||||
|
|
||||||
ready.Lock()
|
ready.Lock()
|
||||||
@@ -282,6 +283,7 @@ func watchFrontPod(ctx context.Context, kubernetesProvider *kubernetes.Provider,
|
|||||||
ready.Lock()
|
ready.Lock()
|
||||||
ready.Front = true
|
ready.Front = true
|
||||||
ready.Unlock()
|
ready.Unlock()
|
||||||
|
log.Info().Str("pod", kubernetes.FrontPodName).Msg("Ready.")
|
||||||
}
|
}
|
||||||
|
|
||||||
ready.Lock()
|
ready.Lock()
|
||||||
@@ -435,6 +437,7 @@ func updateConfig(kubernetesProvider *kubernetes.Provider) {
|
|||||||
_, _ = kubernetes.SetSecret(kubernetesProvider, kubernetes.SECRET_LICENSE, config.Config.License)
|
_, _ = kubernetes.SetSecret(kubernetesProvider, kubernetes.SECRET_LICENSE, config.Config.License)
|
||||||
_, _ = kubernetes.SetConfig(kubernetesProvider, kubernetes.CONFIG_POD_REGEX, config.Config.Tap.PodRegexStr)
|
_, _ = kubernetes.SetConfig(kubernetesProvider, kubernetes.CONFIG_POD_REGEX, config.Config.Tap.PodRegexStr)
|
||||||
_, _ = kubernetes.SetConfig(kubernetesProvider, kubernetes.CONFIG_NAMESPACES, strings.Join(config.Config.Tap.Namespaces, ","))
|
_, _ = kubernetes.SetConfig(kubernetesProvider, kubernetes.CONFIG_NAMESPACES, strings.Join(config.Config.Tap.Namespaces, ","))
|
||||||
|
_, _ = kubernetes.SetConfig(kubernetesProvider, kubernetes.CONFIG_EXCLUDED_NAMESPACES, strings.Join(config.Config.Tap.ExcludedNamespaces, ","))
|
||||||
|
|
||||||
data, err := json.Marshal(config.Config.Scripting.Env)
|
data, err := json.Marshal(config.Config.Scripting.Env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func InitConfig(cmd *cobra.Command) error {
|
|||||||
var err error
|
var err error
|
||||||
DebugMode, err = cmd.Flags().GetBool(DebugFlag)
|
DebugMode, err = cmd.Flags().GetBool(DebugFlag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg(fmt.Sprintf("Can't recieve '%s' flag", DebugFlag))
|
log.Error().Err(err).Msg(fmt.Sprintf("Can't receive '%s' flag", DebugFlag))
|
||||||
}
|
}
|
||||||
|
|
||||||
if DebugMode {
|
if DebugMode {
|
||||||
@@ -146,7 +146,8 @@ func loadConfigFile(config *ConfigStruct, silent bool) error {
|
|||||||
} else {
|
} else {
|
||||||
ConfigFilePath = cwdConfig
|
ConfigFilePath = cwdConfig
|
||||||
}
|
}
|
||||||
|
defer reader.Close()
|
||||||
|
|
||||||
buf, err := io.ReadAll(reader)
|
buf, err := io.ReadAll(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -63,16 +63,28 @@ func CreateDefaultConfig() ConfigStruct {
|
|||||||
RoleAttribute: "role",
|
RoleAttribute: "role",
|
||||||
Roles: map[string]configStructs.Role{
|
Roles: map[string]configStructs.Role{
|
||||||
"admin": {
|
"admin": {
|
||||||
Filter: "",
|
Filter: "",
|
||||||
CanReplayTraffic: true,
|
CanDownloadPCAP: true,
|
||||||
CanDownloadPCAP: true,
|
CanUseScripting: true,
|
||||||
CanUseScripting: true,
|
CanUpdateTargetedPods: true,
|
||||||
CanUpdateTargetedPods: true,
|
CanStopTrafficCapturing: true,
|
||||||
ShowAdminConsoleLink: true,
|
ShowAdminConsoleLink: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
EnabledDissectors: []string{
|
||||||
|
"amqp",
|
||||||
|
"dns",
|
||||||
|
"http",
|
||||||
|
"icmp",
|
||||||
|
"kafka",
|
||||||
|
"redis",
|
||||||
|
"sctp",
|
||||||
|
"syscall",
|
||||||
|
"tcp",
|
||||||
|
"ws",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -87,15 +99,19 @@ type ManifestsConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ConfigStruct struct {
|
type ConfigStruct struct {
|
||||||
Tap configStructs.TapConfig `yaml:"tap" json:"tap"`
|
Tap configStructs.TapConfig `yaml:"tap" json:"tap"`
|
||||||
Logs configStructs.LogsConfig `yaml:"logs" json:"logs"`
|
Logs configStructs.LogsConfig `yaml:"logs" json:"logs"`
|
||||||
Config configStructs.ConfigConfig `yaml:"config,omitempty" json:"config,omitempty"`
|
Config configStructs.ConfigConfig `yaml:"config,omitempty" json:"config,omitempty"`
|
||||||
Kube KubeConfig `yaml:"kube" json:"kube"`
|
Kube KubeConfig `yaml:"kube" json:"kube"`
|
||||||
DumpLogs bool `yaml:"dumpLogs" json:"dumpLogs" default:"false"`
|
DumpLogs bool `yaml:"dumpLogs" json:"dumpLogs" default:"false"`
|
||||||
HeadlessMode bool `yaml:"headless" json:"headless" default:"false"`
|
HeadlessMode bool `yaml:"headless" json:"headless" default:"false"`
|
||||||
License string `yaml:"license" json:"license" default:""`
|
License string `yaml:"license" json:"license" default:""`
|
||||||
Scripting configStructs.ScriptingConfig `yaml:"scripting" json:"scripting"`
|
CloudLicenseEnabled bool `yaml:"cloudLicenseEnabled" json:"cloudLicenseEnabled" default:"true"`
|
||||||
Manifests ManifestsConfig `yaml:"manifests,omitempty" json:"manifests,omitempty"`
|
SupportChatEnabled bool `yaml:"supportChatEnabled" json:"supportChatEnabled" default:"true"`
|
||||||
|
InternetConnectivity bool `yaml:"internetConnectivity" json:"internetConnectivity" default:"true"`
|
||||||
|
Scripting configStructs.ScriptingConfig `yaml:"scripting" json:"scripting"`
|
||||||
|
Manifests ManifestsConfig `yaml:"manifests,omitempty" json:"manifests,omitempty"`
|
||||||
|
Timezone string `yaml:"timezone" json:"timezone"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *ConfigStruct) ImagePullPolicy() v1.PullPolicy {
|
func (config *ConfigStruct) ImagePullPolicy() v1.PullPolicy {
|
||||||
|
|||||||
@@ -10,10 +10,12 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
FileLogsName = "file"
|
FileLogsName = "file"
|
||||||
|
GrepLogsName = "grep"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LogsConfig struct {
|
type LogsConfig struct {
|
||||||
FileStr string `yaml:"file" json:"file"`
|
FileStr string `yaml:"file" json:"file"`
|
||||||
|
Grep string `yaml:"grep" json:"grep"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *LogsConfig) Validate() error {
|
func (config *LogsConfig) Validate() error {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ const (
|
|||||||
ProxyHubPortLabel = "proxy-hub-port"
|
ProxyHubPortLabel = "proxy-hub-port"
|
||||||
ProxyHostLabel = "proxy-host"
|
ProxyHostLabel = "proxy-host"
|
||||||
NamespacesLabel = "namespaces"
|
NamespacesLabel = "namespaces"
|
||||||
|
ExcludedNamespacesLabel = "excludedNamespaces"
|
||||||
ReleaseNamespaceLabel = "release-namespace"
|
ReleaseNamespaceLabel = "release-namespace"
|
||||||
PersistentStorageLabel = "persistentStorage"
|
PersistentStorageLabel = "persistentStorage"
|
||||||
PersistentStorageStaticLabel = "persistentStorageStatic"
|
PersistentStorageStaticLabel = "persistentStorageStatic"
|
||||||
@@ -69,11 +70,18 @@ type ProxyConfig struct {
|
|||||||
Host string `yaml:"host" json:"host" default:"127.0.0.1"`
|
Host string `yaml:"host" json:"host" default:"127.0.0.1"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type OverrideTagConfig struct {
|
||||||
|
Worker string `yaml:"worker" json:"worker"`
|
||||||
|
Hub string `yaml:"hub" json:"hub"`
|
||||||
|
Front string `yaml:"front" json:"front"`
|
||||||
|
}
|
||||||
|
|
||||||
type DockerConfig struct {
|
type DockerConfig struct {
|
||||||
Registry string `yaml:"registry" json:"registry" default:"docker.io/kubeshark"`
|
Registry string `yaml:"registry" json:"registry" default:"docker.io/kubeshark"`
|
||||||
Tag string `yaml:"tag" json:"tag" default:""`
|
Tag string `yaml:"tag" json:"tag" default:""`
|
||||||
ImagePullPolicy string `yaml:"imagePullPolicy" json:"imagePullPolicy" default:"Always"`
|
ImagePullPolicy string `yaml:"imagePullPolicy" json:"imagePullPolicy" default:"Always"`
|
||||||
ImagePullSecrets []string `yaml:"imagePullSecrets" json:"imagePullSecrets"`
|
ImagePullSecrets []string `yaml:"imagePullSecrets" json:"imagePullSecrets"`
|
||||||
|
OverrideTag OverrideTagConfig `yaml:"overrideTag" json:"overrideTag"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ResourcesConfig struct {
|
type ResourcesConfig struct {
|
||||||
@@ -83,12 +91,12 @@ type ResourcesConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Role struct {
|
type Role struct {
|
||||||
Filter string `yaml:"filter" json:"filter" default:""`
|
Filter string `yaml:"filter" json:"filter" default:""`
|
||||||
CanReplayTraffic bool `yaml:"canReplayTraffic" json:"canReplayTraffic" default:"false"`
|
CanDownloadPCAP bool `yaml:"canDownloadPCAP" json:"canDownloadPCAP" default:"false"`
|
||||||
CanDownloadPCAP bool `yaml:"canDownloadPCAP" json:"canDownloadPCAP" default:"false"`
|
CanUseScripting bool `yaml:"canUseScripting" json:"canUseScripting" default:"false"`
|
||||||
CanUseScripting bool `yaml:"canUseScripting" json:"canUseScripting" default:"false"`
|
CanUpdateTargetedPods bool `yaml:"canUpdateTargetedPods" json:"canUpdateTargetedPods" default:"false"`
|
||||||
CanUpdateTargetedPods bool `yaml:"canUpdateTargetedPods" json:"canUpdateTargetedPods" default:"false"`
|
CanStopTrafficCapturing bool `yaml:"canStopTrafficCapturing" json:"canStopTrafficCapturing" default:"false"`
|
||||||
ShowAdminConsoleLink bool `yaml:"showAdminConsoleLink" json:"showAdminConsoleLink" default:"false"`
|
ShowAdminConsoleLink bool `yaml:"showAdminConsoleLink" json:"showAdminConsoleLink" default:"false"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SamlConfig struct {
|
type SamlConfig struct {
|
||||||
@@ -131,7 +139,7 @@ type CapabilitiesConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type KernelModuleConfig struct {
|
type KernelModuleConfig struct {
|
||||||
Enabled bool `yaml:"enabled" json:"enabled" default:"true"`
|
Enabled bool `yaml:"enabled" json:"enabled" default:"false"`
|
||||||
Image string `yaml:"image" json:"image" default:"kubeshark/pf-ring-module:all"`
|
Image string `yaml:"image" json:"image" default:"kubeshark/pf-ring-module:all"`
|
||||||
UnloadOnDestroy bool `yaml:"unloadOnDestroy" json:"unloadOnDestroy" default:"false"`
|
UnloadOnDestroy bool `yaml:"unloadOnDestroy" json:"unloadOnDestroy" default:"false"`
|
||||||
}
|
}
|
||||||
@@ -141,44 +149,56 @@ type MetricsConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MiscConfig struct {
|
type MiscConfig struct {
|
||||||
JsonTTL string `yaml:"jsonTTL" json:"jsonTTL" default:"5m"`
|
JsonTTL string `yaml:"jsonTTL" json:"jsonTTL" default:"5m"`
|
||||||
PcapTTL string `yaml:"pcapTTL" json:"pcapTTL" default:"10s"`
|
PcapTTL string `yaml:"pcapTTL" json:"pcapTTL" default:"10s"`
|
||||||
PcapErrorTTL string `yaml:"pcapErrorTTL" json:"pcapErrorTTL" default:"60s"`
|
PcapErrorTTL string `yaml:"pcapErrorTTL" json:"pcapErrorTTL" default:"60s"`
|
||||||
|
TrafficSampleRate int `yaml:"trafficSampleRate" json:"trafficSampleRate" default:"100"`
|
||||||
|
TcpStreamChannelTimeoutMs int `yaml:"tcpStreamChannelTimeoutMs" json:"tcpStreamChannelTimeoutMs" default:"10000"`
|
||||||
|
TcpStreamChannelTimeoutShow bool `yaml:"tcpStreamChannelTimeoutShow" json:"tcpStreamChannelTimeoutShow" default:"false"`
|
||||||
|
ResolutionStrategy string `yaml:"resolutionStrategy" json:"resolutionStrategy" default:"auto"`
|
||||||
|
Profile bool `yaml:"profile" json:"profile" default:"false"`
|
||||||
|
DuplicateTimeframe string `yaml:"duplicateTimeframe" json:"duplicateTimeframe" default:"200ms"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type TapConfig struct {
|
type TapConfig struct {
|
||||||
Docker DockerConfig `yaml:"docker" json:"docker"`
|
Docker DockerConfig `yaml:"docker" json:"docker"`
|
||||||
Proxy ProxyConfig `yaml:"proxy" json:"proxy"`
|
Proxy ProxyConfig `yaml:"proxy" json:"proxy"`
|
||||||
PodRegexStr string `yaml:"regex" json:"regex" default:".*"`
|
PodRegexStr string `yaml:"regex" json:"regex" default:".*"`
|
||||||
Namespaces []string `yaml:"namespaces" json:"namespaces" default:"[]"`
|
Namespaces []string `yaml:"namespaces" json:"namespaces" default:"[]"`
|
||||||
Release ReleaseConfig `yaml:"release" json:"release"`
|
ExcludedNamespaces []string `yaml:"excludedNamespaces" json:"excludedNamespaces" default:"[]"`
|
||||||
PersistentStorage bool `yaml:"persistentStorage" json:"persistentStorage" default:"false"`
|
BpfOverride string `yaml:"bpfOverride" json:"bpfOverride" default:""`
|
||||||
PersistentStorageStatic bool `yaml:"persistentStorageStatic" json:"persistentStorageStatic" default:"false"`
|
Stopped bool `yaml:"stopped" json:"stopped" default:"true"`
|
||||||
EfsFileSytemIdAndPath string `yaml:"efsFileSytemIdAndPath" json:"efsFileSytemIdAndPath" default:""`
|
Release ReleaseConfig `yaml:"release" json:"release"`
|
||||||
StorageLimit string `yaml:"storageLimit" json:"storageLimit" default:"500Mi"`
|
PersistentStorage bool `yaml:"persistentStorage" json:"persistentStorage" default:"false"`
|
||||||
StorageClass string `yaml:"storageClass" json:"storageClass" default:"standard"`
|
PersistentStorageStatic bool `yaml:"persistentStorageStatic" json:"persistentStorageStatic" default:"false"`
|
||||||
DryRun bool `yaml:"dryRun" json:"dryRun" default:"false"`
|
EfsFileSytemIdAndPath string `yaml:"efsFileSytemIdAndPath" json:"efsFileSytemIdAndPath" default:""`
|
||||||
Resources ResourcesConfig `yaml:"resources" json:"resources"`
|
StorageLimit string `yaml:"storageLimit" json:"storageLimit" default:"500Mi"`
|
||||||
ServiceMesh bool `yaml:"serviceMesh" json:"serviceMesh" default:"true"`
|
StorageClass string `yaml:"storageClass" json:"storageClass" default:"standard"`
|
||||||
Tls bool `yaml:"tls" json:"tls" default:"true"`
|
DryRun bool `yaml:"dryRun" json:"dryRun" default:"false"`
|
||||||
IgnoreTainted bool `yaml:"ignoreTainted" json:"ignoreTainted" default:"false"`
|
Resources ResourcesConfig `yaml:"resources" json:"resources"`
|
||||||
Labels map[string]string `yaml:"labels" json:"labels" default:"{}"`
|
ServiceMesh bool `yaml:"serviceMesh" json:"serviceMesh" default:"true"`
|
||||||
Annotations map[string]string `yaml:"annotations" json:"annotations" default:"{}"`
|
Tls bool `yaml:"tls" json:"tls" default:"true"`
|
||||||
NodeSelectorTerms []v1.NodeSelectorTerm `yaml:"nodeSelectorTerms" json:"nodeSelectorTerms" default:"[]"`
|
PacketCapture string `yaml:"packetCapture" json:"packetCapture" default:"best"`
|
||||||
Auth AuthConfig `yaml:"auth" json:"auth"`
|
IgnoreTainted bool `yaml:"ignoreTainted" json:"ignoreTainted" default:"false"`
|
||||||
Ingress IngressConfig `yaml:"ingress" json:"ingress"`
|
Labels map[string]string `yaml:"labels" json:"labels" default:"{}"`
|
||||||
IPv6 bool `yaml:"ipv6" json:"ipv6" default:"true"`
|
Annotations map[string]string `yaml:"annotations" json:"annotations" default:"{}"`
|
||||||
Debug bool `yaml:"debug" json:"debug" default:"false"`
|
NodeSelectorTerms []v1.NodeSelectorTerm `yaml:"nodeSelectorTerms" json:"nodeSelectorTerms" default:"[]"`
|
||||||
KernelModule KernelModuleConfig `yaml:"kernelModule" json:"kernelModule"`
|
Auth AuthConfig `yaml:"auth" json:"auth"`
|
||||||
Telemetry TelemetryConfig `yaml:"telemetry" json:"telemetry"`
|
Ingress IngressConfig `yaml:"ingress" json:"ingress"`
|
||||||
DefaultFilter string `yaml:"defaultFilter" json:"defaultFilter"`
|
IPv6 bool `yaml:"ipv6" json:"ipv6" default:"true"`
|
||||||
ReplayDisabled bool `yaml:"replayDisabled" json:"replayDisabled" default:"false"`
|
Debug bool `yaml:"debug" json:"debug" default:"false"`
|
||||||
Capabilities CapabilitiesConfig `yaml:"capabilities" json:"capabilities"`
|
KernelModule KernelModuleConfig `yaml:"kernelModule" json:"kernelModule"`
|
||||||
GlobalFilter string `yaml:"globalFilter" json:"globalFilter"`
|
Telemetry TelemetryConfig `yaml:"telemetry" json:"telemetry"`
|
||||||
Metrics MetricsConfig `yaml:"metrics" json:"metrics"`
|
DefaultFilter string `yaml:"defaultFilter" json:"defaultFilter"`
|
||||||
TrafficSampleRate int `yaml:"trafficSampleRate" json:"trafficSampleRate" default:"100"`
|
ScriptingDisabled bool `yaml:"scriptingDisabled" json:"scriptingDisabled" default:"false"`
|
||||||
TcpStreamChannelTimeoutMs int `yaml:"tcpStreamChannelTimeoutMs" json:"tcpStreamChannelTimeoutMs" default:"10000"`
|
TargetedPodsUpdateDisabled bool `yaml:"targetedPodsUpdateDisabled" json:"targetedPodsUpdateDisabled" default:"false"`
|
||||||
Misc MiscConfig `yaml:"misc" json:"misc"`
|
RecordingDisabled bool `yaml:"recordingDisabled" json:"recordingDisabled" default:"false"`
|
||||||
|
StopTrafficCapturingDisabled bool `yaml:"stopTrafficCapturingDisabled" json:"stopTrafficCapturingDisabled" default:"false"`
|
||||||
|
Capabilities CapabilitiesConfig `yaml:"capabilities" json:"capabilities"`
|
||||||
|
GlobalFilter string `yaml:"globalFilter" json:"globalFilter"`
|
||||||
|
EnabledDissectors []string `yaml:"enabledDissectors" json:"enabledDissectors"`
|
||||||
|
Metrics MetricsConfig `yaml:"metrics" json:"metrics"`
|
||||||
|
Misc MiscConfig `yaml:"misc" json:"misc"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *TapConfig) PodRegex() *regexp.Regexp {
|
func (config *TapConfig) PodRegex() *regexp.Regexp {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func FormatError(err error) error {
|
|||||||
if k8serrors.IsForbidden(err) {
|
if k8serrors.IsForbidden(err) {
|
||||||
errorNew = fmt.Errorf("insufficient permissions: %w. "+
|
errorNew = fmt.Errorf("insufficient permissions: %w. "+
|
||||||
"supply the required permission or control %s's access to namespaces by setting %s "+
|
"supply the required permission or control %s's access to namespaces by setting %s "+
|
||||||
"in the config file or setting the targeted namespace with --%s %s=<NAMEPSACE>",
|
"in the config file or setting the targeted namespace with --%s %s=<NAMESPACE>",
|
||||||
err,
|
err,
|
||||||
misc.Software,
|
misc.Software,
|
||||||
configStructs.ReleaseNamespaceLabel,
|
configStructs.ReleaseNamespaceLabel,
|
||||||
|
|||||||
1
go.mod
1
go.mod
@@ -14,6 +14,7 @@ require (
|
|||||||
github.com/rs/zerolog v1.28.0
|
github.com/rs/zerolog v1.28.0
|
||||||
github.com/spf13/cobra v1.7.0
|
github.com/spf13/cobra v1.7.0
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
|
github.com/tanqiangyes/grep-go v0.0.0-20220515134556-b36bff9c3d8e
|
||||||
helm.sh/helm/v3 v3.12.0
|
helm.sh/helm/v3 v3.12.0
|
||||||
k8s.io/api v0.28.3
|
k8s.io/api v0.28.3
|
||||||
k8s.io/apimachinery v0.28.3
|
k8s.io/apimachinery v0.28.3
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -618,6 +618,8 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
|
|||||||
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
||||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
|
github.com/tanqiangyes/grep-go v0.0.0-20220515134556-b36bff9c3d8e h1:+qDZ81UqxfZsWK6Vq9wET3AsdQxHGbViYOqkNxZ9FnU=
|
||||||
|
github.com/tanqiangyes/grep-go v0.0.0-20220515134556-b36bff9c3d8e/go.mod h1:ANZlXE3vfRYCYnkojePl2hJODYmOeCVD+XahuhDdTbI=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
name: kubeshark
|
name: kubeshark
|
||||||
version: "52.1.63"
|
version: "52.3.74"
|
||||||
description: The API Traffic Analyzer for Kubernetes
|
description: The API Traffic Analyzer for Kubernetes
|
||||||
home: https://kubeshark.co
|
home: https://kubeshark.co
|
||||||
keywords:
|
keywords:
|
||||||
|
|||||||
@@ -23,6 +23,14 @@ git clone git@github.com:kubeshark/kubeshark.git --depth 1
|
|||||||
cd kubeshark/helm-chart
|
cd kubeshark/helm-chart
|
||||||
```
|
```
|
||||||
|
|
||||||
|
In case you want to clone a specific tag of the repo (e.g. `v52.3.59`):
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone git@github.com:kubeshark/kubeshark.git --depth 1 --branch <tag>
|
||||||
|
cd kubeshark/helm-chart
|
||||||
|
```
|
||||||
|
> See the list of available tags here: https://github.com/kubeshark/kubeshark/tags
|
||||||
|
|
||||||
Render the templates
|
Render the templates
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -117,6 +125,7 @@ Please refer to [metrics](./metrics.md) documentation for details.
|
|||||||
| `tap.proxy.front.port` | Front-facing service port | `8899` |
|
| `tap.proxy.front.port` | Front-facing service port | `8899` |
|
||||||
| `tap.proxy.host` | Proxy server's IP | `127.0.0.1` |
|
| `tap.proxy.host` | Proxy server's IP | `127.0.0.1` |
|
||||||
| `tap.namespaces` | List of namespaces for the traffic capture | `[]` |
|
| `tap.namespaces` | List of namespaces for the traffic capture | `[]` |
|
||||||
|
| `tap.excludedNamespaces` | List of namespaces to explicitly exclude | `[]` |
|
||||||
| `tap.release.repo` | URL of the Helm chart repository | `https://helm.kubeshark.co` |
|
| `tap.release.repo` | URL of the Helm chart repository | `https://helm.kubeshark.co` |
|
||||||
| `tap.release.name` | Helm release name | `kubeshark` |
|
| `tap.release.name` | Helm release name | `kubeshark` |
|
||||||
| `tap.release.namespace` | Helm release namespace | `default` |
|
| `tap.release.namespace` | Helm release namespace | `default` |
|
||||||
@@ -149,7 +158,7 @@ Please refer to [metrics](./metrics.md) documentation for details.
|
|||||||
| `tap.auth.saml.x509crt` | A self-signed X.509 `.cert` contents <br/>(effective, if `tap.auth.type = saml`) | `` |
|
| `tap.auth.saml.x509crt` | A self-signed X.509 `.cert` contents <br/>(effective, if `tap.auth.type = saml`) | `` |
|
||||||
| `tap.auth.saml.x509key` | A self-signed X.509 `.key` contents <br/>(effective, if `tap.auth.type = saml`) | `` |
|
| `tap.auth.saml.x509key` | A self-signed X.509 `.key` contents <br/>(effective, if `tap.auth.type = saml`) | `` |
|
||||||
| `tap.auth.saml.roleAttribute` | A SAML attribute name corresponding to user's authorization role <br/>(effective, if `tap.auth.type = saml`) | `role` |
|
| `tap.auth.saml.roleAttribute` | A SAML attribute name corresponding to user's authorization role <br/>(effective, if `tap.auth.type = saml`) | `role` |
|
||||||
| `tap.auth.saml.roles` | A list of SAML authorization roles and their permissions <br/>(effective, if `tap.auth.type = saml`) | `{"admin":{"canDownloadPCAP":true,"canReplayTraffic":true,"canUpdateTargetedPods":true,"canUseScripting":true,"filter":"","showAdminConsoleLink":true}}` |
|
| `tap.auth.saml.roles` | A list of SAML authorization roles and their permissions <br/>(effective, if `tap.auth.type = saml`) | `{"admin":{"canDownloadPCAP":true,"canUpdateTargetedPods":true,"canUseScripting":true, "canStopTrafficCapturing":true, "filter":"","showAdminConsoleLink":true}}` |
|
||||||
| `tap.ingress.enabled` | Enable `Ingress` | `false` |
|
| `tap.ingress.enabled` | Enable `Ingress` | `false` |
|
||||||
| `tap.ingress.className` | Ingress class name | `""` |
|
| `tap.ingress.className` | Ingress class name | `""` |
|
||||||
| `tap.ingress.host` | Host of the `Ingress` | `ks.svc.cluster.local` |
|
| `tap.ingress.host` | Host of the `Ingress` | `ks.svc.cluster.local` |
|
||||||
@@ -157,12 +166,15 @@ Please refer to [metrics](./metrics.md) documentation for details.
|
|||||||
| `tap.ingress.annotations` | `Ingress` annotations | `{}` |
|
| `tap.ingress.annotations` | `Ingress` annotations | `{}` |
|
||||||
| `tap.ipv6` | Enable IPv6 support for the front-end | `true` |
|
| `tap.ipv6` | Enable IPv6 support for the front-end | `true` |
|
||||||
| `tap.debug` | Enable debug mode | `false` |
|
| `tap.debug` | Enable debug mode | `false` |
|
||||||
| `tap.kernelModule.enabled` | Use PF_RING kernel module([details](PF_RING.md)) | `true` |
|
| `tap.kernelModule.enabled` | Use PF_RING kernel module([details](PF_RING.md)) | `false` |
|
||||||
| `tap.kernelModule.image` | Container image containing PF_RING kernel module with supported kernel version([details](PF_RING.md)) | "kubeshark/pf-ring-module:all" |
|
| `tap.kernelModule.image` | Container image containing PF_RING kernel module with supported kernel version([details](PF_RING.md)) | "kubeshark/pf-ring-module:all" |
|
||||||
| `tap.kernelModule.unloadOnDestroy` | Create additional container which watches for pod termination and unloads PF_RING kernel module. | `false`|
|
| `tap.kernelModule.unloadOnDestroy` | Create additional container which watches for pod termination and unloads PF_RING kernel module. | `false`|
|
||||||
| `tap.telemetry.enabled` | Enable anonymous usage statistics collection | `true` |
|
| `tap.telemetry.enabled` | Enable anonymous usage statistics collection | `true` |
|
||||||
| `tap.defaultFilter` | Sets the default dashboard KFL filter (e.g. `http`) | `""` |
|
| `tap.defaultFilter` | Sets the default dashboard KFL filter (e.g. `http`) | `""` |
|
||||||
| `tap.globalFilter` | Prepends to any KFL filter and can be used to limit what is visible in the dashboard. For example, `redact("request.headers.Authorization")` will redact the appropriate field. | `""` |
|
| `tap.globalFilter` | Prepends to any KFL filter and can be used to limit what is visible in the dashboard. For example, `redact("request.headers.Authorization")` will redact the appropriate field. Another example `!dns` will not show any DNS traffic. | `""` |
|
||||||
|
| `tap.metrics.port` | Pod port used to expose Prometheus metrics | `49100` |
|
||||||
|
| `tap.stopped` | A flag indicating whether to start Kubeshark with traffic processing stopped resulting in almost no resource consumption (e.g. Kubeshark is dormant). This property can be dynamically control via the dashboard. | `true` |
|
||||||
|
| `tap.enabledDissectors` | This is an array of strings representing the list of supported protocols. Remove or comment out redundant protocols (e.g., dns).| `["amqp","dns","http","icmp","kafka","redis","sctp","syscall","tcp","ws"]` |
|
||||||
| `logs.file` | Logs dump path | `""` |
|
| `logs.file` | Logs dump path | `""` |
|
||||||
| `kube.configPath` | Path to the `kubeconfig` file (`$HOME/.kube/config`) | `""` |
|
| `kube.configPath` | Path to the `kubeconfig` file (`$HOME/.kube/config`) | `""` |
|
||||||
| `kube.context` | Kubernetes context to use for the deployment | `""` |
|
| `kube.context` | Kubernetes context to use for the deployment | `""` |
|
||||||
@@ -172,7 +184,9 @@ Please refer to [metrics](./metrics.md) documentation for details.
|
|||||||
| `scripting.env` | Environment variables for the scripting | `{}` |
|
| `scripting.env` | Environment variables for the scripting | `{}` |
|
||||||
| `scripting.source` | Source directory of the scripts | `""` |
|
| `scripting.source` | Source directory of the scripts | `""` |
|
||||||
| `scripting.watchScripts` | Enable watch mode for the scripts in source directory | `true` |
|
| `scripting.watchScripts` | Enable watch mode for the scripts in source directory | `true` |
|
||||||
| `tap.metrics.port` | Pod port used to expose Prometheus metrics | `49100` |
|
| `timezone` | IANA time zone applied to time shown in the front-end | `""` (local time zone applies) |
|
||||||
|
| `supportChatEnabled` | Enable real-time support chat channel based on Intercom | `true` |
|
||||||
|
| `internetConnectivity` | Turns off API requests that are dependant on Internet connectivity such as `telemetry` and `online-support`. | `true` |
|
||||||
|
|
||||||
KernelMapping pairs kernel versions with a
|
KernelMapping pairs kernel versions with a
|
||||||
DriverContainer image. Kernel versions can be matched
|
DriverContainer image. Kernel versions can be matched
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ rules:
|
|||||||
- extensions
|
- extensions
|
||||||
- apps
|
- apps
|
||||||
resources:
|
resources:
|
||||||
|
- nodes
|
||||||
- pods
|
- pods
|
||||||
- services
|
- services
|
||||||
- endpoints
|
- endpoints
|
||||||
@@ -24,6 +25,14 @@ rules:
|
|||||||
- list
|
- list
|
||||||
- get
|
- get
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
resourceNames:
|
||||||
|
- kube-system
|
||||||
---
|
---
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
kind: Role
|
kind: Role
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
{{- include "kubeshark.labels" . | nindent 6 }}
|
{{- include "kubeshark.selectorLabels" . | nindent 6 }}
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -29,6 +29,8 @@ spec:
|
|||||||
- name: kubeshark-hub
|
- name: kubeshark-hub
|
||||||
command:
|
command:
|
||||||
- ./hub
|
- ./hub
|
||||||
|
- -port
|
||||||
|
- "8080"
|
||||||
{{- if .Values.tap.debug }}
|
{{- if .Values.tap.debug }}
|
||||||
- -debug
|
- -debug
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -43,7 +45,11 @@ spec:
|
|||||||
fieldPath: metadata.namespace
|
fieldPath: metadata.namespace
|
||||||
- name: KUBESHARK_CLOUD_API_URL
|
- name: KUBESHARK_CLOUD_API_URL
|
||||||
value: 'https://api.kubeshark.co'
|
value: 'https://api.kubeshark.co'
|
||||||
|
{{- if .Values.tap.docker.overrideTag.hub }}
|
||||||
|
image: '{{ .Values.tap.docker.registry }}/hub:{{ .Values.tap.docker.overrideTag.hub }}'
|
||||||
|
{{ else }}
|
||||||
image: '{{ .Values.tap.docker.registry }}/hub:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
image: '{{ .Values.tap.docker.registry }}/hub:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
||||||
|
{{- end }}
|
||||||
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
periodSeconds: 1
|
periodSeconds: 1
|
||||||
@@ -51,14 +57,14 @@ spec:
|
|||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
periodSeconds: 1
|
periodSeconds: 1
|
||||||
failureThreshold: 3
|
failureThreshold: 3
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpu: {{ .Values.tap.resources.hub.limits.cpu }}
|
cpu: {{ .Values.tap.resources.hub.limits.cpu }}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- name: kubeshark-hub
|
- name: kubeshark-hub
|
||||||
port: 80
|
port: 80
|
||||||
targetPort: 80
|
targetPort: 8080
|
||||||
selector:
|
selector:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
{{- include "kubeshark.labels" . | nindent 6 }}
|
{{- include "kubeshark.selectorLabels" . | nindent 6 }}
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -27,14 +27,44 @@ spec:
|
|||||||
- name: REACT_APP_DEFAULT_FILTER
|
- name: REACT_APP_DEFAULT_FILTER
|
||||||
value: '{{ not (eq .Values.tap.defaultFilter "") | ternary .Values.tap.defaultFilter " " }}'
|
value: '{{ not (eq .Values.tap.defaultFilter "") | ternary .Values.tap.defaultFilter " " }}'
|
||||||
- name: REACT_APP_AUTH_ENABLED
|
- name: REACT_APP_AUTH_ENABLED
|
||||||
value: '{{ .Values.tap.auth.enabled }}'
|
value: '{{- if or (and .Values.cloudLicenseEnabled (not (empty .Values.license))) (not .Values.internetConnectivity) -}}
|
||||||
|
"false"
|
||||||
|
{{- else -}}
|
||||||
|
{{ .Values.cloudLicenseEnabled | ternary "true" .Values.tap.auth.enabled }}
|
||||||
|
{{- end }}'
|
||||||
- name: REACT_APP_AUTH_TYPE
|
- name: REACT_APP_AUTH_TYPE
|
||||||
value: '{{ not (eq .Values.tap.auth.type "") | ternary .Values.tap.auth.type " " }}'
|
value: '{{ not (eq .Values.tap.auth.type "") | ternary (.Values.cloudLicenseEnabled | ternary "oidc" .Values.tap.auth.type) " " }}'
|
||||||
- name: REACT_APP_AUTH_SAML_IDP_METADATA_URL
|
- name: REACT_APP_AUTH_SAML_IDP_METADATA_URL
|
||||||
value: '{{ not (eq .Values.tap.auth.saml.idpMetadataUrl "") | ternary .Values.tap.auth.saml.idpMetadataUrl " " }}'
|
value: '{{ not (eq .Values.tap.auth.saml.idpMetadataUrl "") | ternary .Values.tap.auth.saml.idpMetadataUrl " " }}'
|
||||||
- name: REACT_APP_REPLAY_DISABLED
|
- name: REACT_APP_TIMEZONE
|
||||||
value: '{{ .Values.tap.replayDisabled }}'
|
value: '{{ not (eq .Values.timezone "") | ternary .Values.timezone " " }}'
|
||||||
|
- name: REACT_APP_SCRIPTING_DISABLED
|
||||||
|
value: '{{ .Values.tap.scriptingDisabled }}'
|
||||||
|
- name: REACT_APP_TARGETED_PODS_UPDATE_DISABLED
|
||||||
|
value: '{{ .Values.tap.targetedPodsUpdateDisabled }}'
|
||||||
|
- name: REACT_APP_BPF_OVERRIDE_DISABLED
|
||||||
|
value: '{{ eq .Values.tap.packetCapture "ebpf" | ternary "true" "false" }}'
|
||||||
|
- name: REACT_APP_RECORDING_DISABLED
|
||||||
|
value: '{{ .Values.tap.recordingDisabled }}'
|
||||||
|
- name: REACT_APP_STOP_TRAFFIC_CAPTURING_DISABLED
|
||||||
|
value: '{{- if and .Values.tap.stopTrafficCapturingDisabled .Values.tap.stopped -}}
|
||||||
|
false
|
||||||
|
{{- else -}}
|
||||||
|
{{ .Values.tap.stopTrafficCapturingDisabled | ternary "true" "false" }}
|
||||||
|
{{- end -}}'
|
||||||
|
- name: 'REACT_APP_CLOUD_LICENSE_ENABLED'
|
||||||
|
value: '{{- if or (and .Values.cloudLicenseEnabled (not (empty .Values.license))) (not .Values.internetConnectivity) -}}
|
||||||
|
"false"
|
||||||
|
{{- else -}}
|
||||||
|
{{ .Values.cloudLicenseEnabled }}
|
||||||
|
{{- end }}'
|
||||||
|
- name: REACT_APP_SUPPORT_CHAT_ENABLED
|
||||||
|
value: '{{ and .Values.supportChatEnabled .Values.internetConnectivity | ternary "true" "false" }}'
|
||||||
|
{{- if .Values.tap.docker.overrideTag.front }}
|
||||||
|
image: '{{ .Values.tap.docker.registry }}/front:{{ .Values.tap.docker.overrideTag.front }}'
|
||||||
|
{{ else }}
|
||||||
image: '{{ .Values.tap.docker.registry }}/front:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
image: '{{ .Values.tap.docker.registry }}/front:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
||||||
|
{{- end }}
|
||||||
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
||||||
name: kubeshark-front
|
name: kubeshark-front
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
@@ -43,14 +73,14 @@ spec:
|
|||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
periodSeconds: 1
|
periodSeconds: 1
|
||||||
failureThreshold: 3
|
failureThreshold: 3
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
timeoutSeconds: 1
|
timeoutSeconds: 1
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- name: kubeshark-front
|
- name: kubeshark-front
|
||||||
port: 80
|
port: 80
|
||||||
targetPort: 80
|
targetPort: 8080
|
||||||
selector:
|
selector:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: worker
|
app.kubeshark.co/app: worker
|
||||||
{{- include "kubeshark.labels" . | nindent 6 }}
|
{{- include "kubeshark.selectorLabels" . | nindent 6 }}
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -51,6 +51,8 @@ spec:
|
|||||||
- '{{ .Values.tap.proxy.worker.srvPort }}'
|
- '{{ .Values.tap.proxy.worker.srvPort }}'
|
||||||
- -metrics-port
|
- -metrics-port
|
||||||
- '{{ .Values.tap.metrics.port }}'
|
- '{{ .Values.tap.metrics.port }}'
|
||||||
|
- -packet-capture
|
||||||
|
- '{{ .Values.tap.packetCapture }}'
|
||||||
- -unixsocket
|
- -unixsocket
|
||||||
{{- if .Values.tap.serviceMesh }}
|
{{- if .Values.tap.serviceMesh }}
|
||||||
- -servicemesh
|
- -servicemesh
|
||||||
@@ -60,12 +62,19 @@ spec:
|
|||||||
{{- if .Values.tap.kernelModule.enabled }}
|
{{- if .Values.tap.kernelModule.enabled }}
|
||||||
- -kernel-module
|
- -kernel-module
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if ne .Values.tap.packetCapture "ebpf" }}
|
||||||
|
- -disable-ebpf
|
||||||
|
{{- end }}
|
||||||
|
- -resolution-strategy
|
||||||
|
- '{{ .Values.tap.misc.resolutionStrategy }}'
|
||||||
{{- if .Values.tap.debug }}
|
{{- if .Values.tap.debug }}
|
||||||
- -debug
|
- -debug
|
||||||
- -dumptracer
|
|
||||||
- "100000000"
|
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.tap.docker.overrideTag.worker }}
|
||||||
|
image: '{{ .Values.tap.docker.registry }}/worker:{{ .Values.tap.docker.overrideTag.worker }}'
|
||||||
|
{{ else }}
|
||||||
image: '{{ .Values.tap.docker.registry }}/worker:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
image: '{{ .Values.tap.docker.registry }}/worker:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
||||||
|
{{- end }}
|
||||||
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
||||||
name: sniffer
|
name: sniffer
|
||||||
ports:
|
ports:
|
||||||
@@ -82,9 +91,13 @@ spec:
|
|||||||
fieldRef:
|
fieldRef:
|
||||||
fieldPath: metadata.namespace
|
fieldPath: metadata.namespace
|
||||||
- name: TCP_STREAM_CHANNEL_TIMEOUT_MS
|
- name: TCP_STREAM_CHANNEL_TIMEOUT_MS
|
||||||
value: '{{ .Values.tap.tcpStreamChannelTimeoutMs }}'
|
value: '{{ .Values.tap.misc.tcpStreamChannelTimeoutMs }}'
|
||||||
|
- name: TCP_STREAM_CHANNEL_TIMEOUT_SHOW
|
||||||
|
value: '{{ .Values.tap.misc.tcpStreamChannelTimeoutShow }}'
|
||||||
- name: KUBESHARK_CLOUD_API_URL
|
- name: KUBESHARK_CLOUD_API_URL
|
||||||
value: 'https://api.kubeshark.co'
|
value: 'https://api.kubeshark.co'
|
||||||
|
- name: PROFILING_ENABLED
|
||||||
|
value: '{{ .Values.tap.misc.profile }}'
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpu: {{ .Values.tap.resources.sniffer.limits.cpu }}
|
cpu: {{ .Values.tap.resources.sniffer.limits.cpu }}
|
||||||
@@ -132,7 +145,7 @@ spec:
|
|||||||
- name: unload-pf-ring
|
- name: unload-pf-ring
|
||||||
image: {{ .Values.tap.kernelModule.image }}
|
image: {{ .Values.tap.kernelModule.image }}
|
||||||
command: ["/bin/sh"]
|
command: ["/bin/sh"]
|
||||||
args: ["-c", "trap 'rmmod pf_ring && sleep 3' SIGTERM; while true; do sleep 1; done"]
|
args: ["-c", "trap 'rmmod pf_ring && sleep 3' SIGTERM; while true; do sleep 1; done"]
|
||||||
securityContext:
|
securityContext:
|
||||||
capabilities:
|
capabilities:
|
||||||
add:
|
add:
|
||||||
@@ -147,10 +160,17 @@ spec:
|
|||||||
- ./tracer
|
- ./tracer
|
||||||
- -procfs
|
- -procfs
|
||||||
- /hostproc
|
- /hostproc
|
||||||
|
{{- if ne .Values.tap.packetCapture "ebpf" }}
|
||||||
|
- -disable-ebpf
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.tap.debug }}
|
{{- if .Values.tap.debug }}
|
||||||
- -debug
|
- -debug
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.tap.docker.overrideTag.worker }}
|
||||||
|
image: '{{ .Values.tap.docker.registry }}/worker:{{ .Values.tap.docker.overrideTag.worker }}'
|
||||||
|
{{ else }}
|
||||||
image: '{{ .Values.tap.docker.registry }}/worker:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
image: '{{ .Values.tap.docker.registry }}/worker:{{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}'
|
||||||
|
{{- end }}
|
||||||
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
imagePullPolicy: {{ .Values.tap.docker.imagePullPolicy }}
|
||||||
name: tracer
|
name: tracer
|
||||||
env:
|
env:
|
||||||
@@ -175,6 +195,9 @@ spec:
|
|||||||
{{- range .Values.tap.capabilities.ebpfCapture }}
|
{{- range .Values.tap.capabilities.ebpfCapture }}
|
||||||
{{ print "- " . }}
|
{{ print "- " . }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- range .Values.tap.capabilities.networkCapture }}
|
||||||
|
{{ print "- " . }}
|
||||||
|
{{- end }}
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
@@ -186,6 +209,9 @@ spec:
|
|||||||
readOnly: true
|
readOnly: true
|
||||||
- mountPath: /app/data
|
- mountPath: /app/data
|
||||||
name: data
|
name: data
|
||||||
|
- mountPath: /etc/os-release
|
||||||
|
name: os-release
|
||||||
|
readOnly: true
|
||||||
{{- end }}
|
{{- end }}
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
@@ -215,6 +241,9 @@ spec:
|
|||||||
- name: lib-modules
|
- name: lib-modules
|
||||||
hostPath:
|
hostPath:
|
||||||
path: /lib/modules
|
path: /lib/modules
|
||||||
|
- hostPath:
|
||||||
|
path: /etc/os-release
|
||||||
|
name: os-release
|
||||||
- name: data
|
- name: data
|
||||||
{{- if .Values.tap.persistentStorage }}
|
{{- if .Values.tap.persistentStorage }}
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ metadata:
|
|||||||
data:
|
data:
|
||||||
default.conf: |
|
default.conf: |
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 8080;
|
||||||
{{- if .Values.tap.ipv6 }}
|
{{- if .Values.tap.ipv6 }}
|
||||||
listen [::]:80;
|
listen [::]:8080;
|
||||||
{{- end }}
|
{{- end }}
|
||||||
access_log /dev/stdout;
|
access_log /dev/stdout;
|
||||||
error_log /dev/stdout;
|
error_log /dev/stdout;
|
||||||
|
|||||||
@@ -9,19 +9,42 @@ metadata:
|
|||||||
data:
|
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) "" }}'
|
||||||
|
EXCLUDED_NAMESPACES: '{{ gt (len .Values.tap.excludedNamespaces) 0 | ternary (join "," .Values.tap.excludedNamespaces) "" }}'
|
||||||
|
BPF_OVERRIDE: '{{ .Values.tap.bpfOverride }}'
|
||||||
|
STOPPED: '{{ .Values.tap.stopped | ternary "true" "false" }}'
|
||||||
SCRIPTING_SCRIPTS: '{}'
|
SCRIPTING_SCRIPTS: '{}'
|
||||||
INGRESS_ENABLED: '{{ .Values.tap.ingress.enabled }}'
|
INGRESS_ENABLED: '{{ .Values.tap.ingress.enabled }}'
|
||||||
INGRESS_HOST: '{{ .Values.tap.ingress.host }}'
|
INGRESS_HOST: '{{ .Values.tap.ingress.host }}'
|
||||||
PROXY_FRONT_PORT: '{{ .Values.tap.proxy.front.port }}'
|
PROXY_FRONT_PORT: '{{ .Values.tap.proxy.front.port }}'
|
||||||
AUTH_ENABLED: '{{ .Values.tap.auth.enabled | ternary "true" "" }}'
|
AUTH_ENABLED: '{{- if and .Values.cloudLicenseEnabled (not (empty .Values.license)) -}}
|
||||||
AUTH_TYPE: '{{ .Values.tap.auth.type }}'
|
"false"
|
||||||
|
{{- else -}}
|
||||||
|
{{ .Values.cloudLicenseEnabled | ternary "true" (.Values.tap.auth.enabled | ternary "true" "") }}
|
||||||
|
{{- end }}'
|
||||||
|
AUTH_TYPE: '{{ .Values.cloudLicenseEnabled | ternary "oidc" (.Values.tap.auth.type) }}'
|
||||||
AUTH_SAML_IDP_METADATA_URL: '{{ .Values.tap.auth.saml.idpMetadataUrl }}'
|
AUTH_SAML_IDP_METADATA_URL: '{{ .Values.tap.auth.saml.idpMetadataUrl }}'
|
||||||
AUTH_SAML_ROLE_ATTRIBUTE: '{{ .Values.tap.auth.saml.roleAttribute }}'
|
AUTH_SAML_ROLE_ATTRIBUTE: '{{ .Values.tap.auth.saml.roleAttribute }}'
|
||||||
AUTH_SAML_ROLES: '{{ .Values.tap.auth.saml.roles | toJson }}'
|
AUTH_SAML_ROLES: '{{ .Values.tap.auth.saml.roles | toJson }}'
|
||||||
TELEMETRY_DISABLED: '{{ not .Values.tap.telemetry.enabled | ternary "true" "" }}'
|
TELEMETRY_DISABLED: '{{ not .Values.internetConnectivity | ternary "true" (not .Values.tap.telemetry.enabled | ternary "true" "") }}'
|
||||||
REPLAY_DISABLED: '{{ .Values.tap.replayDisabled | ternary "true" "" }}'
|
SCRIPTING_DISABLED: '{{ .Values.tap.scriptingDisabled | ternary "true" "" }}'
|
||||||
|
TARGETED_PODS_UPDATE_DISABLED: '{{ .Values.tap.targetedPodsUpdateDisabled | ternary "true" "" }}'
|
||||||
|
RECORDING_DISABLED: '{{ .Values.tap.recordingDisabled | ternary "true" "" }}'
|
||||||
|
STOP_TRAFFIC_CAPTURING_DISABLED: '{{- if and .Values.tap.stopTrafficCapturingDisabled .Values.tap.stopped -}}
|
||||||
|
false
|
||||||
|
{{- else -}}
|
||||||
|
{{ .Values.tap.stopTrafficCapturingDisabled | ternary "true" "false" }}
|
||||||
|
{{- end }}'
|
||||||
GLOBAL_FILTER: {{ include "kubeshark.escapeDoubleQuotes" .Values.tap.globalFilter | quote }}
|
GLOBAL_FILTER: {{ include "kubeshark.escapeDoubleQuotes" .Values.tap.globalFilter | quote }}
|
||||||
TRAFFIC_SAMPLE_RATE: '{{ .Values.tap.trafficSampleRate }}'
|
TRAFFIC_SAMPLE_RATE: '{{ .Values.tap.misc.trafficSampleRate }}'
|
||||||
JSON_TTL: '{{ .Values.tap.misc.jsonTTL }}'
|
JSON_TTL: '{{ .Values.tap.misc.jsonTTL }}'
|
||||||
PCAP_TTL: '{{ .Values.tap.misc.pcapTTL }}'
|
PCAP_TTL: '{{ .Values.tap.misc.pcapTTL }}'
|
||||||
PCAP_ERROR_TTL: '{{ .Values.tap.misc.pcapErrorTTL }}'
|
PCAP_ERROR_TTL: '{{ .Values.tap.misc.pcapErrorTTL }}'
|
||||||
|
TIMEZONE: '{{ not (eq .Values.timezone "") | ternary .Values.timezone " " }}'
|
||||||
|
CLOUD_LICENSE_ENABLED: '{{- if and .Values.cloudLicenseEnabled (not (empty .Values.license)) -}}
|
||||||
|
false
|
||||||
|
{{- else -}}
|
||||||
|
{{ .Values.cloudLicenseEnabled }}
|
||||||
|
{{- end }}'
|
||||||
|
DUPLICATE_TIMEFRAME: '{{ .Values.tap.misc.duplicateTimeframe }}'
|
||||||
|
ENABLED_DISSECTORS: '{{ gt (len .Values.tap.enabledDissectors) 0 | ternary (join "," .Values.tap.enabledDissectors) "" }}'
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ allowedCapabilities:
|
|||||||
- DAC_OVERRIDE
|
- DAC_OVERRIDE
|
||||||
- SYS_RESOURCE
|
- SYS_RESOURCE
|
||||||
- SYS_MODULE
|
- SYS_MODULE
|
||||||
|
- IPC_LOCK
|
||||||
runAsUser:
|
runAsUser:
|
||||||
type: RunAsAny
|
type: RunAsAny
|
||||||
fsGroup:
|
fsGroup:
|
||||||
|
|||||||
@@ -2,11 +2,16 @@
|
|||||||
kind: Service
|
kind: Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
metadata:
|
metadata:
|
||||||
name: kubeshark-worker-metrics
|
labels:
|
||||||
namespace: {{ .Release.Namespace }}
|
{{- include "kubeshark.labels" . | nindent 4 }}
|
||||||
annotations:
|
annotations:
|
||||||
prometheus.io/scrape: 'true'
|
prometheus.io/scrape: 'true'
|
||||||
prometheus.io/port: '{{ .Values.tap.metrics.port }}'
|
prometheus.io/port: '{{ .Values.tap.metrics.port }}'
|
||||||
|
{{- if .Values.tap.annotations }}
|
||||||
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: kubeshark-worker-metrics
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
spec:
|
spec:
|
||||||
selector:
|
selector:
|
||||||
app.kubeshark.co/app: worker
|
app.kubeshark.co/app: worker
|
||||||
|
|||||||
76
helm-chart/templates/16-network-policies.yaml
Normal file
76
helm-chart/templates/16-network-policies.yaml
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "kubeshark.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.tap.annotations }}
|
||||||
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: kubeshark-hub-network-policy
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubeshark.co/app: hub
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8080
|
||||||
|
egress:
|
||||||
|
- {}
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "kubeshark.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.tap.annotations }}
|
||||||
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: kubeshark-front-network-policy
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubeshark.co/app: front
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8080
|
||||||
|
egress:
|
||||||
|
- {}
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "kubeshark.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.tap.annotations }}
|
||||||
|
{{- toYaml .Values.tap.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: kubeshark-worker-network-policy
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubeshark.co/app: worker
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: {{ .Values.tap.proxy.worker.srvPort }}
|
||||||
|
- protocol: TCP
|
||||||
|
port: {{ .Values.tap.metrics.port }}
|
||||||
|
egress:
|
||||||
|
- {}
|
||||||
@@ -3,6 +3,18 @@ Thank you for installing {{ title .Chart.Name }}.
|
|||||||
Registry: {{ .Values.tap.docker.registry }}
|
Registry: {{ .Values.tap.docker.registry }}
|
||||||
Tag: {{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}
|
Tag: {{ not (eq .Values.tap.docker.tag "") | ternary .Values.tap.docker.tag (printf "v%s" .Chart.Version) }}
|
||||||
|
|
||||||
|
{{- if .Values.tap.docker.overrideTag.worker }}
|
||||||
|
Overridden worker tag: {{ .Values.tap.docker.overrideTag.worker }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{- if .Values.tap.docker.overrideTag.hub }}
|
||||||
|
Overridden hub tag: {{ .Values.tap.docker.overrideTag.hub }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{- if .Values.tap.docker.overrideTag.front }}
|
||||||
|
Overridden front tag: {{ .Values.tap.docker.overrideTag.front }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
Your deployment has been successful. The release is named `{{ .Release.Name }}` and it has been deployed in the `{{ .Release.Namespace }}` namespace.
|
Your deployment has been successful. The release is named `{{ .Release.Name }}` and it has been deployed in the `{{ .Release.Namespace }}` namespace.
|
||||||
|
|
||||||
{{- if .Values.tap.telemetry.enabled }}
|
{{- if .Values.tap.telemetry.enabled }}
|
||||||
|
|||||||
@@ -4,6 +4,10 @@ tap:
|
|||||||
tag: ""
|
tag: ""
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
imagePullSecrets: []
|
imagePullSecrets: []
|
||||||
|
overrideTag:
|
||||||
|
worker: ""
|
||||||
|
hub: ""
|
||||||
|
front: ""
|
||||||
proxy:
|
proxy:
|
||||||
worker:
|
worker:
|
||||||
srvPort: 30001
|
srvPort: 30001
|
||||||
@@ -14,6 +18,9 @@ tap:
|
|||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
regex: .*
|
regex: .*
|
||||||
namespaces: []
|
namespaces: []
|
||||||
|
excludedNamespaces: []
|
||||||
|
bpfOverride: ""
|
||||||
|
stopped: true
|
||||||
release:
|
release:
|
||||||
repo: https://helm.kubeshark.co
|
repo: https://helm.kubeshark.co
|
||||||
name: kubeshark
|
name: kubeshark
|
||||||
@@ -48,6 +55,7 @@ tap:
|
|||||||
memory: 50Mi
|
memory: 50Mi
|
||||||
serviceMesh: true
|
serviceMesh: true
|
||||||
tls: true
|
tls: true
|
||||||
|
packetCapture: best
|
||||||
ignoreTainted: false
|
ignoreTainted: false
|
||||||
labels: {}
|
labels: {}
|
||||||
annotations: {}
|
annotations: {}
|
||||||
@@ -68,10 +76,10 @@ tap:
|
|||||||
roles:
|
roles:
|
||||||
admin:
|
admin:
|
||||||
filter: ""
|
filter: ""
|
||||||
canReplayTraffic: true
|
|
||||||
canDownloadPCAP: true
|
canDownloadPCAP: true
|
||||||
canUseScripting: true
|
canUseScripting: true
|
||||||
canUpdateTargetedPods: true
|
canUpdateTargetedPods: true
|
||||||
|
canStopTrafficCapturing: true
|
||||||
showAdminConsoleLink: true
|
showAdminConsoleLink: true
|
||||||
ingress:
|
ingress:
|
||||||
enabled: false
|
enabled: false
|
||||||
@@ -82,13 +90,16 @@ tap:
|
|||||||
ipv6: true
|
ipv6: true
|
||||||
debug: false
|
debug: false
|
||||||
kernelModule:
|
kernelModule:
|
||||||
enabled: true
|
enabled: false
|
||||||
image: kubeshark/pf-ring-module:all
|
image: kubeshark/pf-ring-module:all
|
||||||
unloadOnDestroy: false
|
unloadOnDestroy: false
|
||||||
telemetry:
|
telemetry:
|
||||||
enabled: true
|
enabled: true
|
||||||
defaultFilter: ""
|
defaultFilter: ""
|
||||||
replayDisabled: false
|
scriptingDisabled: false
|
||||||
|
targetedPodsUpdateDisabled: false
|
||||||
|
recordingDisabled: false
|
||||||
|
stopTrafficCapturingDisabled: false
|
||||||
capabilities:
|
capabilities:
|
||||||
networkCapture:
|
networkCapture:
|
||||||
- NET_RAW
|
- NET_RAW
|
||||||
@@ -105,23 +116,43 @@ tap:
|
|||||||
- SYS_RESOURCE
|
- SYS_RESOURCE
|
||||||
- IPC_LOCK
|
- IPC_LOCK
|
||||||
globalFilter: ""
|
globalFilter: ""
|
||||||
|
enabledDissectors:
|
||||||
|
- amqp
|
||||||
|
- dns
|
||||||
|
- http
|
||||||
|
- icmp
|
||||||
|
- kafka
|
||||||
|
- redis
|
||||||
|
- sctp
|
||||||
|
- syscall
|
||||||
|
- tcp
|
||||||
|
- ws
|
||||||
metrics:
|
metrics:
|
||||||
port: 49100
|
port: 49100
|
||||||
trafficSampleRate: 100
|
|
||||||
tcpStreamChannelTimeoutMs: 10000
|
|
||||||
misc:
|
misc:
|
||||||
jsonTTL: 5m
|
jsonTTL: 5m
|
||||||
pcapTTL: 10s
|
pcapTTL: 10s
|
||||||
pcapErrorTTL: 60s
|
pcapErrorTTL: 60s
|
||||||
|
trafficSampleRate: 100
|
||||||
|
tcpStreamChannelTimeoutMs: 10000
|
||||||
|
tcpStreamChannelTimeoutShow: false
|
||||||
|
resolutionStrategy: auto
|
||||||
|
profile: false
|
||||||
|
duplicateTimeframe: 200ms
|
||||||
logs:
|
logs:
|
||||||
file: ""
|
file: ""
|
||||||
|
grep: ""
|
||||||
kube:
|
kube:
|
||||||
configPath: ""
|
configPath: ""
|
||||||
context: ""
|
context: ""
|
||||||
dumpLogs: false
|
dumpLogs: false
|
||||||
headless: false
|
headless: false
|
||||||
license: ""
|
license: ""
|
||||||
|
cloudLicenseEnabled: true
|
||||||
|
supportChatEnabled: true
|
||||||
|
internetConnectivity: true
|
||||||
scripting:
|
scripting:
|
||||||
env: {}
|
env: {}
|
||||||
source: ""
|
source: ""
|
||||||
watchScripts: true
|
watchScripts: true
|
||||||
|
timezone: ""
|
||||||
|
|||||||
@@ -189,6 +189,7 @@ func (connector *Connector) PutScript(script *misc.Script, index int64) (err err
|
|||||||
log.Error().Err(err).Send()
|
log.Error().Err(err).Send()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
utils.AddIgnoreCaptureHeader(req)
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
req.Header.Set("License-Key", config.Config.License)
|
req.Header.Set("License-Key", config.Config.License)
|
||||||
|
|
||||||
@@ -228,6 +229,7 @@ func (connector *Connector) DeleteScript(index int64) (err error) {
|
|||||||
log.Error().Err(err).Send()
|
log.Error().Err(err).Send()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
utils.AddIgnoreCaptureHeader(req)
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
req.Header.Set("License-Key", config.Config.License)
|
req.Header.Set("License-Key", config.Config.License)
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ const (
|
|||||||
SECRET_LICENSE = "LICENSE"
|
SECRET_LICENSE = "LICENSE"
|
||||||
CONFIG_POD_REGEX = "POD_REGEX"
|
CONFIG_POD_REGEX = "POD_REGEX"
|
||||||
CONFIG_NAMESPACES = "NAMESPACES"
|
CONFIG_NAMESPACES = "NAMESPACES"
|
||||||
|
CONFIG_EXCLUDED_NAMESPACES = "EXCLUDED_NAMESPACES"
|
||||||
CONFIG_SCRIPTING_ENV = "SCRIPTING_ENV"
|
CONFIG_SCRIPTING_ENV = "SCRIPTING_ENV"
|
||||||
CONFIG_INGRESS_ENABLED = "INGRESS_ENABLED"
|
CONFIG_INGRESS_ENABLED = "INGRESS_ENABLED"
|
||||||
CONFIG_INGRESS_HOST = "INGRESS_HOST"
|
CONFIG_INGRESS_HOST = "INGRESS_HOST"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package kubernetes
|
package kubernetes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -8,12 +9,14 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/kubeshark/kubeshark/config"
|
"github.com/kubeshark/kubeshark/config"
|
||||||
"github.com/kubeshark/kubeshark/misc"
|
"github.com/kubeshark/kubeshark/misc"
|
||||||
"github.com/kubeshark/kubeshark/semver"
|
"github.com/kubeshark/kubeshark/semver"
|
||||||
"github.com/kubeshark/kubeshark/utils"
|
"github.com/kubeshark/kubeshark/utils"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/tanqiangyes/grep-go/reader"
|
||||||
core "k8s.io/api/core/v1"
|
core "k8s.io/api/core/v1"
|
||||||
k8serrors "k8s.io/apimachinery/pkg/api/errors"
|
k8serrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@@ -142,7 +145,7 @@ func (provider *Provider) ListPodsByAppLabel(ctx context.Context, namespaces str
|
|||||||
return pods.Items, err
|
return pods.Items, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (provider *Provider) GetPodLogs(ctx context.Context, namespace string, podName string, containerName string) (string, error) {
|
func (provider *Provider) GetPodLogs(ctx context.Context, namespace string, podName string, containerName string, grep string) (string, error) {
|
||||||
podLogOpts := core.PodLogOptions{Container: containerName}
|
podLogOpts := core.PodLogOptions{Container: containerName}
|
||||||
req := provider.clientSet.CoreV1().Pods(namespace).GetLogs(podName, &podLogOpts)
|
req := provider.clientSet.CoreV1().Pods(namespace).GetLogs(podName, &podLogOpts)
|
||||||
podLogs, err := req.Stream(ctx)
|
podLogs, err := req.Stream(ctx)
|
||||||
@@ -154,8 +157,26 @@ func (provider *Provider) GetPodLogs(ctx context.Context, namespace string, podN
|
|||||||
if _, err = io.Copy(buf, podLogs); err != nil {
|
if _, err = io.Copy(buf, podLogs); err != nil {
|
||||||
return "", fmt.Errorf("error copy information from podLogs to buf, ns: %s, pod: %s, %w", namespace, podName, err)
|
return "", fmt.Errorf("error copy information from podLogs to buf, ns: %s, pod: %s, %w", namespace, podName, err)
|
||||||
}
|
}
|
||||||
str := buf.String()
|
|
||||||
return str, nil
|
if grep != "" {
|
||||||
|
finder, err := reader.NewFinder(grep, true, true)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
read, err := reader.NewStdReader(bufio.NewReader(buf), []reader.Finder{finder})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
read.Run()
|
||||||
|
result := read.Result()[0]
|
||||||
|
|
||||||
|
log.Info().Str("namespace", namespace).Str("pod", podName).Str("container", containerName).Int("lines", len(result.Lines)).Str("grep", grep).Send()
|
||||||
|
return strings.Join(result.MatchString, "\n"), nil
|
||||||
|
} else {
|
||||||
|
log.Info().Str("namespace", namespace).Str("pod", podName).Str("container", containerName).Send()
|
||||||
|
return buf.String(), nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (provider *Provider) GetNamespaceEvents(ctx context.Context, namespace string) (string, error) {
|
func (provider *Provider) GetNamespaceEvents(ctx context.Context, namespace string) (string, error) {
|
||||||
@@ -206,12 +227,24 @@ func (provider *Provider) GetKubernetesVersion() (*semver.SemVersion, error) {
|
|||||||
return &serverVersionSemVer, nil
|
return &serverVersionSemVer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (provider *Provider) GetNamespaces() []string {
|
func (provider *Provider) GetNamespaces() (namespaces []string) {
|
||||||
if len(config.Config.Tap.Namespaces) > 0 {
|
if len(config.Config.Tap.Namespaces) > 0 {
|
||||||
return utils.Unique(config.Config.Tap.Namespaces)
|
namespaces = utils.Unique(config.Config.Tap.Namespaces)
|
||||||
} else {
|
} else {
|
||||||
return []string{K8sAllNamespaces}
|
namespaceList, err := provider.clientSet.CoreV1().Namespaces().List(context.TODO(), metav1.ListOptions{})
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Send()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ns := range namespaceList.Items {
|
||||||
|
namespaces = append(namespaces, ns.Name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespaces = utils.Diff(namespaces, config.Config.Tap.ExcludedNamespaces)
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func getClientSet(config *rest.Config) (*kubernetes.Clientset, error) {
|
func getClientSet(config *rest.Config) (*kubernetes.Clientset, error) {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ kubectl delete clusterrolebinding kubeshark-cluster-role-binding
|
|||||||
kubectl delete clusterrole kubeshark-cluster-role
|
kubectl delete clusterrole kubeshark-cluster-role
|
||||||
```
|
```
|
||||||
|
|
||||||
## Accesing
|
## Accessing
|
||||||
|
|
||||||
Do the port forwarding:
|
Do the port forwarding:
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,96 @@
|
|||||||
---
|
---
|
||||||
|
# Source: kubeshark/templates/16-network-policies.yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "52.3.74"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
annotations:
|
||||||
|
name: kubeshark-hub-network-policy
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubeshark.co/app: hub
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8080
|
||||||
|
egress:
|
||||||
|
- {}
|
||||||
|
---
|
||||||
|
# Source: kubeshark/templates/16-network-policies.yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "52.3.74"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
annotations:
|
||||||
|
name: kubeshark-front-network-policy
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubeshark.co/app: front
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8080
|
||||||
|
egress:
|
||||||
|
- {}
|
||||||
|
---
|
||||||
|
# Source: kubeshark/templates/16-network-policies.yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "52.3.74"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
annotations:
|
||||||
|
name: kubeshark-worker-network-policy
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubeshark.co/app: worker
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 30001
|
||||||
|
- protocol: TCP
|
||||||
|
port: 49100
|
||||||
|
egress:
|
||||||
|
- {}
|
||||||
|
---
|
||||||
# Source: kubeshark/templates/01-service-account.yaml
|
# Source: kubeshark/templates/01-service-account.yaml
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: ServiceAccount
|
kind: ServiceAccount
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-service-account
|
name: kubeshark-service-account
|
||||||
@@ -21,10 +104,10 @@ metadata:
|
|||||||
namespace: default
|
namespace: default
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
stringData:
|
stringData:
|
||||||
LICENSE: ''
|
LICENSE: ''
|
||||||
@@ -38,10 +121,10 @@ metadata:
|
|||||||
namespace: default
|
namespace: default
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
stringData:
|
stringData:
|
||||||
AUTH_SAML_X509_CRT: |
|
AUTH_SAML_X509_CRT: |
|
||||||
@@ -54,10 +137,10 @@ metadata:
|
|||||||
namespace: default
|
namespace: default
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
stringData:
|
stringData:
|
||||||
AUTH_SAML_X509_KEY: |
|
AUTH_SAML_X509_KEY: |
|
||||||
@@ -69,16 +152,16 @@ metadata:
|
|||||||
name: kubeshark-nginx-config-map
|
name: kubeshark-nginx-config-map
|
||||||
namespace: default
|
namespace: default
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
data:
|
data:
|
||||||
default.conf: |
|
default.conf: |
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 8080;
|
||||||
listen [::]:80;
|
listen [::]:8080;
|
||||||
access_log /dev/stdout;
|
access_log /dev/stdout;
|
||||||
error_log /dev/stdout;
|
error_log /dev/stdout;
|
||||||
|
|
||||||
@@ -133,40 +216,50 @@ metadata:
|
|||||||
namespace: default
|
namespace: default
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
data:
|
data:
|
||||||
POD_REGEX: '.*'
|
POD_REGEX: '.*'
|
||||||
NAMESPACES: ''
|
NAMESPACES: ''
|
||||||
|
EXCLUDED_NAMESPACES: ''
|
||||||
|
BPF_OVERRIDE: ''
|
||||||
|
STOPPED: 'true'
|
||||||
SCRIPTING_SCRIPTS: '{}'
|
SCRIPTING_SCRIPTS: '{}'
|
||||||
INGRESS_ENABLED: 'false'
|
INGRESS_ENABLED: 'false'
|
||||||
INGRESS_HOST: 'ks.svc.cluster.local'
|
INGRESS_HOST: 'ks.svc.cluster.local'
|
||||||
PROXY_FRONT_PORT: '8899'
|
PROXY_FRONT_PORT: '8899'
|
||||||
AUTH_ENABLED: ''
|
AUTH_ENABLED: 'true'
|
||||||
AUTH_TYPE: 'saml'
|
AUTH_TYPE: 'oidc'
|
||||||
AUTH_SAML_IDP_METADATA_URL: ''
|
AUTH_SAML_IDP_METADATA_URL: ''
|
||||||
AUTH_SAML_ROLE_ATTRIBUTE: 'role'
|
AUTH_SAML_ROLE_ATTRIBUTE: 'role'
|
||||||
AUTH_SAML_ROLES: '{"admin":{"canDownloadPCAP":true,"canReplayTraffic":true,"canUpdateTargetedPods":true,"canUseScripting":true,"filter":"","showAdminConsoleLink":true}}'
|
AUTH_SAML_ROLES: '{"admin":{"canDownloadPCAP":true,"canStopTrafficCapturing":true,"canUpdateTargetedPods":true,"canUseScripting":true,"filter":"","showAdminConsoleLink":true}}'
|
||||||
TELEMETRY_DISABLED: ''
|
TELEMETRY_DISABLED: ''
|
||||||
REPLAY_DISABLED: ''
|
SCRIPTING_DISABLED: ''
|
||||||
|
TARGETED_PODS_UPDATE_DISABLED: ''
|
||||||
|
RECORDING_DISABLED: ''
|
||||||
|
STOP_TRAFFIC_CAPTURING_DISABLED: 'false'
|
||||||
GLOBAL_FILTER: ""
|
GLOBAL_FILTER: ""
|
||||||
TRAFFIC_SAMPLE_RATE: '100'
|
TRAFFIC_SAMPLE_RATE: '100'
|
||||||
JSON_TTL: '5m'
|
JSON_TTL: '5m'
|
||||||
PCAP_TTL: '10s'
|
PCAP_TTL: '10s'
|
||||||
PCAP_ERROR_TTL: '60s'
|
PCAP_ERROR_TTL: '60s'
|
||||||
|
TIMEZONE: ' '
|
||||||
|
CLOUD_LICENSE_ENABLED: 'true'
|
||||||
|
DUPLICATE_TIMEFRAME: '200ms'
|
||||||
|
ENABLED_DISSECTORS: 'amqp,dns,http,icmp,kafka,redis,sctp,syscall,tcp,ws'
|
||||||
---
|
---
|
||||||
# Source: kubeshark/templates/02-cluster-role.yaml
|
# Source: kubeshark/templates/02-cluster-role.yaml
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
kind: ClusterRole
|
kind: ClusterRole
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-cluster-role-default
|
name: kubeshark-cluster-role-default
|
||||||
@@ -177,6 +270,7 @@ rules:
|
|||||||
- extensions
|
- extensions
|
||||||
- apps
|
- apps
|
||||||
resources:
|
resources:
|
||||||
|
- nodes
|
||||||
- pods
|
- pods
|
||||||
- services
|
- services
|
||||||
- endpoints
|
- endpoints
|
||||||
@@ -185,16 +279,24 @@ rules:
|
|||||||
- list
|
- list
|
||||||
- get
|
- get
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
resourceNames:
|
||||||
|
- kube-system
|
||||||
---
|
---
|
||||||
# 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: ClusterRoleBinding
|
kind: ClusterRoleBinding
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-cluster-role-binding-default
|
name: kubeshark-cluster-role-binding-default
|
||||||
@@ -213,10 +315,10 @@ apiVersion: rbac.authorization.k8s.io/v1
|
|||||||
kind: Role
|
kind: Role
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-self-config-role
|
name: kubeshark-self-config-role
|
||||||
@@ -242,10 +344,10 @@ apiVersion: rbac.authorization.k8s.io/v1
|
|||||||
kind: RoleBinding
|
kind: RoleBinding
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-self-config-role-binding
|
name: kubeshark-self-config-role-binding
|
||||||
@@ -265,10 +367,10 @@ kind: Service
|
|||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-hub
|
name: kubeshark-hub
|
||||||
@@ -277,7 +379,7 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- name: kubeshark-hub
|
- name: kubeshark-hub
|
||||||
port: 80
|
port: 80
|
||||||
targetPort: 80
|
targetPort: 8080
|
||||||
selector:
|
selector:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
@@ -287,10 +389,10 @@ apiVersion: v1
|
|||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-front
|
name: kubeshark-front
|
||||||
@@ -299,7 +401,7 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- name: kubeshark-front
|
- name: kubeshark-front
|
||||||
port: 80
|
port: 80
|
||||||
targetPort: 80
|
targetPort: 8080
|
||||||
selector:
|
selector:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
@@ -308,18 +410,24 @@ spec:
|
|||||||
kind: Service
|
kind: Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
metadata:
|
metadata:
|
||||||
name: kubeshark-worker-metrics
|
labels:
|
||||||
namespace: default
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
|
app.kubernetes.io/name: kubeshark
|
||||||
|
app.kubernetes.io/instance: kubeshark
|
||||||
|
app.kubernetes.io/version: "52.3.74"
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
prometheus.io/scrape: 'true'
|
prometheus.io/scrape: 'true'
|
||||||
prometheus.io/port: '49100'
|
prometheus.io/port: '49100'
|
||||||
|
name: kubeshark-worker-metrics
|
||||||
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
selector:
|
selector:
|
||||||
app.kubeshark.co/app: worker
|
app.kubeshark.co/app: worker
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
ports:
|
ports:
|
||||||
- name: metrics
|
- name: metrics
|
||||||
@@ -334,10 +442,10 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: worker
|
app.kubeshark.co/app: worker
|
||||||
sidecar.istio.io/inject: "false"
|
sidecar.istio.io/inject: "false"
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-worker-daemon-set
|
name: kubeshark-worker-daemon-set
|
||||||
@@ -346,36 +454,20 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: worker
|
app.kubeshark.co/app: worker
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
|
||||||
app.kubernetes.io/managed-by: Helm
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: worker
|
app.kubeshark.co/app: worker
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
name: kubeshark-worker-daemon-set
|
name: kubeshark-worker-daemon-set
|
||||||
namespace: kubeshark
|
namespace: kubeshark
|
||||||
spec:
|
spec:
|
||||||
initContainers:
|
|
||||||
- name: load-pf-ring
|
|
||||||
image: kubeshark/pf-ring-module:all
|
|
||||||
imagePullPolicy: Always
|
|
||||||
securityContext:
|
|
||||||
capabilities:
|
|
||||||
add:
|
|
||||||
- SYS_MODULE
|
|
||||||
drop:
|
|
||||||
- ALL
|
|
||||||
volumeMounts:
|
|
||||||
- name: lib-modules
|
|
||||||
mountPath: /lib/modules
|
|
||||||
containers:
|
containers:
|
||||||
- command:
|
- command:
|
||||||
- ./worker
|
- ./worker
|
||||||
@@ -385,12 +477,16 @@ spec:
|
|||||||
- '30001'
|
- '30001'
|
||||||
- -metrics-port
|
- -metrics-port
|
||||||
- '49100'
|
- '49100'
|
||||||
|
- -packet-capture
|
||||||
|
- 'best'
|
||||||
- -unixsocket
|
- -unixsocket
|
||||||
- -servicemesh
|
- -servicemesh
|
||||||
- -procfs
|
- -procfs
|
||||||
- /hostproc
|
- /hostproc
|
||||||
- -kernel-module
|
- -disable-ebpf
|
||||||
image: 'docker.io/kubeshark/worker:v52.1.63'
|
- -resolution-strategy
|
||||||
|
- 'auto'
|
||||||
|
image: 'docker.io/kubeshark/worker:v52.3.74'
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
name: sniffer
|
name: sniffer
|
||||||
ports:
|
ports:
|
||||||
@@ -408,8 +504,12 @@ spec:
|
|||||||
fieldPath: metadata.namespace
|
fieldPath: metadata.namespace
|
||||||
- name: TCP_STREAM_CHANNEL_TIMEOUT_MS
|
- name: TCP_STREAM_CHANNEL_TIMEOUT_MS
|
||||||
value: '10000'
|
value: '10000'
|
||||||
|
- name: TCP_STREAM_CHANNEL_TIMEOUT_SHOW
|
||||||
|
value: 'false'
|
||||||
- name: KUBESHARK_CLOUD_API_URL
|
- name: KUBESHARK_CLOUD_API_URL
|
||||||
value: 'https://api.kubeshark.co'
|
value: 'https://api.kubeshark.co'
|
||||||
|
- name: PROFILING_ENABLED
|
||||||
|
value: 'false'
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpu: 750m
|
cpu: 750m
|
||||||
@@ -454,7 +554,8 @@ spec:
|
|||||||
- ./tracer
|
- ./tracer
|
||||||
- -procfs
|
- -procfs
|
||||||
- /hostproc
|
- /hostproc
|
||||||
image: 'docker.io/kubeshark/worker:v52.1.63'
|
- -disable-ebpf
|
||||||
|
image: 'docker.io/kubeshark/worker:v52.3.74'
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
name: tracer
|
name: tracer
|
||||||
env:
|
env:
|
||||||
@@ -480,6 +581,8 @@ spec:
|
|||||||
- SYS_PTRACE
|
- SYS_PTRACE
|
||||||
- SYS_RESOURCE
|
- SYS_RESOURCE
|
||||||
- IPC_LOCK
|
- IPC_LOCK
|
||||||
|
- NET_RAW
|
||||||
|
- NET_ADMIN
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
@@ -491,6 +594,9 @@ spec:
|
|||||||
readOnly: true
|
readOnly: true
|
||||||
- mountPath: /app/data
|
- mountPath: /app/data
|
||||||
name: data
|
name: data
|
||||||
|
- mountPath: /etc/os-release
|
||||||
|
name: os-release
|
||||||
|
readOnly: true
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
serviceAccountName: kubeshark-service-account
|
serviceAccountName: kubeshark-service-account
|
||||||
@@ -519,6 +625,9 @@ spec:
|
|||||||
- name: lib-modules
|
- name: lib-modules
|
||||||
hostPath:
|
hostPath:
|
||||||
path: /lib/modules
|
path: /lib/modules
|
||||||
|
- hostPath:
|
||||||
|
path: /etc/os-release
|
||||||
|
name: os-release
|
||||||
- name: data
|
- name: data
|
||||||
emptyDir:
|
emptyDir:
|
||||||
sizeLimit: 500Mi
|
sizeLimit: 500Mi
|
||||||
@@ -529,10 +638,10 @@ kind: Deployment
|
|||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-hub
|
name: kubeshark-hub
|
||||||
@@ -542,19 +651,16 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
|
||||||
app.kubernetes.io/managed-by: Helm
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: hub
|
app.kubeshark.co/app: hub
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
@@ -563,6 +669,8 @@ spec:
|
|||||||
- name: kubeshark-hub
|
- name: kubeshark-hub
|
||||||
command:
|
command:
|
||||||
- ./hub
|
- ./hub
|
||||||
|
- -port
|
||||||
|
- "8080"
|
||||||
env:
|
env:
|
||||||
- name: POD_NAME
|
- name: POD_NAME
|
||||||
valueFrom:
|
valueFrom:
|
||||||
@@ -574,7 +682,7 @@ spec:
|
|||||||
fieldPath: metadata.namespace
|
fieldPath: metadata.namespace
|
||||||
- name: KUBESHARK_CLOUD_API_URL
|
- name: KUBESHARK_CLOUD_API_URL
|
||||||
value: 'https://api.kubeshark.co'
|
value: 'https://api.kubeshark.co'
|
||||||
image: 'docker.io/kubeshark/hub:v52.1.63'
|
image: 'docker.io/kubeshark/hub:v52.3.74'
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
periodSeconds: 1
|
periodSeconds: 1
|
||||||
@@ -582,14 +690,14 @@ spec:
|
|||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
periodSeconds: 1
|
periodSeconds: 1
|
||||||
failureThreshold: 3
|
failureThreshold: 3
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpu: 750m
|
cpu: 750m
|
||||||
@@ -622,10 +730,10 @@ kind: Deployment
|
|||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
annotations:
|
annotations:
|
||||||
name: kubeshark-front
|
name: kubeshark-front
|
||||||
@@ -635,19 +743,16 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubeshark.co/app: front
|
app.kubeshark.co/app: front
|
||||||
helm.sh/chart: kubeshark-52.1.63
|
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
|
||||||
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-52.1.63
|
helm.sh/chart: kubeshark-52.3.74
|
||||||
app.kubernetes.io/name: kubeshark
|
app.kubernetes.io/name: kubeshark
|
||||||
app.kubernetes.io/instance: kubeshark
|
app.kubernetes.io/instance: kubeshark
|
||||||
app.kubernetes.io/version: "52.1.63"
|
app.kubernetes.io/version: "52.3.74"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
@@ -655,14 +760,28 @@ spec:
|
|||||||
- name: REACT_APP_DEFAULT_FILTER
|
- name: REACT_APP_DEFAULT_FILTER
|
||||||
value: ' '
|
value: ' '
|
||||||
- name: REACT_APP_AUTH_ENABLED
|
- name: REACT_APP_AUTH_ENABLED
|
||||||
value: 'false'
|
value: 'true'
|
||||||
- name: REACT_APP_AUTH_TYPE
|
- name: REACT_APP_AUTH_TYPE
|
||||||
value: 'saml'
|
value: 'oidc'
|
||||||
- name: REACT_APP_AUTH_SAML_IDP_METADATA_URL
|
- name: REACT_APP_AUTH_SAML_IDP_METADATA_URL
|
||||||
value: ' '
|
value: ' '
|
||||||
- name: REACT_APP_REPLAY_DISABLED
|
- name: REACT_APP_TIMEZONE
|
||||||
|
value: ' '
|
||||||
|
- name: REACT_APP_SCRIPTING_DISABLED
|
||||||
value: 'false'
|
value: 'false'
|
||||||
image: 'docker.io/kubeshark/front:v52.1.63'
|
- name: REACT_APP_TARGETED_PODS_UPDATE_DISABLED
|
||||||
|
value: 'false'
|
||||||
|
- name: REACT_APP_BPF_OVERRIDE_DISABLED
|
||||||
|
value: 'false'
|
||||||
|
- name: REACT_APP_RECORDING_DISABLED
|
||||||
|
value: 'false'
|
||||||
|
- name: REACT_APP_STOP_TRAFFIC_CAPTURING_DISABLED
|
||||||
|
value: 'false'
|
||||||
|
- name: 'REACT_APP_CLOUD_LICENSE_ENABLED'
|
||||||
|
value: 'true'
|
||||||
|
- name: REACT_APP_SUPPORT_CHAT_ENABLED
|
||||||
|
value: 'true'
|
||||||
|
image: 'docker.io/kubeshark/front:v52.3.74'
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
name: kubeshark-front
|
name: kubeshark-front
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
@@ -671,14 +790,14 @@ spec:
|
|||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
periodSeconds: 1
|
periodSeconds: 1
|
||||||
failureThreshold: 3
|
failureThreshold: 3
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
initialDelaySeconds: 3
|
initialDelaySeconds: 3
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
port: 80
|
port: 8080
|
||||||
timeoutSeconds: 1
|
timeoutSeconds: 1
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath string) error {
|
func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath string, grep string) error {
|
||||||
podExactRegex := regexp.MustCompile("^" + kubernetes.SELF_RESOURCES_PREFIX)
|
podExactRegex := regexp.MustCompile("^" + kubernetes.SELF_RESOURCES_PREFIX)
|
||||||
pods, err := provider.ListAllPodsMatchingRegex(ctx, podExactRegex, []string{config.Config.Tap.Release.Namespace})
|
pods, err := provider.ListAllPodsMatchingRegex(ctx, podExactRegex, []string{config.Config.Tap.Release.Namespace})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -34,7 +34,7 @@ func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath strin
|
|||||||
|
|
||||||
for _, pod := range pods {
|
for _, pod := range pods {
|
||||||
for _, container := range pod.Spec.Containers {
|
for _, container := range pod.Spec.Containers {
|
||||||
logs, err := provider.GetPodLogs(ctx, pod.Namespace, pod.Name, container.Name)
|
logs, err := provider.GetPodLogs(ctx, pod.Namespace, pod.Name, container.Name, grep)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("Failed to get logs!")
|
log.Error().Err(err).Msg("Failed to get logs!")
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -8,10 +8,21 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
X_KUBESHARK_CAPTURE_HEADER_KEY = "X-Kubeshark-Capture"
|
||||||
|
X_KUBESHARK_CAPTURE_HEADER_IGNORE_VALUE = "ignore"
|
||||||
|
)
|
||||||
|
|
||||||
// Get - When err is nil, resp always contains a non-nil resp.Body.
|
// Get - When err is nil, resp always contains a non-nil resp.Body.
|
||||||
// Caller should close resp.Body when done reading from it.
|
// Caller should close resp.Body when done reading from it.
|
||||||
func Get(url string, client *http.Client) (*http.Response, error) {
|
func Get(url string, client *http.Client) (*http.Response, error) {
|
||||||
return checkError(client.Get(url))
|
req, err := http.NewRequest(http.MethodPost, url, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
AddIgnoreCaptureHeader(req)
|
||||||
|
|
||||||
|
return checkError(client.Do(req))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post - When err is nil, resp always contains a non-nil resp.Body.
|
// Post - When err is nil, resp always contains a non-nil resp.Body.
|
||||||
@@ -21,6 +32,7 @@ func Post(url, contentType string, body io.Reader, client *http.Client, licenseK
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
AddIgnoreCaptureHeader(req)
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
req.Header.Set("License-Key", licenseKey)
|
req.Header.Set("License-Key", licenseKey)
|
||||||
|
|
||||||
@@ -51,3 +63,7 @@ func checkError(response *http.Response, errInOperation error) (*http.Response,
|
|||||||
|
|
||||||
return response, nil
|
return response, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddIgnoreCaptureHeader(req *http.Request) {
|
||||||
|
req.Header.Set(X_KUBESHARK_CAPTURE_HEADER_KEY, X_KUBESHARK_CAPTURE_HEADER_IGNORE_VALUE)
|
||||||
|
}
|
||||||
|
|||||||
@@ -37,3 +37,18 @@ func EqualStringSlices(slice1 []string, slice2 []string) bool {
|
|||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Diff returns the elements in `a` that aren't in `b`.
|
||||||
|
func Diff(a, b []string) []string {
|
||||||
|
mb := make(map[string]struct{}, len(b))
|
||||||
|
for _, x := range b {
|
||||||
|
mb[x] = struct{}{}
|
||||||
|
}
|
||||||
|
var diff []string
|
||||||
|
for _, x := range a {
|
||||||
|
if _, found := mb[x]; !found {
|
||||||
|
diff = append(diff, x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return diff
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user