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.