Skip to main content

Kubernetes with Helm

Deploy DAST on your Kubernetes cluster using Helm.

Prerequisites

  • Kubernetes cluster (1.18+)
  • Helm 3 installed
  • kubectl configured to access your cluster
  • At least 2GB RAM per DAST pod

Install DAST with Helm

Basic Installation

helm install levoai-shadownet oci://levoai/levoai-shadownet \
--namespace levoai \
--create-namespace \
--set key=<your-auth-key> \
--set orgId=<your-org-id> \
--set levoBaseUrl="https://api.levo.ai"

With Custom Resources

helm install levoai-shadownet oci://levoai/levoai-shadownet \
--namespace levoai \
--create-namespace \
--set key=<your-auth-key> \
--set orgId=<your-org-id> \
--set levoBaseUrl="https://api.levo.ai" \
--set replicaCount=3 \
--set resources.requests.memory="2Gi" \
--set resources.requests.cpu="1000m" \
--set resources.limits.memory="2Gi" \
--set resources.limits.cpu="2000m"

Scheduled Worker Deployment

To deploy workers that handle scheduled scans configured in the Levo dashboard:

helm install levoai-shadownet-scheduled oci://levoai/levoai-shadownet \
--namespace levoai \
--create-namespace \
--set key=<your-auth-key> \
--set orgId=<your-org-id> \
--set levoBaseUrl="https://api.levo.ai" \
--set scheduled=true

With Worker Group

Use worker groups to segment workloads across different clusters or teams:

helm install levoai-shadownet oci://levoai/levoai-shadownet \
--namespace levoai \
--create-namespace \
--set key=<your-auth-key> \
--set orgId=<your-org-id> \
--set levoBaseUrl="https://api.levo.ai" \
--set group="team-backend"

Create Secrets for LLM (Optional)

If you want to use AI-guided crawling, create a secret with your LLM API keys. The Helm chart looks for a secret named levoai-shadownet-secret:

kubectl create secret generic levoai-shadownet-secret \
--namespace levoai \
--from-literal=anthropic-api-key=<your-anthropic-key> \
--from-literal=openai-api-key=<your-openai-key>

The deployment automatically mounts these keys as ANTHROPIC_API_KEY and OPENAI_API_KEY environment variables (both are optional).

Run a Scan

Once the DAST worker is installed in your cluster, use the Levo platform UI to run scans:

  1. Go to your Levo workspace
  2. Navigate to Security TestingDAST
  3. Click New Scan
  4. Select On-Prem as the scan location (to use your installed runner)
  5. Configure your scan settings and target URL
  6. Click Start Scan

The scan will be executed on your cluster using the DAST worker you installed via Helm. Results will appear in the Levo dashboard.

Helm Values Reference

Core Settings

ParameterDescriptionDefault
keyLevo auth key""
orgIdLevo organization ID""
levoBaseUrlLevo platform URL"https://api.levo.ai"
replicaCountNumber of worker replicas3
scheduledEnable scheduled worker modefalse
groupWorker group name for workload segmentation""

Image Settings

ParameterDescriptionDefault
image.registryContainer registrydocker.io
image.repoImage repositorylevoai
image.nameImage namelevoai-shadownet
image.pullPolicyImage pull policyIfNotPresent
image.tagOverrideOverride image tag (defaults to chart version)""

Resource Settings

ParameterDescriptionDefault
resources.requests.cpuCPU request500m
resources.requests.memoryMemory request1Gi
resources.limits.cpuCPU limit2000m
resources.limits.memoryMemory limit2Gi

Browser Settings

These are required for headless Chromium to work properly in containers:

ParameterDescriptionDefault
browser.shmSizeSize of /dev/shm (shared memory for Chrome rendering)1Gi
browser.tmpSizeSize of /tmp tmpfs (Playwright artifacts)512Mi

Advanced Settings

ParameterDescriptionDefault
extraEnvAdditional environment variables (key-value map){}
extraEnvVarsAdditional env vars with valueFrom support[]
extraEnvVarsCMConfigMap name for environment variables[]
extraEnvVarsSecretSecret name for environment variables[]
secretMountsMount Kubernetes Secrets as volumes[]
configMapMountsMount ConfigMaps as volumes[]
podAnnotationsPod annotationssidecar.istio.io/inject: "false"
nodeSelectorNode selector for pod scheduling{}
tolerationsPod tolerations[]
affinityPod affinity rules{}

Accessing Internal Services

For scanning internal services within your cluster, use the internal Kubernetes DNS name as the target URL:

http://<service-name>.<namespace>.svc.cluster.local:<port>

Example:

  • Service name: my-api
  • Namespace: default
  • Port: 8080
  • Full URL: http://my-api.default.svc.cluster.local:8080

The worker pods have network access to services in the cluster, allowing you to scan internal applications directly from the Levo dashboard.

Upgrading

helm upgrade levoai-shadownet oci://levoai/levoai-shadownet \
--namespace levoai \
--reuse-values

Uninstalling

helm uninstall levoai-shadownet --namespace levoai

Next Steps

Was this page helpful?