The short version: use profile B. It is the default, it needs neither
CAP_SYS_ADMIN nor CAP_NET_ADMIN, and it gives you RED metrics,
per-service spans and a service inventory.Move to C only when you have uninstrumented services whose traces must stitch
into one, and a security review that approved CAP_NET_ADMIN on every
node.Comparison
The capabilities, measured
Profile A — network
Network flow metrics from a socket filter. No process introspection, no executable scanning, no access to decrypted payloads. Choose it when an operator wants traffic visibility and will not grant more. It is the profile that gets approved where nothing else would.Profile B — application (default)
Designed to be genuinely useful on its own, not a teaser for C. That is a deliberate product decision. At a security-conscious customer, B is the only profile that will be approved — so if it were crippled, those customers would either grant near-root or not deploy at all. B is where the value is. You get: RED metrics, per-service server and client spans, protocol decoding across HTTP/S, gRPC, SQL, Redis, Kafka and more, a service inventory including services nobody instrumented, and Kubernetes decoration. You give up: outbound trace-context injection. The agent reads an incoming W3Ctraceparent and joins that trace, but cannot add one on the way
out.
Whether that matters depends on your estate. If your services already
propagate
traceparent — most modern frameworks do, even without an
observability SDK — profile B produces joined, end-to-end traces.If nothing propagates today, B gives you excellent per-service telemetry and
traces that do not stitch across service boundaries. Check one request path
before assuming which case you are in; it is usually the first.Profile C — tracing
AddsCAP_NET_ADMIN, which lets the agent inject trace context via TC programs
so chains through uninstrumented services become a single trace.
What it costs:
CAP_NET_ADMINon every node — network administration, including interface and routing changes.- Host networking — the pod shares the node’s network namespace.
- A kernel tracing filesystem mount.
CAP_SYS_ADMIN is never a default
CAP_SYS_ADMIN is near-equivalent to root. In the agent it would additionally
enable Go-level trace-context propagation by writing into process memory.
It is in no profile. It is refused outright on A and B, and on C it requires
an explicit opt-in flag. See Security model for
the managed-Kubernetes trap that makes this matter in practice.
Choosing
1
Start at B
The default, and the right answer for most estates.
2
Drop to A only if B will not be approved
You lose spans and the service inventory and keep network flow metrics.
Linux and Docker only.
3
Move to C only on evidence
Install B first. If your traces already join, you are done. If they do not
and the services involved cannot be instrumented, C is the answer.
Verifying what you actually got
Intent and reality are different things, and the gap is the point of the audit tool: it reports the privilege the running agent actually holds. Run it after any install, and after any upgrade — a chart default that changed underneath you is exactly the kind of thing nobody notices.Next
Security model
The full statement for a security review.
Install on Linux
Preflight, install, verify.
Install on Kubernetes
The chart, its values, and what it renders.