Deploy Dex OIDC identity provider with Grafana SSO #222

Merged
eblume merged 4 commits from feature/dex-oidc into main 2026-02-19 20:24:24 -08:00

4 commits

Author SHA1 Message Date
8cd2a19ea3 Fix Grafana root_url to match ops.eblu.me access domain
OAuth state cookie is set on the domain users visit (grafana.ops.eblu.me)
but Grafana was constructing callbacks from root_url (grafana.tail8d86e.ts.net),
causing "Missing saved oauth state" errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:21:50 -08:00
80698e499a Switch Dex storage from Kubernetes CRD to sqlite3
The Kubernetes CRD storage backend crashes on k3s due to a Go URL
parsing bug with the in-cluster API address. sqlite3 with emptyDir
avoids the k8s API entirely and is sufficient for single-replica Dex.
Also removes now-unnecessary RBAC resources (ServiceAccount, ClusterRole,
ClusterRoleBinding).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:16:55 -08:00
fe1c92f702 Switch Dex from static passwords to Forgejo OAuth2 connector
All checks were successful
Build Container / build (push) Successful in 3s
Build Container (Nix) / build (push) Successful in 11s
Users authenticate via Forgejo at forge.ops.eblu.me instead of a
hardcoded password list. This makes user management scale through
Forgejo's existing account system and enables future collaborator
onboarding via Forgejo accounts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:35:26 -08:00
8765ee8706 Deploy Dex OIDC identity provider on ringtail with Grafana SSO
Adds Dex as a central OIDC identity provider running on ringtail's k3s
cluster. Grafana is integrated as the first SSO client via generic_oauth.
Dex uses Kubernetes CRD storage and ExternalSecrets for all sensitive
config (bcrypt hash, client secrets from 1Password).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:18:23 -08:00