# Kubernetes Workload Hardening

`kubernetes/workload-hardening` · Skill · v1.0.0

Production Kubernetes 1.34-1.37 workloads that pass Pod Security restricted, really start, shut down cleanly and survive drains.

Teaches an agent to write and fix Deployment, StatefulSet, Job and CronJob manifests as Kubernetes works in late 2026 (1.37): the Pod Security Standards restricted profile control by control on every init, sidecar and ephemeral container, seccompProfile instead of the removed annotations, the kubelet's runAsNonRoot check that rejects images whose USER is a name or unset, read-only root filesystems with emptyDir scratch space, probes that do not cascade, preStop delays that work in distroless images (the sleep action, GA 1.34) with grace periods that cover them, PodDisruptionBudgets that let drains finish (maxUnavailable and unhealthyPodEvictionPolicy, GA 1.31), HPA autoscaling/v2 with requests on every container, topology spread, native sidecars for Jobs (GA 1.33) and the API versions 1.37 no longer serves. Rules were ported from the v1.37.2 source and reproduced on a 1.37 cluster.

## Verdict

- level: **submitted** — In the catalog, not yet checked for this digest.
- uplift: **untested** — No runs exist for this digest.
- digest: `sha256:4a77fdb5b1a20dfd6084910135199031a01b569bef6c8910c4c80e4e6dd1aa89`

## Uplift runs

None for this digest. Untested is not the same as useless: nobody has measured it yet.

## Security

No checks recorded for this digest.

## Compatibility

| agent | targeted | compiled | evaluated |
| --- | --- | --- | --- |
| Claude Code | yes | no record | no record |
| Codex | yes | no record | no record |
| Cursor | yes | no record | no record |
| GitHub Copilot | yes | no record | no record |
| Gemini CLI | yes | no record | no record |
| OpenCode | yes | no record | no record |

## Permissions

- network: none
- shell: kubectl, kubeconform, docker image inspect
- filesystem: write
- env: none

## Files

- `SKILL.md` 18891 B sha256:691fb58e8b4a4f4d19dad58fad4ae3607cc62340a662aa2eddbbba90296960f5
- `references/api-versions.md` 4321 B sha256:50a88b8231febdf311ccc87970f5400986274caac135606ddafea69af2b4a924
- `references/availability.md` 5934 B sha256:85b3d17400816c03c6057751939eec93472f0487fb30f29193ab1e649ac13e09
- `references/pod-security-restricted.md` 6395 B sha256:17fed1efdb6c52774b4f7efc4638aae1da214a0cdead2b836fae527f7dff735a
- `references/shutdown-and-probes.md` 5186 B sha256:efa33e2188787eb1511b624c9fb9b4fe177f71235a16b578a377da6c4cc5a4ec
- `references/sidecars-and-jobs.md` 3793 B sha256:c5bbb5d10fea02da3eb0b196621a081c480d53326da6dfaf2e1ffa3f2e93e9bd
- `references/sources.md` 7088 B sha256:bfec8be1f615aecfed33a99a1d1e06a1938798ecd3e73e9f5a32d5c00661ab2c

## Limitations

- Written for upstream Kubernetes 1.34 to 1.37 as of November 2026. Managed platforms can add admission policies (GKE Autopilot, OpenShift SCCs, Kyverno or Gatekeeper rules) that are stricter than Pod Security Admission.
- Plain manifests only. Helm charts and Kustomize overlays are covered only through the YAML they render.
- The kubelet runAsNonRoot and preStop behaviour was measured with containerd (k3s v1.37.1); CRI-O and Windows nodes were not tested.
- Endpoint propagation delays depend on the ingress controller, kube-proxy mode and cloud load balancer; the skill gives the budget arithmetic, not the right number for a given cluster.
- The proof suite measures Pod Security restricted plus image users, PDB and HPA behaviour, and shutdown in a distroless image. Topology spread, probes and Job sidecars are taught but not scored.

## Install

```sh
npx sigil add kubernetes/workload-hardening --agent claude-code,codex,cursor
```

Source: https://github.com/dgesteves/sigil/tree/5cb851d5b2f2f14446ddf631ef5e91bf9d3263dd/catalog/skills/kubernetes/workload-hardening