Security

What PodSteer touches, and what it does not.

PodSteer needs no account and sends no telemetry. It talks to the Kubernetes clusters your kubeconfig names, with the credentials that kubeconfig already holds — and, once a day, asks GitHub whether a newer release exists, which you can switch off. This page lists everything else it can do, so you can decide before you install it.

Every destination, and when.

Destination When Can it be turned off
The API servers your kubeconfig names While a cluster is open in a tab — Kubernetes API requests, with your credentials, through the same client library kubectl uses. Close the tab.
api.github.com Once a day, never at startup, to ask whether a newer release exists. It sends no identifier: no version, platform or machine id. Yes — Settings → Notifications, or PODSTEER_UPDATE_CHECK=false. Off means no request is made.
A Prometheus or VictoriaMetrics in your cluster Only if you enable it for that cluster, and only when you open a chart or change its range — through your API server's own proxy, never on a timer. Off by default, per cluster.
Your cloud provider, through your own CLI Only when you ask Add cluster to discover clusters. PodSteer runs the aws, az, gcloud or doctl you already have; that program contacts your provider. It never runs unless you press the button.

The interface itself has no network access at all: its content security policy permits only the application's own process, and that is enforced inside the application rather than promised here.

Read when you ask, never when a pane opens.

Kubernetes' own guidance tells cluster operators to alert on bulk Secret reads, so PodSteer never makes one to draw a screen. A Secret's values are replaced with their size before the manifest leaves the backend; revealing a key reads that one key, on your request, and hides it again after thirty seconds or when the window loses focus. Helm releases are listed from labels alone, without reading their payloads, and a revision's values are opened the same way — one deliberate step at a time.

What it writes, and where.

  • Your kubeconfig, only when you add a cluster — after a backup, atomically, and without ever changing its current context.
  • A settings file and sampled capacity history in your operating system's per-user application directory. The history holds capacity figures only — no object names, logs or manifests — for as long as you choose, including not at all.
  • Things you export: a CSV, a settings file, a file copied out of a container. Nothing is exported unless you ask.
  • A temporary three-line kubeconfig while a local terminal is open, naming only the tab's context, deleted when the terminal closes.

It can change them, with your permissions — never more.

PodSteer reads and writes: it can scale, restart, delete, apply, drain, open a shell and copy files. It enforces no permissions of its own and cannot — it is a client, and what an account may do is decided by your cluster's RBAC. Marking a cluster read-only or production in PodSteer is a guard against your own mistakes on this machine, not a permission.

Three features create something in a cluster: a node shell (a privileged pod entering a node's host namespaces), an in-cluster shell (an unprivileged pod admissible under Pod Security's restricted profile) and an ephemeral debug container. The pods are labelled as PodSteer's, deleted when their terminal closes or the application quits, and carry a one-hour deadline for the case it cannot clean up. An ephemeral container cannot be removed by anyone — that is Kubernetes, and the dialog says so.

The MCP server only reads.

podsteer mcp serves over stdio: it opens no port and listens on no network. Every tool it offers is a read — it cannot delete, scale, apply, exec, port-forward or reveal a Secret's values. An agent you start from PodSteer's local terminal is different: it runs with your credentials, and asking it to stay read-only is a request in its prompt, not a restriction. More about the MCP server →

How to know the download is ours.

  • macOS: signed with an Apple Developer ID, notarised, and the notarisation ticket stapled — Gatekeeper opens it without a prompt.
  • Windows: not signed yet, so SmartScreen warns on first launch. That is the absence of a certificate, not a verdict about the file.
  • Linux: a zip, unsigned.
  • Every release publishes SHA-256 checksums and a CycloneDX SBOM. Verify against the checksums rather than taking our word.
  • Every shipped dependency is permissively licensed, and the build fails if that stops being true. The whole application is Apache-2.0: read the source before you trust it with a production kubeconfig.

Reporting a vulnerability.

Please report security issues privately, as described in the security policy, which also sets out in full what PodSteer can do and what counts as a vulnerability. For how the website treats your visit, see Privacy.