Non-root execution
pod_non_root(boolean, default false): Run the Pod as non-root (UID/GID/FSGroup 65532). Applies pod-wide filesystem ownership.container_non_root(boolean, default false): Run the main container as non-root (UID 65532) and disallow privilege escalation.
- Enable both flags for consistent non-root behavior and fewer permission surprises when writing to volumes.
- Some package managers (e.g., Alpine
apk add) require root. To runapk addinside the container, you have options:- Use
before_scriptwith a base image that already includes needed tools, or - Temporarily run the main container with root by leaving
container_non_rootdisabled for setup, or - Build a custom image with dependencies pre-installed (recommended for production reproducibility).
- Use
Linux capabilities
Default policy: drop ALL capabilities. Add back only what you need. If you specifycap_drop explicitly, you override the default; to keep drop ALL and add back minimal caps, leave cap_drop unset and only use cap_add.
cap_drop(string[]): Capabilities to drop. If omitted,ALLis dropped by default.cap_add(string[]): Capabilities to add back.allow_privilege_escalation: always set tofalse.- Seccomp profile:
RuntimeDefault.
Network isolation and egress lockdown
Ingress isolation (Default: Enabled)
All inter-VM communication is blocked by default to prevent sandbox-to-sandbox access. This provides strong isolation between different sandboxes running in the same cluster. Key points:- Ingress blocking: VM sandboxes cannot communicate with each other by default
- Administrative access preserved:
kubectl execandk7 shellstill work normally (they use the Kubernetes API, not pod networking) - System services allowed: Traffic from
kube-systemnamespace is permitted for cluster functionality - No configuration needed: This security feature is enabled by default for all sandboxes
Egress lockdown and whitelisting
Useegress_whitelist to control outbound traffic. The policy is applied after the container becomes Ready so before_script runs with open egress.
Behavior:
- Omit
egress_whitelist: egress open (external internet allowed). []: full egress block (no DNS resolution; no outbound IPs).["CIDR", ...]: allow only listed CIDR blocks; DNS is blocked.
Network Policy Details:
- Ingress: Blocked by default (inter-VM isolation) - system services and kubectl exec still work
- DNS: When egress is locked down, DNS resolution is blocked by default (no CoreDNS exception)
- Administrative access:
kubectl exec,k7 shell, and API operations bypass network policies
Mitigations when DNS is blocked
- Use IP/CIDR whitelisting only (no domains post-lockdown)
- Pre-resolve/fetch in
before_script(runs before lockdown with open egress) - If you must allow DNS temporarily, consider an operational override at cluster level (not provided by K7 config)
