Prerequisites
- A Kubernetes cluster reachable from your team’s browsers (1.27+).
- A Postgres instance reachable from that cluster (requirements).
- A DNS record pointing at the cluster’s Ingress, with a TLS cert.
- A Skyhook-issued license JWT (your account team mints one at signing).
- A 32+ byte secret for sealing session cookies. Generate with
openssl rand -base64 48.
1. Add the chart repo
2. Decide on a Postgres source
Pick one of three patterns. Examples below all use--set for clarity; production should land these in a values.yaml you check in (excluding secrets).
- Managed (RDS / Cloud SQL / etc.)
- CloudNativePG
- Inline DSN (eval only)
Easiest. Drop the DSN into a Secret you provision yourself, then point the chart at it.
3. Install
A representative invocation:- Helm renders the manifests and creates the chart-managed Secret.
- The
radar-hubPod starts. ItsmigrateinitContainer runs/migrateagainst your Postgres and applies any pending schema migrations transactionally before the mainhubcontainer starts. - Once migrations finish, the main
hubandradar-hub-webcontainers come up. The control plane logs license-verification status on first start (look forlicense verifiedorlicense is expired (warn-only ...)orlicense verification failed). - The control plane’s first-boot probe says
self-hosted install detected with no orgs yet- that’s expected; the singleton org gets created on your first break-glass login.
4. First sign-in
Openhttps://radar.acme.example in a browser. The login page renders the break-glass form when no OIDC is configured (and a “Sign in with SSO” button when it is).
Sign in with the email + password you set in step 3. The control plane:
- Creates the singleton org (named from
--set hub.orgName=..., defaultDefault). - Records you as the org’s first owner.
- Sets the sealed session cookie and redirects you to the web app.
5. Connect your first cluster
Same as Cloud:rhc_*) as Cloud.
6. (Optional) Add OIDC
Once break-glass is verified working, layer OIDC on top:auth.breakGlass.email is set.
See Authentication for IdP-specific recipes.
7. (Optional) Pin to a specific image tag
The chart defaults images toappVersion. Pin explicitly when you need to stage an upgrade:
Common gotchas
HUB_COOKIE_PASSWORD must be at least 32 bytes- the value passed tohub.cookiePasswordis shorter than 32 ASCII characters. Useopenssl rand -base64 48.- OIDC redirect URI mismatch - your IdP must have
https://<hub.publicURL>/api/auth/oidc/callbackregistered as an exact match. No path normalization. postgres: set one of postgres.dsn, postgres.existingSecret, or postgres.cnpg.cluster- the chart fails fast at templating time when zero Postgres options are set. Pick one.- Migrate initContainer stuck pulling - the hub Pod stays in
Init:status. Checkkubectl describe podfor image-pull errors against your registry mirror. - Control plane logs
license verification failed- confirm the JWT was pasted whole (no whitespace) and the build was cut against the matching public key. See Licensing.