landlock-genprof apply-proposal
Reviews and applies an approved, digest-bound SecurityProfileProposal
Synopsis
Reviews and applies a published SecurityProfileProposal’s artifacts. Requires approvalState=Approved with a valid candidate digest and candidate-v1 mechanism; fails closed before planning or applying when that binding is missing, malformed, stale, or changed. A confirmation prompt is additional operator confirmation.
Installed as a kubectl plugin (the common case): run this as kubectl landlock-genprof <command>. Running this binary directly instead (standalone, not via kubectl) works the same way, without that prefix.
landlock-genprof apply-proposal <proposal> [flags]
Examples
# Applies PodLock/NetworkPolicy/SPO SeccompProfile if available — Patched
# Manifest is left out unless --restart is also passed, see below
kubectl landlock-genprof apply-proposal nginx-demo --namespace default
# Also apply the Patched Manifest artifact, restarting the target pod
kubectl landlock-genprof apply-proposal nginx-demo --restart
# Skip PodLock (e.g. its operator isn't installed on this cluster)
kubectl landlock-genprof apply-proposal nginx-demo --skip=podlock
# Non-interactive, for CI/scripted use — still prints what it applied
kubectl landlock-genprof apply-proposal nginx-demo --yes
Options
-h, --help help for apply-proposal
-n, --namespace string Kubernetes namespace (default "default")
--readiness-timeout duration How long to wait for an external controller to make an enforcement artifact usable before binding the workload to it — see docs/adr/0007-governed-apply-ordering-and-enforcement-readiness.md. Applies only when the Patched Manifest is being applied and references a generated profile; on timeout the workload binding is not applied. (default 2m0s)
--restart Also apply the Patched Manifest artifact, if available. Opt-in, not on by default: unlike the other three artifacts, applying it deletes and recreates the target pod outright (see internal/k8s.applyPod) — every other artifact is either inert until its operator reconciles it or a live-updatable resource. Confirmed live: repeatedly force-restarting a pod whose enforcement side wasn't actually ready yet (SPO/PodLock) is how nginx-demo ended up in a 73-minute, 15-restart CrashLoopBackOff with no single moment where restarting it was an actual decision — --skip=patched-manifest used to be the only way to avoid that, but it's easy to not know to reach for an opt-out flag you've never needed before; an opt-in one can't be missed by accident the same way.
--skip strings Artifact(s) to leave out of this apply, comma-separated or repeated — one of: podlock, networkpolicy, patched-manifest, spo-seccompprofile. Patched Manifest is already left out by default (see --restart); --skip=patched-manifest is accepted but redundant with it.
-y, --yes Skip the confirmation prompt (for CI/non-interactive use); still prints what it applied
SEE ALSO
- landlock-genprof - Generates least-privilege Kubernetes security profiles by observing a running pod