DevOps Tools — self-service Kubernetes portal: logs, metrics, restarts, secrets, Helm
287
A self-service portal for Kubernetes. Developers read logs and metrics, restart workloads, edit secrets and manage Helm releases — in the namespaces their role allows, without being given access to the cluster.
| Pods | list, filter, inspect, describe, events |
| Logs | live tail with filters; history from Loki, including pods that are gone |
| Metrics | CPU, memory and JVM graphs from Prometheus |
| Restarts | rolling restart with progress, and a plain explanation when it is stuck |
| Secrets | browse, view, edit, create — every read audited |
| Helm | releases, history, rollback, uninstall |
Metrics and log history are optional; leave them unconfigured and those sections do not appear.
helm install devops-tools oci://registry-1.docker.io/1kcsd/devops-tools \
--version 0.27.3 --namespace devops-tools --create-namespace \
--set config.auth.bootstrapAdmins.passwordLogin.password='choose-one'
The chart is published beside the image, in this same repository — --version
is the chart's, and it moves independently of the image tag. helm show values oci://registry-1.docker.io/1kcsd/devops-tools --version 0.27.3 prints every
setting with its documentation.
That password is the only thing an install has to decide. It belongs to
admin — the administrator account, which always has full access whatever the
portal's own model says. Use it for the first sign-in, and on the day the
identity provider is unreachable. Nothing ships with a default password: the
install fails rather than starting a portal anyone could walk into.
Then reach it and sign in as admin:
kubectl -n devops-tools port-forward svc/devops-tools 8080:80
The identity provider — local accounts, ldap (Active Directory, OpenLDAP)
or oidc (Keycloak, Dex, Okta, Authentik) — establishes only who someone is.
Roles are assigned inside the portal:
developer:
namespaces:
- namespace: payments-dev
operations: [logs, describe, metrics, pod-restart, secret-list]
Roles are read on every request rather than carried in the session token, so revoking one takes effect immediately. Everyone signing in for the first time arrives with no access at all.
Settings come from application.yaml in /config — the chart renders it from
your values. Credentials come from the environment, never from that file:
DEVOPS_TOOLS_BOOTSTRAP_PASSWORD | the administrator password described above |
DEVOPS_TOOLS_SESSION_KEY | key the portal signs its own session tokens with |
DEVOPS_TOOLS_LDAP_BIND_PASSWORD | password of the account that searches the directory |
CONSUL_HTTP_TOKEN, GITLAB_TOKEN | only with those integrations enabled |
The chart sets all of these for you, from values or from Secrets you name.
Distroless: a static Go binary with the web interface built into it — no separate frontend, reverse proxy or database. Around 60 MB.
| Port | 8080, HTTP. /healthz for probes |
| User | 65532:65532, non-root, no shell |
| Storage | a writable volume for who signed in and what they were granted, default /data/devops-tools.json |
| Kubernetes | a ServiceAccount with the permissions the portal is meant to offer — it can never do more than that account can |
Tags follow the chart's appVersion. There is no latest: which version a
cluster runs should be written down, not whatever was pushed last.
Content type
Helm
Digest
sha256:62ba6f887…
Size
14.8 kB
Last updated
4 days ago
helm pull oci://registry-1.docker.io/1kcsd/devops-tools --version 0.27.6