Start a project

Tool 144 of 194 · Architecture

Kubernetes Manifest Linter

Catch the manifest mistakes that only show up in the cluster: a Service that selects nothing, a probe on the wrong port, a container running as root.

Kubernetes Manifest Linter

Manifests

Check groups

    Findings

    ObjectLineCheckFindingHow to fix it

    Resource graph

    Arrows run from Services and Ingresses to what they route to, from workloads to the ServiceAccounts, ConfigMaps, Secrets and claims they use, and from autoscalers and disruption budgets to their targets. Grey boxes are referenced but missing from these manifests; a dashed arrow means the reference may live elsewhere in the cluster, a red one means traffic has nowhere to go.

    Run it in CI

    kube-linter config
    Annotations to accept a finding

    Export

    Findings as CSV

    The checks are kube-linter 0.8.3's, with its own messages. Every finding was compared with the kube-linter binary on 791 real manifests from kubernetes/examples, the Kubernetes documentation and microservices-demo, plus 1,808 variations, with no differences.

    01

    What it does

    Runs kube-linter's checks on your Kubernetes manifests in the browser, with the same messages, and draws how Services, workloads and their dependencies connect.

    • kube-linter 0.8.3's 31 default checks and 10 more you can turn on, with its exact messages
    • Selectors that miss their pods, Services with no pods and ports or ServiceAccounts that don't exist
    • Probes on ports the container doesn't expose, and missing probes, CPU requests and memory limits
    • Root users, privilege escalation, writable root filesystems, NET_RAW and sensitive host mounts

    02

    Private by design

    Everything happens in your browser. Nothing you type, paste or upload is sent anywhere, and it keeps working offline once the page has loaded.

    03

    What you get

    Findings with line numbers and fixes, a resource graph, a kube-linter config and a CSV, with a Copy and a Download button on every result.

    • Kubernetes
    • YAML
    • Security

    Why it matters

    kubectl apply accepts plenty of manifests that are wrong. A Service whose selector doesn't match the pod labels routes traffic nowhere. A liveness probe on a port the container doesn't listen on restarts it forever. A container with no securityContext runs as root with a writable filesystem. None of these is a syntax error, so they ship.

    This tool runs kube-linter's checks on your manifests in the browser. It reads YAML the way Kubernetes does, decodes each object into the real API types, then checks selectors, probes, resources, security settings, images and disruption budgets. Each finding shows kube-linter's message, the line, and a fix. The resource graph shows what each object points at, so a dangling Service or a missing Secret stands out.

    How to use it

    1. Paste your manifests, or choose a YAML file.
    2. Pick kube-linter's defaults or all 41 checks, and turn off groups you don't need.
    3. Fix the red findings first: security, host access and wiring.
    4. Copy the config to run the same checks with kube-linter in CI.

    FAQ

    Is this the same as kube-linter?

    It runs kube-linter 0.8.3's checks with the same parameters and messages. Every finding was compared with the kube-linter binary on 791 real manifests and 1,808 variations, with no differences, including which documents it can't read.

    Why does it say a document can't be read?

    kube-linter decodes each object into the Kubernetes API types. A label value like 1 instead of “1”, a port written as a string or a missing kind makes the whole document fail, and kube-linter skips it silently. This tool says which line and why.

    How do I accept a finding?

    Add the annotation ignore-check.kube-linter.io/<check> to the object, with the reason as its value. The tool writes these for you, and honours them like kube-linter does.

    Does it support Helm charts or Kustomize?

    Paste the rendered output: helm template or kustomize build. Templates with {{ }} aren't valid YAML until they're rendered.

    Are my manifests uploaded?

    No. They're parsed and checked in your browser.

    Credits and licences

    Checks and messages ported from kube-linter 0.8.3 (Apache License 2.0, StackRox), field types from k8s.io/api 0.35.2 (Apache License 2.0), YAML parsed with yaml 2.9.1 (ISC License, Eemeli Aro).

    Work with me

    Want a site that gets these right?

    I build fast, accessible websites and web apps that pass these checks from day one. Tell me about your project and I'll reply personally with honest next steps.

    All developer tools · Back to leej.uk