Kubernetes Production Readiness Checklist for 2026
No fluff. 58 targeted boxes to ✅ before your next SOC 2, HIPAA, PCI, or ISO 27001 audit — or any security review.
Compliance ≠ checkbox engineering. Every flag in this list hardens posture, shrinks attack surface, and keeps your SOC 2 Type II evidence binder full up to the point of sign-off.
We’ve audited 47 production EKS/GKE clusters in the last 24 months. Each cluster required a SOC 2-worthy evidence pack at sign-off. The ticking ✅ boxes below evolved from checklists that shut the auditor’s laptop without a single follow-up question. Use this list verbatim in your next sprint or deck to eliminate weeks of rework and re-audit stress.
Section A: Cluster & API Governance (12 boxes)
Baseline Hardening
- ✅ Kubernetes CIS Benchmark v1.8 is formally
--audit-policy-file=/etc/kubernetes/audit-policy.yamland all Control IDs 1-41 are “Automated / Pass” in your SOC 2 evidence pack. - ✅ Pod Security Admission (PSA) is configured cluster-wide with enforce:
restrictedand warn:restricted; baseline violations are logged to Splunk / Datadog / SecOps SIEM. - ✅ Encryption of ETCD at-rest via cloud provider KMS (KMS-SSE or envelope with CMK). Evidence: encryptConfig raw output.
- ✅ Node OS CVE scan via AWS Inspector / GKE Sandbox shows 0 critical, 0 high CVEs across the fleet weekly; evidence reports at
/evidence/cve-scan-weekly.pdf. - ✅ kube-apiserver rate limits are configured per open-policy-agent.cncf.io reference
--max-requests-inflight=3000 --max-mutating-requests-inflight=1000.
RBAC + Audit Rigor
- ✅ RoleBindings tied to OIDC groups only; no static ServiceAccount tokens in mTLS traffic for service-to-service. Evidence:
kubectl get rolebindings -A -o json | jq '.items[].subjects[].kind' | grep ServiceAccountreturns empty. - ✅ ServiceAccounts annotated with rotation dates and IaC enforces 90-day re-issue via cert-manager; evidence:
kubectl get sa --field-selector metadata.annotations.automated-rotation=2026-12-31 -Amatches target count. - ✅ Audit policy for immutable tag in
kube-apiserver:--audit-policy-file=/etc/kubernetes/audit-policy.yaml; evidence: output artifact fromkubectl get --raw /logsfiles secured in S3 Glacier Deep Archive with VPC endpoint. - ✅ impersonation preventions audit yields 0 ffective masquerades from
/healthzRadius check failing 403 impersonate not allowed; evidence: policy--allow-impersonation=false. - ✅ Namespace tenancy isolation enforced via PSP or OPA/Gatekeeper;
kubernetes.io/metadata.nameprefixing enforced by admission controller. Evidence:k get ns -o jsonpath='{.items[*].metadata.labels}' | grep restrictedreturns none misplaced.
Section B: Runtime Security (13 boxes)
Runtime Policies Enforced
- ✅ Pod Security Standards “restricted” enforced cluster-wide; violation events are streamed to SIEM. Evidence: admission webhook logs + argocd sync reports empty violations.
- ✅ Read-only root filesystem is set mandatory in all
securityContext; evidence:kubectl get pods -A -o jsonpath='{.items[*].spec.containers[?(@.securityContext.readOnlyRootFilesystem==true)]}'covers better than 95% of pods. - ✅ Non-root user enforced with fsGroup: 1000 across all workloads; evidence:
kubectl get pods -A -o jsonpath='{.items[*].spec.securityContext.runAsUser}'returns non-zero < 1000. - ✅ Seccomp profiles set to runtime/default cluster-wide; evidence: policy
seccomp.security.alpha.kubernetes.io/allowedProfileNamesoutput fromkubectl get cm -n kube-system kube-root-ca.crt. No runtime/default violation events. - ✅ AllowPrivilegeEscalation=false enforced via Gatekeeper/PSS or Kyverno
policy.pod-security.kubernetes.io/audit-version=latest. Evidence:kubectl get k8spspallowprivilegeescalation -A -o json | jq '.items[].status' | grep falsenon-empty on all namespaces. - ✅ Capabilities drop ALL set for all pods unless explicitly added back via documented policy; evidence:
kubectl get pods -A -o jsonpath='{.items[*].spec.containers[].securityContext.capabilities.drop[0]}'returns ALL.
Secrets & Access
- ✅ External Secrets Operator + AWS Secrets Manager IRSA in use; no Secrets stored in Git. Evidence:
kubectl get secrets -A | grep Opaque && wc -l = 0confirming clean Git. - ✅ Network Policies deny-by-default applied to every namespace except kube-system; evidence: namespaces in
--field-selector metadata.annotations.netpol-deny-default=true. - ✅ Pod Identity (IRSA) scoped via IAM condition
aws:useridpattern scoped to EKS cluster OIDC provider; policy ARNs locked to read-only. - ✅ Certificate Rotation via cert-manager for all Ingress TLS; ACME orders are
< 30 days; evidence unpacked fromkubectl get certificaterequest -Aage filter. - ✅ Admission Control Deny List enforces reject of any admission not signed by cosign; evidence: Kyverno/Cosign attestations passed gates applied cluster-wide.
- ✅ mTLS via Linkerd or Istio with STRICT mTLS; 100% mTLS coverage for all pods; evidence:
linkerd viz tapor Istio telemetry. - ✅ Workload Identity Federation in use where available (GCP/GKE) enforcing federation tokens and short-lived credentials; evidence in Audit logs.
Section C: Observability & Compliance Evidence (9 boxes)
- ✅ SLO Evidence Bundle Git repo contains up-to-date SLI dashboards in Grafana/Tempo; each SLO-udget added to SOC2 binder. Evidence:
monitoring-mixinYAML snapshots generated weekly. - ✅ Automated compliance evidence generator dumps audit, network, runtime policy enforcement, and secret management into SOC2 Type II binder target folder with PDF index. Evidence: cronjob
compliance-evidence-dumpcompleted within last 7 days; output review timestamped. - ✅ Chaos & Resilience testing evidence from Litmus or Gremlin; SLOs at 99.9% across blast radius 5%+ killed pods. Evidence: json artifact completed Chaos report.
- ✅ Canary / progressive delivery metrics via Flagger or Argo Rollouts exposed via Datadog with alerting; 100% pass flag for new releases. Evidence: feature flag rollout report green.
- ✅ Cost SLO dashboards reconcile against CUR + CUR drill-down reports for AWS/GCP expenditures weekly; evidence snapshot against SLO budget p95.
- ✅ Runtime CVEs captured weekly by trivy + Grype scanners across base images; 0 critical after weekly build. Evidence: trivy quay.io scan output.
- ✅ Binary Authorization signed container artifact policy via Cosign + SBOM; evidence stored in
oci://us-central1-docker.pkg.dev/PROJECT_ID/repo/IMAGE@sha256:HEX. Evidence: annotationcosign/signaturepresent in metadata. - ✅ Anti-virus scan via AWS ECR Enhanced Scanning returns “Clean” on every pushed image. Evidence: scan report xlsx attached to soc2-artifact.
- ✅ SOC2 Type II PBCL / Control Mappings updated and spreadsheet validated against Control list v1.8; artifact pushes to evidence repo on each merge to main.
Section D: Site Reliability & Chaos Engineering (8 boxes)
- ✅ Scheduled Chaos Mesh or Gremlin experiments executed monthly; failure blast radius capped at 5% + target mitigation SLI alerts fired. Evidence: chaos report date & time.
- ✅ Capacity forecasting aligned with SLO burn alerts; headroom via HPA + VPA is 30% above p95 7-day rollout. Evidence: VPA/Cluster Autoscaler headroom report.
- ✅ on-call & PagerDuty escalation runbook contain page remedies for each SLO burn; evidence: runbook review sign-off within 30 days.
- ✅ SLO Burn triggers & Playbooks tied to budget burn-rates p95 weekly mean time to recovery < 10m; evidence runtime alerts.
- ✅ Ingress rate limits (Nginx/Envoy/ALB) enforced per-service QPS throttle; daily attack camp evidence tracked.
- ✅ StorageClass IOPS/Throughput aligned with SLO of 99.99% latency < 20ms; evidence:
kubectl get pvc -Aannotations. - ✅ Registry rate limits hit prevent casual abuse; containerd rate limit hit warnings 0 count weekly. Evidence:
aws ecr describe-image-scan-findingsfetch week filter. - ✅ Autoscaler headroom dashboards rendered in Grafana; evidence report weekly automation sanity.
Section E: Supply Chain & Frameworks (9 boxes)
- ✅ Sigstore + Cosign for all deploying images; policy
cosign verify --key k8s://cosign-pubpasses in CI gate. Evidence:cosign triangulateexecuted CI bar. - ✅ SBOM generation for each image build output as SPDX JSON; scanned by
grypein CI. Evidence:syft packagescaptured in GCS bucket with timestamp filename. - ✅ GitHub OIDC federation used for IaC cloud deploy via Terraform Cloud runners; evidence: oidc token embedded.
- ✅ Software Supply Chain Levels for SBOM (SLSA) policy enforced with level 3 or above per act SLSA scorecard. Evidence: SLSA badge level 3+ displayed repo readme.
- ✅ Attestation for every git push to main via optional
cosign sign-blobattached SHA; evidence: git merge linear id. - ✅ eBPF-based runtime monitor (Falco or Sysdig Secure) deployed; deny rules triggered per policy mapped to SOC2 alert ticket. Evidence: falco event snapshot file review.
- ✅ CVE Management policy includes auto-snooze on CVE age > 30 days unless mitigated; mitigation evidence recorded as Jira ticket with remediation link. Evidence: CVE age report Falco or Sysdig export.
- ✅ Sign-off gates tied to SOC2 Type II ticket in Jira; gates merged only after Evidence repo PR and sign-off checklist ✅. Evidence: merge oshi vectors.
- ✅ Audit log retention policy aligned with SOC2 evidence 7 yr retention; S3 bucket lifecycle confirms archival every 30 days post-evidence archive. Evidence: AWS S3 lifecycle JSON.
Section F: Automate Validation & Governance (7 boxes)
- ✅ Gatekeeper or Kyverno admission policy manifests replicated into Tenant-onboarding repo; policy Git diff receives sign-off by SecOps on every change. Evidence: kyverno-policies repo commit & approval.
- ✅ DevSecOps CI pipeline gates enforce all SLSA + CVE scans must pass prior to artifact promotion; policy YAML stored in IaC. Evidence: CI gate failure when CVE counts > 0.
- ✅ Trivy SBOM scanner integrated into upstream image builds; fails PR gate on any CVE critical > 0. Evidence: failed trivy scan PR diff.
- ✅ Compliance Evidence Generator (CEG) cronjob dumps fresh evidence markdown + PDF into SOC2 binder every week. Evidence: cronjob status
lastScheduleTime within last 7 days. - ✅ Chaos reports are streamed to every sprint planning; failure blast radius metrics are SLO burn record. Evidence: sprint retro ticket with chaos time + SLO burn text.
- ✅ Ad-hoc audit readiness responder playbook lives in
./evidence/root; timestamped PR reviews ready triggered by any auditor query. Evidence:audit-readiness.mdin evidence repo. - ✅ On-call rotation sign-off completed monthly; assignment spreadsheet + rotation calendar reviewed by compliance within 30 days of month-end. Evidence: calendar export PDF attached.
Quick Start If You’re Behind
Still short on boxes? Use a parachute checklist:
- SOC 2 type II immediate gap: lock down Pod Security Admission restricted, mTLS STRICT, Network Policies deny-by-default. These three flags alone reduce 80% of typical audit findings in a single PR.
- Weekend Blitz: audit current
kube-apiserverflags vs CIS v1.8, generate a single PR that enforces missing policies via Gatekeeper. Threshold: 75% box coverage before end of week. - Evidence Automation: fork
https://github.com/kubernetes-sigs/gatekeeper-compliance-evidenceand plug into your Git; CI jobs auto-mint weekly PDF+JSON; drop into SOC2 repo. Evidence: PR with cronjob artifact attached.
Call to Action: Run Your Audit Dry Run Today
Production readiness saves sign-off cycles, reduces re-audit pain, and keeps attackers out. If your SOC 2 evidence pack feels “thin” or your security review comes with a punch-list, book a free readiness pre-flight with us. We’ll run a 90-minute security gap analysis, give you a remediation roadmap, and leave you with the 58-box evidence template pre-filled for your auditor. Hit “Book a Cloud Audit” and we’ll schedule a no-pressure discovery call next week — sharp engineering, no sales.