Installation
May 21, 2026 ยท View on GitHub
This guide walks through deploying kubeseal-webgui to a Kubernetes cluster using the bundled Helm chart.
For local development on your laptop, see development.md. For a full list of tunable values, see configuration.md.
Prerequisites
- A Kubernetes cluster (1.25 or newer).
- The Bitnami Sealed Secrets controller already installed in the cluster. kubeseal-webgui does not install the controller itself; it only encrypts secrets against the controller's public certificate.
- Helm 3.8 or newer (required for the OCI installer).
kubectlconfigured for the target cluster.- An ingress controller (for
Ingress) or OpenShift (forRoute) if you want to expose the UI outside the cluster.
Install with Helm (OCI)
The chart is published as an OCI artifact to the GitHub Container Registry:
helm install kubeseal-webgui \
oci://ghcr.io/jaydee94/kubeseal-webgui/charts/kubeseal-webgui \
--namespace kubeseal-webgui \
--create-namespace
This deploys both containers (UI + API) into a single pod behind a ClusterIP
service. To reach the UI from outside the cluster, enable an ingress route or
an OpenShift route as shown below.
With an Ingress
helm install kubeseal-webgui \
oci://ghcr.io/jaydee94/kubeseal-webgui/charts/kubeseal-webgui \
--namespace kubeseal-webgui --create-namespace \
--set ingress.enabled=true \
--set ingress.hostname=kubeseal-webgui.example.com \
--set api.url=https://kubeseal-webgui.example.com
The api.url value is baked into the UI's config.json ConfigMap and tells
the browser where to reach the API. It must match the public URL the user types
into their browser.
To enable TLS, set ingress.tls.enabled=true and point ingress.tls.secretName
at a TLS secret that already exists in the release namespace.
On OpenShift (Route)
helm install kubeseal-webgui \
oci://ghcr.io/jaydee94/kubeseal-webgui/charts/kubeseal-webgui \
--namespace kubeseal-webgui --create-namespace \
--set route.enabled=true \
--set api.url=https://kubeseal-webgui.apps.example.com
Leave route.hostname empty to let OpenShift assign a hostname from the
default apps subdomain.
Sealed-Secrets certificate
The API needs the controller's public certificate to encrypt secrets. There are two ways to provide it.
Option A: Auto-fetch from the controller
helm install kubeseal-webgui \
oci://ghcr.io/jaydee94/kubeseal-webgui/charts/kubeseal-webgui \
--namespace kubeseal-webgui --create-namespace \
--set sealedSecrets.autoFetchCert=true \
--set sealedSecrets.controllerName=sealed-secrets-controller \
--set sealedSecrets.controllerNamespace=kube-system
The API container fetches the certificate from the controller on startup. The
chart's ClusterRole already grants the permissions needed to talk to the
controller. Make sure controllerName and controllerNamespace match the
actual deployment of your Sealed Secrets controller.
Option B: Provide the certificate manually
If you cannot grant the cluster-wide RBAC required by auto-fetch, fetch the certificate yourself and pass it inline:
kubeseal --fetch-cert \
--controller-name sealed-secrets-controller \
--controller-namespace kube-system \
> kubeseal-cert.pem
helm install kubeseal-webgui \
oci://ghcr.io/jaydee94/kubeseal-webgui/charts/kubeseal-webgui \
--namespace kubeseal-webgui --create-namespace \
--set-file sealedSecrets.cert=kubeseal-cert.pem
The chart renders the certificate into a Secret mounted at
/kubeseal-webgui/cert/kubeseal-cert.pem inside the API container.
Verifying the install
kubectl get pods -n kubeseal-webgui
Once the pod is Ready, port-forward and hit the API health endpoint:
kubectl port-forward -n kubeseal-webgui svc/kubeseal-webgui 8080:8080
curl http://localhost:8080/
# {"status":"Kubeseal-WebGui API"}
If you enabled an ingress or route, open the configured hostname in a browser.
Uninstalling
helm uninstall kubeseal-webgui --namespace kubeseal-webgui
This removes all Kubernetes objects created by the chart. The namespace is not deleted automatically.