Saltar a contenido

Authentik

Proveedor de identidad (IdP) del homelab: SSO/autenticación centralizada para los servicios que no tienen login propio.

Resumen

Authentik es el IdP que da login único (SSO) a los servicios del homelab. Centraliza usuarios y grupos de la familia: login con Google OAuth (whitelist de emails) más una cuenta local akadmin (admin de respaldo). Dos grupos: familia (usuarios) y admins (administradores). Homepage está protegido por SSO OIDC (grupos familia + admins) y Grafana por SSO OIDC (grupo admins).

Estado

Campo Valor
Estado Operativo
Argo CD Application authentik
Namespace authentik

Despliegue

Campo Valor
Método Helm chart (multi-source: chart + config)
Chart / imagen authentik@2026.8.1
Origen https://charts.goauthentik.io
Config en el repo clusters/luka/apps/authentik/ y clusters/luka/config/authentik/

Red

Campo Valor
Service authentik-server (ClusterIP)
IP —
URL interna https://auth.local.gorkarevilla.com
URL externa https://auth.gorkarevilla.com (túnel cloudflared homelab)
TLS interno: cert-manager wildcard *.local.gorkarevilla.com; externo: Cloudflare edge

Acceso y usuarios

  • Usuarios/roles: login Google OAuth con whitelist de emails (match por email, sin enrollamiento abierto). Usuarios hardcoded en el blueprint: gorkarevilla@gmail.com → grupos familia + admins; mirenmorillo@gmail.com → grupo familia. akadmin local (contraseña, grupo admins) es el admin de emergencia: funciona sin internet (cuando el SSO de Google no), para acceder por .local si el exterior cae.
  • Credenciales: en el Secret VKS authentik-config (ns authentik), que incluye AUTHENTIK_SECRET_KEY, la password de la DB y la de akadmin. Nunca el secreto en claro aquí.

Configuración

  • Chart authentik 2026.8.1, server + worker replicas: 1, outpost embebido (auto-gestionado). Sin Redis: authentik usa PostgreSQL para cola de tareas y sesiones.
  • Config y secretos en un único Secret VKS authentik-config, referenciado con authentik.existingSecret.secretName (el chart lo monta como envFrom).
  • PostgreSQL en el cluster CNPG authentik-db (BD/owner authentik).
  • Blueprints en Git (clusters/luka/config/authentik/blueprints.yaml): fuente Google (whitelist), usuarios hardcoded, providers de Grafana y Homepage (OIDC), grupos familia/admins y bindings.
  • Gotcha OIDC (Authentik 2026.8+): los providers oauth2provider deben declarar grant_types explícitamente (p. ej. authorization_code, refresh_token). Si se omite (lista vacía), el flujo authorization_code falla con Invalid grant_type for provider — en el cliente se ve como error=Callback (NextAuth) o similar.
  • La ruta externa (auth.gorkarevilla.com) entra por el entrypoint web (HTTP plano, TLS en Cloudflare edge). Para evitar mixed content, el middleware Traefik authentik-external-https fuerza X-Forwarded-Proto: https en esa ruta (Authentik genera sus URLs absolutas a partir de ese header).

Almacenamiento

  • — (sin PVC propio). La base de datos vive en el cluster CNPG authentik-db (Longhorn, replica=2).

Dependencias

  • Depende de: k3s, CloudNativePG (authentik-db), Traefik, cert-manager, VKS (secrets), cloudflared (externo).
  • Usado por: Homepage (OIDC), Grafana (OIDC SSO).

Backup y recuperación

  • La DB (authentik-db) tiene backup operativo vía CloudNativePG (Barman Cloud → R2, base diario 02:00 + WAL/PITR, retención 30 días). Ver docs/runbooks/cnpg-backup-restore.md.

Monitorización

  • Métricas Prometheus en el pod server (:9300/metrics), scrapeadas vía PodMonitor authentik en clusters/luka/config/servicemonitors/authentik.yaml.

Referencias

  • https://goauthentik.io/
  • Chart: https://charts.goauthentik.io
  • Repo: https://github.com/goauthentik/authentik

Notas / TODO

  • Email/SMTP pendiente (recuperación de cuenta, invitaciones).
  • Proteger pgAdmin, Longhorn y Argo CD con Authentik (servicio a servicio).