FAQ

Frequently asked questions

What the sensor needs, what it can't see, and what's included in open source versus Platform.

What does Tracepod do?
Tracepod watches a running container with an eBPF kprobe on openat() and records every file it opens. The harden CLI then takes that manifest and builds a new OCI image containing only the files that were observed, their recursively resolved ELF shared-library dependencies, and anything you explicitly included. The result is a smaller image: fewer files and fewer packages than the base image it started from, which means a smaller attack surface.
What is NRI, and why does the sensor need it?
NRI (Node Resource Interface) is containerd's plugin interface for observing container lifecycle events. It's the only mechanism the sensor uses to find out when a container starts and stops, so it can attach its eBPF program to the right container. NRI ships disabled by default on containerd below version 2.0, and enabled by default from 2.0 onward — see Requirements for which node images that affects today, and how to turn it on where it's off.
What happens if I start a container with docker run instead of through Kubernetes?
It won't be profiled, and no warning or error indicates that. docker run, nerdctl run, docker compose, and ctr run all talk to containerd's native API directly rather than going through the CRI plugin, so they never fire the NRI events the sensor listens for. The sensor stays healthy, the container runs normally, and no manifest is ever written; there is no error on either side. Start the container through kubelet (a normal Pod) or crictl instead.
How long do I need to profile, and when does the manifest get written?
In standalone mode (the default, no controller configured) a manifest is written for a container as soon as that container stops; there is no fixed profiling window to wait out. What matters is whether the traffic the container saw before it stopped was representative of production: a profile recorded against an idle container will be missing files that only get opened under real load.
What does the confidence score mean?
It's a coverage signal, not a quality grade: it answers "how representative was this profiling session," not "is this image safe." It starts at 100 and loses points for things like a short profiling window or manually added paths the sensor never observed. A score below 100 doesn't mean the image is broken; it means specific, named gaps are still open, and the build output tells you exactly which ones. The penalty weights are v1 defaults, calibrated against a reference nginx profile, and are expected to change before GA, so don't hard-code specific thresholds into CI gates yet. Full breakdown in the confidence scoring docs.
What SBOM formats does it produce?
Both CycloneDX and SPDX, generated via syft when you pass --sbom to harden build. If you also pass a cosign signing key, each SBOM is signed and a .sig sidecar is written next to it.
What license is Tracepod under?
AGPL-3.0. Free to self-host. See the LICENSE file in the repository for the full terms.
What's the difference between the open-source core and Platform (Pro)?
The open-source core — the eBPF sensor, the harden image builder, the Helm chart, and the GitHub Action — is everything you need to profile a container and produce a hardened image and its SBOM, and it's free. The Platform adds a web dashboard across your whole fleet, automated sandbox validation before a build ships, an auto-fix loop for validation failures, CVE delta reporting, fleet policy and compliance, and more. See Open Source and Platform for the full breakdown, or Pricing for what's included where.
Does it work on EKS, AKS, GKE, or Fargate?
It depends on the node image and the pod-admission policy, not the managed offering by name. On EKS and AKS, whether NRI is already on depends on the containerd version the node image bundles — current AL2023 and AKS Ubuntu 24.04 images have it on by default; older images (like AKS Ubuntu 22.04) need it enabled manually. GKE Autopilot and AWS Fargate block the sensor outright: Autopilot blocks privileged pods at admission, and Fargate gives you no node to run a DaemonSet on at all. GKE Standard isn't covered by that specific block, but every cluster needs to admit a privileged, hostPID pod regardless of provider. See Requirements for the full picture, and run hack/discovery-probe.sh against a real node before you commit to a rollout.

Still have a question?

Check the docs, or ask us directly.

Contact us