Kubernetes manifest quality review
Skill Raishin/vanguard-frontier-agentic/skills/qa/kubernetes-manifest-quality-review
Use this skill when the user provides raw Kubernetes YAML manifests or asks to review K8s manifests for quality, security, or policy compliance — covering Deployment, StatefulSet, DaemonSet, Service, Ingress, NetworkPolicy, RBAC, and CRD resources.From its SKILL.md
npx -y skills add Raishin/vanguard-frontier-agentic --skill kubernetes-manifest-quality-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 20 stars20 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.9 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
Kubernetes Manifest Quality Review
Purpose
This skill reviews raw Kubernetes YAML manifests for quality, security, and policy-compliance defects. It covers Deployment, StatefulSet, DaemonSet, Service, Ingress, NetworkPolicy, RBAC, and CRD resources. The review is entirely static — it reads YAML files and never applies manifests to a cluster, never contacts the Kubernetes API, and never requests kubeconfig, service account tokens, or cloud credentials.
Lean operating rules
Schema and structure
apiVersionorkindmissing — CRITICAL: the manifest cannot be applied; flag and stop review of that resource.- Deprecated API versions (e.g.,
extensions/v1beta1,networking.k8s.io/v1beta1,policy/v1beta1PodSecurityPolicy) — HIGH: these will be rejected by newer clusters. - Missing required labels (
app,app.kubernetes.io/name,app.kubernetes.io/version) on Pods and workload controllers — MEDIUM: impairs observability, selector targeting, and policy enforcement. - No
namespacespecified (reliance on default namespace) — MEDIUM: encourages lateral movement and policy bypass; everything should be explicitly namespaced.
Pod security (Pod Security Standards)
securityContext.runAsRoot: trueon a container, or norunAsNonRoot: trueat pod or container level — HIGH: processes run as UID 0 inside the container.privileged: trueon a container security context — CRITICAL: the container has near-host-root access.allowPrivilegeEscalation: trueor field absent (it defaults totrueunlessprivileged: falseis set) — HIGH: child processes can gain more privileges than the parent.hostNetwork: true,hostPID: true,hostIPC: trueon the pod spec — CRITICAL: the pod shares the host network stack, process table, or IPC namespace, enabling broad host compromise.capabilities.addcontainingSYS_ADMIN,NET_ADMIN,ALL,SYS_PTRACE, orDAC_OVERRIDE— CRITICAL: these capabilities provide near-root privilege; drop all capabilities and add only what is specifically required.readOnlyRootFilesystem: falseor field absent on a container — MEDIUM: a writable root filesystem makes container compromise easier; set totrueand useemptyDiror volume mounts for mutable paths.seccompProfileabsent at pod or container level — MEDIUM: no syscall filtering, increasing the kernel attack surface; useRuntimeDefaultor a custom profile.
Image hygiene
- Image tag is
:latestor absent — HIGH: non-reproducible deployments; a rollout can silently pull a different image than what was tested. - No image digest pinning for production manifests — MEDIUM: tag mutability allows supply-chain substitution; prefer
image@sha256:<digest>. - Image pulled from an unverified public registry (e.g., Docker Hub) with no
imagePullPolicy: IfNotPresentor digest — MEDIUM: arbitrary public images without integrity verification.
Resource governance
resources.requestsandresources.limitsboth absent on a container — HIGH: the container is unschedulable on resource-constrained nodes and can starve co-located workloads.- Memory limit set without a CPU limit — MEDIUM: CPU throttling surprise; the container can be throttled heavily with no visible error.
- Ephemeral storage limit absent on containers known to produce logs or temp files — LOW: unbounded ephemeral storage can exhaust node disk and evict other pods.
Health probes
livenessProbemissing — HIGH: the kubelet cannot detect application deadlocks or crash-loop conditions and restart the container.readinessProbemissing — HIGH: the endpoint controller sends traffic to the pod before the application is ready, causing errors during startup and rolling updates.- Probe using
execcommand with notimeoutSecondsspecified — MEDIUM: exec probes default to a 1-second timeout; a slow command silently causes probe failures and restarts.
Networking and exposure
- Service type
LoadBalancerorNodePortwithout a comment or annotation documenting the business justification — MEDIUM: these expose services externally or on every node port; ClusterIP is sufficient for internal services. - Ingress resource with no TLS block configured — HIGH: traffic between the client and the ingress controller is unencrypted.
- No
NetworkPolicyresource restricts pod ingress or egress in the namespace — MEDIUM: the default Kubernetes network model is allow-all; without a NetworkPolicy every pod can reach every other pod. - Ingress annotation
nginx.ingress.kubernetes.io/use-proxy-protocolor similar annotation that forwards arbitrary upstream headers into backend requests from untrusted input — CRITICAL: enables SSRF and header injection.
RBAC and service accounts
ClusterRolewith verb*on resource*or onsecrets— CRITICAL: any principal bound to this role has full cluster read/write access.RoleBindingorClusterRoleBindingwhose subject issystem:anonymousorsystem:unauthenticated— CRITICAL: unauthenticated callers inherit these permissions.automountServiceAccountToken: true(or field absent, which defaults totrue) on pods that do not contact the Kubernetes API — HIGH: the token is mounted at a known path and exploitable if the container is compromised.- RBAC role granting
getorlistonsecretsbeyond what the workload demonstrably needs — HIGH: broadens blast radius of a credential compromise.
Secrets and config
- Plaintext credentials (passwords, tokens, connection strings) in
env.valueon a container or inConfigMap.data— CRITICAL: credentials visible in manifests committed to source control or stored in etcd in plaintext. Secretwithtype: Opaqueand a base64-encoded value that decodes to an empty string — MEDIUM: placeholder secret that will cause application startup failures and suggests secrets management is not wired up.
References
Load these only when needed:
- Workflow and output contract — use when executing the full review or formatting the final answer.
Response minimum
Return, at minimum:
- Schema and API version findings
- Pod security findings (PSS Restricted/Baseline comparison)
- Image hygiene findings
- Resource governance findings
- Health probe findings
- Networking and exposure findings
- RBAC and service account findings
- Secrets and config findings
- Severity-labelled finding list (CRITICAL / HIGH / MEDIUM / LOW)
- Safe next actions
What ships with it: 2 files
8.3 KB alongside SKILL.md
references/
- workflow-and-output.md6.7 KB
- metadata.json1.6 KB