Kubescape Operator Command
Run Kubescape inside the cluster: posture that updates itself, CVEs ranked by whether they load, alerts on behaviour a container never showed, and NetworkPolicies drafted from real traffic.
Read references/kubescape-operator.md before responding. It holds the preflight, the capability matrix and install profiles, the scanner image override, result commands, runtime and NetworkPolicy details, exceptions, metrics and troubleshooting. The working files are in examples/kubescape-operator.
The GitOps engine for this organisation is ${user_config.gitops_engine}. If that reads as a literal placeholder or is empty, it is not configured: detect Flux (kubectl get crd helmreleases.helm.toolkit.fluxcd.io) or Argo CD (kubectl get crd applications.argoproj.io), or ask.
Ownership boundary (enforced at the menu)
| Question | Authoritative command |
|---|---|
| "Scan continuously, keep results in the cluster" | this command |
| "Which CVEs are in code that actually runs?" | this command (vulns) |
| "Alert on unexpected container behaviour" | this command (runtime), or /platform-skills:runtime-security where Falco runs |
| "Draft NetworkPolicies from traffic" | this command (netpol) |
| "Score the cluster now / CIS audit / PR gate" | /platform-skills:kubescape |
| "CVE reports with Trivy Operator" | /platform-skills:trivy k8s |
| "Dashboards and alert routing" | /platform-skills:observability |
Mode dispatch
Parse the first word of $ARGUMENTS as the mode. When $ARGUMENTS is empty, or is a question in plain words, run the interactive wizard.
| Mode | What it does |
|---|---|
install | Preflight, pick a profile, write the Flux (or Argo CD) manifests, install, verify, upgrade or roll back |
vulns | Read and rank vulnerability results; on-demand scan; private registries |
runtime | Enable detection, check learning progress, bind rules, route alerts, test an alert |
netpol | Turn a generated policy into a reviewed NetworkPolicy in Git |
exceptions | Accept a risk in the cluster: SecurityException with reason, author, expiry |
metrics | Exporter, ServiceMonitor, alert rules |
debug | Diagnose an operator that installs but misbehaves |
| (empty) | Interactive wizard |
Step 0 — detect before asking (silent)
kubectl config current-context
kubectl version -o json | jq -r .serverVersion.gitVersion # >= 1.28
kubectl get nodes -o jsonpath='{range .items[*]}{.status.nodeInfo.kernelVersion}{" "}{.spec.providerID}{"\n"}{end}' | sort -u
kubectl -n kubescape get helmrelease,deploy,ds 2>/dev/null # already installed? which profile?
kubectl get crd | grep -E 'helm.toolkit.fluxcd.io|argoproj.io|monitoring.coreos.com|kyverno'
kubectl get ds -A | grep -iE 'falco|tetragon' # another eBPF agent
kubectl get deploy -A | grep -i trivy-operator # another CVE operator
Then, only if a node-agent profile is in play, run the kernel preflight from the reference on one node per node image (CONFIG_FANOTIFY_ACCESS_PERMISSIONS, CONFIG_DEBUG_INFO_BTF). Tell the user what you found in one short block before the first question, for example:
Cluster: prod-eu-west-1 (EKS, Kubernetes 1.33, 3 node images)
Flux: yes · Prometheus Operator: yes · Falco: yes (daemonset falco) · Trivy Operator: no
Kernel: fanotify permissions ✔ on all node images
Kubescape: not installed
Interactive wizard
Ask with the AskUserQuestion tool when it is available (one question per call, recommended option first); otherwise print the numbered menu and wait.
Layer 1 — What do you want?
What do you want Kubescape to do in this cluster?
1. "Install it" / "change what it does" → install
2. "Show me which vulnerabilities actually matter" → vulns
3. "Alert me when a container does something odd" → runtime
4. "Write NetworkPolicies from real traffic" → netpol
5. "We accept this risk in the cluster" → exceptions
6. "Get it into Prometheus / Grafana" → metrics
7. "It's installed but something is wrong" → debug
Just a score or a CIS audit right now → /platform-skills:kubescape cluster
Not installed and the user picked 2–6 → say it needs install first and offer it.
Layer 2 — Install profile (install only)
Offer the profiles from the reference, pre-selected from Step 0:
Which profile?
a. Full — posture, relevancy-ranked CVEs, runtime alerts, NetworkPolicies [recommended: supported kernel, no Falco]
b. Full without runtime alerts — keep Falco for alerting [recommended: Falco detected]
c. Posture + CVEs, no node-agent — any kernel, no privileged DaemonSet [required: kernel lacks fanotify permissions]
d. Posture only — Trivy Operator keeps CVEs [recommended: Trivy Operator detected]
State why the recommended one fits, in one line. Never offer a node-agent profile on nodes that failed the kernel preflight: the install would fail and Flux would uninstall the release.
Layer 3 — Only the settings that can hurt
- Overlap (detected Falco or Trivy Operator): "Turn off Kubescape's <runtime alerts | CVE scanning> so each signal has one owner? [Y]".
- Learning period (
runtime): "Profiles learn for 24h before anomaly rules fire. Keep 24h? [Y]" Shorter means more false alerts. - Cluster name (
install): "Name this cluster in reports? []". The chart default clustermakes clusters indistinguishable. - Alert destination (
runtime): logs only (default), Alertmanager or syslog. HTTP only with a Kubescape backend configured (serverplus credentials); chart 1.40.4 ignores the HTTP URL otherwise.
Status card (every mode ends with this)
Kubescape operator — prod-eu-west-1 chart 1.40.4 · scanner v4.0.16
Posture ✔ 214 workloads scanned · 3 critical · 41 high last scan 12m ago
CVEs ✔ relevancy on · 2 critical in loaded packages (of 31 total)
Runtime ✔ 38/41 profiles completed · 0 alerts in 24h
NetPol ✔ 41 generated · 0 applied from Git yet
Exceptions 2 active · next expiry 2026-12-31 (payments-api C-0237)
Next: /platform-skills:kubescape-operator netpol payments
Build it from kubectl get workloadconfigurationscansummaries -A, vulnerabilitymanifestsummaries -A, containerprofiles -A annotations, generatednetworkpolicies -A, se -A/cse. Show only lines for enabled capabilities; one next command.
Mode: install
- Step 0 and the profile (Layer 2).
- Copy
examples/kubescape-operator/flux/into the user's GitOps path; apply the profile's capability changes; setclusterName; keepversionexact andkubescape.image.tagat v4.0.16 (or later) — the bundled v4.0.13 scanner produces no results; keepglobal.enableClusterWideSecretAccess: false(the chart defaulttruelets the scanner and operator read every Secret in the cluster) and ask for explicit approval before turning it on. - Argo CD: same values in an
Application(helm.valuesObject,ServerSideApply=true). - Commit, reconcile, then verify: HelmRelease Ready, pods, APIService
Available,kubescape operator scan configurationsfollowed by summaries appearing. - Restart workloads once if runtime capabilities are on, so profiles reach
complete. - Print the status card, the blast radius (privileged DaemonSet per node, fail-open admission webhook, kubevuln memory) and the rollback (
flux suspend,git revert).
Upgrade: bump version in a PR; read the release notes; compare the new bundled scanner tag with the override.
Mode: vulns
kubectl get vulnerabilitymanifestsummaries -A→ rank bycritical.relevantthenhigh.relevant(with relevancy) or byall(without, and say so).- Top five workloads: image, critical/high, fixable count. Image CI gate →
/platform-skills:trivy. - On demand:
kubescape operator scan vulnerabilities --include-namespaces <ns>. - Private registry pulls failing →
imageScanning.privateRegistries.credentialsfrom a managed secret.
Mode: runtime
- Preflight passed? Falco on the same nodes? (Layer 3 overlap.)
capabilities.runtimeDetection: enable,alertCRD.installDefault: true; one node pool first.- Learning: list
containerprofileswithkubescape.io/statusandkubescape.io/completion; explainready= still learning,completed= active. - Bindings: keep
all-rules-all-pods. A binding cannot reach a namespace inexcludeNamespaces(node-agent never traces it). To narrow a noisy namespace (CI runners) to signature rules, use the opt-inexamples/kubescape-operator/ci-runners/in two steps: first its binding (after the operator is Ready; FluxdependsOn), then switch the operator's Kustomization toci-runners/release/, which adds the post-renderer that removes the namespace from the default binding. Never the other way round, and never in the base install. - Alerts: logs, Alertmanager or syslog exporter values (HTTP needs backend submission; see the reference).
- Prove it: after
completed,kubectl execinto a test pod and show the R2000/R0001 alert inkubectl -n kubescape logs ds/node-agent.
Mode: netpol
kubectl -n <ns> get generatednetworkpolicies; pick the workload (<kind>-<name>).- Extract
.spec. UsepolicyRef(dns,server) to identify each destination, then write in-cluster peers aspodSelector/namespaceSelectorand external ones as a reviewedipBlockCIDR — NetworkPolicy has no hostname peers (FQDN rules need a CNI-specific policy such as CiliumtoFQDNs). The policy selects only this workload, so it isolates only these pods. Add a namespace-wide default-deny later, once every workload in the namespace has a reviewed allow policy and its traffic is validated; earlier, it cuts traffic for pods that have none yet. - Ask how long the workload has run; under one full traffic cycle (daily jobs, weekly reports) → wait.
- Commit for the GitOps reconciler; one namespace at a time; rollback = revert. Never
kubectl applythe generated object to production. - Hardening the rest of the namespace →
/platform-skills:kubernetes.
Mode: exceptions
- Control ID, kind, name, namespace (from the last summary or the user); reason; author; expiry (default 90 days).
- Write a
SecurityExceptionfromexamples/kubescape-operator/security-exception.yaml(ClusterSecurityExceptionwithnamespaceSelectorfor many namespaces);action: ignore, oralert_onlyto keep it visible. - Confirm
capabilities.riskAcceptance: enable; apply through Git; show the control atpassed (w/exceptions)after the automatic rescan. - Remind: a file exception in CI wins over this for the same control and resource.
Mode: metrics
capabilities.prometheusExporter: enable; ServiceMonitor with the Prometheus Operator, otherwiseconfigurations.prometheusAnnotations: enable.- Apply
examples/kubescape-operator/prometheusrule.yaml; fix thereleaselabel to the user's Prometheus ruleSelector. - Without relevancy, explain why
relevantseries are 0 and the fallback alert exists. - Dashboards →
/platform-skills:observability.
Mode: debug
Classify, then follow the matching troubleshooting entry in the reference:
| Symptom | First command | Usual cause |
|---|---|---|
| node-agent CrashLoopBackOff | kubectl -n kubescape logs ds/node-agent --previous | grep -i fanotify | runc path (global.overrideRuntimePath) or kernel without fanotify permissions |
| Installed, no results | kubectl -n kubescape logs deploy/kubescape | grep 'scanning failed' | bundled scanner v4.0.13 (framework 'C-0042' not found) |
| HelmRelease gone / InstallFailed | kubectl -n kubescape get hr kubescape -o jsonpath='{.status.conditions}' | node-agent not Ready → Flux uninstall remediation |
| APIService unavailable | kubectl get apiservice v1beta1.spdx.softwarecomposition.kubescape.io | storage starting or out of memory |
Profiles stay partial | kubectl get containerprofiles -n <ns> annotations | pods older than node-agent → restart |
| No metrics | port-forward the exporter, curl /metrics | ServiceMonitor selection, or scans failing |
Use the systematic order: evidence first, one hypothesis, smallest test, then the fix with verification and rollback.
Agent behavior
Never do these
- Enable a node-agent capability on nodes that failed the kernel preflight.
- Enable
remediationorautoUpgrading. - Turn on
global.enableClusterWideSecretAccesswithout explicit security approval. - Install with the chart's bundled scanner (v4.0.13) and call it done.
- Apply a generated NetworkPolicy directly to production.
- Use
kubectl get applicationprofilesornetworkneighborhoods(removed); usecontainerprofiles. - Run Kubescape runtime detection and Falco on the same nodes without saying so.
Always do these
- Show the Step 0 findings before the first question.
- State blast radius and rollback for install and upgrade.
- End with the status card and one next command.
Cross-references
references/kubescape-operator.md— full operator reference/platform-skills:kubescape— CLI, CIS audits, PR gate, VAP/platform-skills:runtime-security·/platform-skills:trivy·/platform-skills:fluxcd·/platform-skills:observability