Kubernetes YAML validator and visualizer
BetaPaste your manifests to see how Ingresses, Services, workloads, ConfigMaps and Secrets connect, and get a scored review of security risks and reliability gaps with a fix for each.
Runs entirely in your browser — your input is never uploaded.
Paste one or more documents separated by ---. Everything is analysed in your browser.
What the validator does
Paste any number of manifests separated by ---, including kind: List exports from kubectl get -o yaml. The tool does two things.
-
Draws the relationships. It works out how your objects connect the same way the cluster does:
- an Ingress routes to Services;
- a Service selects the pods whose labels match its selector;
- HPAs, PDBs and NetworkPolicies target workloads;
- pod specs use ConfigMaps, Secrets, PersistentVolumeClaims and ServiceAccounts.
Anything referenced but missing from the input appears as a dashed box, which is often the first clue to a 503 or a pod stuck in
CreateContainerConfigError. -
Reviews every workload. Deployments, StatefulSets, DaemonSets, Jobs, CronJobs and bare Pods are checked against security and reliability rules. Each finding has a severity, the line where the object starts, and a snippet to fix it. When the fix needs no decision from you (such as
privileged: falseor dropping all capabilities), Apply fix edits the YAML for you, keeping your comments and the other documents unchanged. Every line changed by the fixes you apply stays highlighted until you edit by hand, and Undo reverts the last fix (or all of them). Fixes that need a real value, like an image version or a health check path, stay manual.
What it checks
| Area | Checks |
|---|---|
| Security | privileged, root user, allowPrivilegeEscalation, capabilities not dropped or dangerous ones added, hostNetwork / hostPID / hostIPC, hostPath mounts (especially the container runtime socket), hostPort, missing seccomp profile, writable root filesystem, automounted service account token, passwords and tokens in plain env, Secrets committed with their values, Services exposed as LoadBalancer / NodePort |
| Reliability | missing CPU/memory requests and memory limit, missing readiness/liveness probes, single replica, replicas set alongside an HPA, no PodDisruptionBudget, Deployment selector not matching template labels, Services that select no pods, references to missing Services/Secrets/ConfigMaps, removed API versions such as extensions/v1beta1 |
| Hygiene | unpinned :latest images, objects without a namespace |
The security checks follow the Kubernetes Pod Security Standards and cover the main controls of the restricted profile. For a full guarantee, let Pod Security Admission enforce it in the cluster (see below).
Example: what the sample finds
The sample has two Deployments behind one Ingress. web is in good shape: non-root, read-only filesystem, all capabilities dropped, requests and limits set. It only gets reminders to add a liveness probe, to drop replicas now that an HPA manages it, and to add a PodDisruptionBudget.
worker shows the classic mistakes in one place:
image: acme/worker:latest # unpinned image
env:
- name: DB_PASSWORD
value: hunter2 # secret in plain text
securityContext:
privileged: true # full access to the node
volumes:
- hostPath:
path: /var/run/docker.sock # controls every container on the node
The Ingress also routes /api to a Service named api that doesn’t exist, so that path would return 503. The diagram shows it as a dashed box.
Fixing the most common findings
A pod-level and container-level securityContext that satisfies the restricted profile:
spec:
automountServiceAccountToken: false
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: app
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]
If the app writes temporary files, mount an emptyDir at /tmp instead of making the root filesystem writable. If the image’s default user is root, set runAsUser: 10001 or rebuild the image with a non-root USER.
Going further
A quick review catches most problems before they reach a cluster. To enforce the rules:
- In the cluster: label namespaces with
pod-security.kubernetes.io/enforce: restricted, or use a policy engine such as Kyverno or Gatekeeper. - Before applying: run
kubectl apply --dry-run=server -f manifests/to validate against the cluster’s real API versions and admission policies.
Frequently asked questions
- Which checks does the validator run?
- Security checks based on the Kubernetes Pod Security Standards (privileged containers, root users, privilege escalation, capabilities, host namespaces, hostPath, seccomp, secrets in plain env vars) plus reliability checks: resource requests and limits, probes, replicas, PodDisruptionBudgets, broken selectors, missing references and deprecated API versions.
- How does the diagram know what is connected?
- It follows the same rules Kubernetes does: Ingress backends name Services, Service selectors match pod template labels in the same namespace, HPAs and PDBs target workloads, and pod specs reference ConfigMaps, Secrets, PVCs and ServiceAccounts. References to objects you did not paste are drawn as dashed boxes.
- Is it safe to paste manifests that contain Secrets?
- The analysis runs entirely in your browser and nothing is uploaded. If the input contains a Secret object it is also kept out of the page URL. Even so, committed Secrets are flagged: base64 is not encryption.
- How is the score calculated?
- Every finding subtracts points by severity: 12 for high, 5 for medium, 2 for low and 0 for informational notes. 90 or more is an A, 75 a B, 60 a C and 40 a D. It is a quick health signal, not a compliance verdict.
- Does this replace kube-score, Polaris or admission policies?
- It covers the most common findings of those tools for a quick review before you commit. For enforcement, run a policy engine such as Kyverno, Gatekeeper or the built-in Pod Security Admission in the cluster and a linter in CI.
Related tools
Kubernetes manifest generator
Generate a Kubernetes Deployment and Service with resources, probes and a hardened securityContext, plus optional Ingress and HPA.
KubernetesYAML ⇄ JSON converter
Convert YAML to JSON and back with exact error positions, anchor and merge-key expansion, and warnings for YAML 1.1 gotchas like the Norway problem.
Kubernetesdocker run to Docker Compose converter
Convert docker run commands into a clean compose.yaml: ports, volumes, env, networks, healthchecks and limits. Runs in your browser.
Docker
Last updated · More Kubernetes tools