Deploy Authentik Identity Provider
Replace Dex with Authentik as the SSO identity provider. Authentik is the source of truth for user identity in BlumeOps. Users are created and managed in Authentik; services authenticate against it via OIDC.
Architecture Decisions
| Decision | Choice | Rationale |
|---|---|---|
| Identity model | Authentik is source of truth | Central user/group management, not Forgejo-upstream like Dex |
| Cluster | ringtail (k3s) | IdP independent of main services cluster, same as Dex |
| Database | CNPG blumeops-pg on indri | Cross-cluster via Caddy L4 (pg.ops.eblu.me), no new operator needed |
| Redis | Co-deployed in authentik namespace | Required for caching/sessions/task queue |
| Containers | Nix-built (dockerTools.buildLayeredImage) | Supply chain control, consistent with Dex/ntfy pattern |
| Manifests | Kustomize (no Helm) | Consistent with all other BlumeOps services |
| Networking | Tailscale Ingress + Caddy reverse proxy | Same pattern as Dex |
| IaC | Authentik Blueprints (YAML in ConfigMap) | GitOps-native, config stored in repo |
Deployment Process
- Build a Nix container image — Authentik needs
coreutilsandbashInteractivealongside the main package; the entrypoint wrapper must symlink built-in blueprint directories so custom blueprints coexist with defaults - Create secrets in 1Password (secret key, DB credentials, OIDC client secrets)
- Provision a dedicated database and managed role on the shared CNPG cluster
- Deploy server, worker, and Redis as separate deployments
- Wire ExternalSecret to pull config from 1Password
- Add Tailscale Ingress and Caddy reverse proxy entries
- Complete the first-run wizard manually (creates admin account)
- Migrate OIDC clients via Blueprints, then decommission the old IdP
URLs
- Admin: https://authentik.ops.eblu.me/if/admin/
- Tailscale: https://authentik.tail8d86e.ts.net
Related
- authentik — OIDC identity provider
- federated-login — How authentication works across BlumeOps
- adopt-oidc-provider — Dex deployment plan (completed)
- ringtail — Target cluster
- agent-change-process — C2 methodology used for this change