feat(auth): Authentik en hub utilisateur public — SSO de bout en bout (#82)

L'entrée unique devient la page « My applications » d'Authentik
(kaya.freeboxos.fr:9081) : login → tuiles des apps autorisées → SSO
vers Guacamole (:9080). Plus de comptes locaux Guacamole.

- Services LoadBalancer dédiés (MetalLB .201 Authentik / .202 Guacamole) :
  le DNAT par port ne peut pas router par Host derrière Traefik :80
- gateway : DNAT 9081→.201:9000 et 9080→.202:8080 + rate-limit par VIP
- Guacamole : endpoints OIDC sur l'URL publique canonique (LAN inclus,
  hairpin Freebox) + retour au SSO direct (openid prioritaire)
- doc : section « Accès externe » réécrite (hub, chaîne, config provider)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
ALI YESILKAYA 2026-07-07 11:25:56 +02:00 committed by GitHub
parent cf09e404ef
commit 5a4190faaa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 92 additions and 40 deletions

View file

@ -9,3 +9,21 @@ spec:
ports:
- port: 9000
targetPort: 9000
---
# VIP MetalLB dédiée — exposition Internet via DNAT s01 (kaya.freeboxos.fr:9081).
# Bypass Traefik : le DNAT par port ne peut pas router par Host derrière un
# entrypoint unique.
apiVersion: v1
kind: Service
metadata:
name: authentik-external
namespace: auth
annotations:
metallb.io/loadBalancerIPs: 192.168.10.201
spec:
type: LoadBalancer
selector:
app: authentik-server
ports:
- port: 9000
targetPort: 9000

View file

@ -42,28 +42,30 @@ spec:
# Servir sur / plutôt que /guacamole
- name: WEBAPP_CONTEXT
value: "ROOT"
# --- SSO OIDC → Authentik (app « guacamole » à créer dans l'UI Authentik) ---
# Endpoints navigateur : via l'IngressRoute ; JWKS : appel serveur→serveur,
# on passe par le Service interne pour ne pas dépendre du DNS lab.local des pods
# --- SSO OIDC → Authentik (app « guacamole » dans l'UI Authentik) ---
# Endpoints navigateur : URL publique kaya.freeboxos.fr (une seule URL
# canonique, LAN inclus — hairpin NAT Freebox) ; JWKS : appel
# serveur→serveur via le Service interne
- name: OPENID_AUTHORIZATION_ENDPOINT
value: "http://auth.lab.local/application/o/authorize/"
value: "http://kaya.freeboxos.fr:9081/application/o/authorize/"
- name: OPENID_JWKS_ENDPOINT
value: "http://authentik.auth.svc.cluster.local:9000/application/o/guacamole/jwks/"
- name: OPENID_ISSUER
value: "http://auth.lab.local/application/o/guacamole/"
value: "http://kaya.freeboxos.fr:9081/application/o/guacamole/"
- name: OPENID_CLIENT_ID
value: "guacamole"
- name: OPENID_REDIRECT_URI
value: "http://portail.lab.local/"
value: "http://kaya.freeboxos.fr:9080/"
- name: OPENID_USERNAME_CLAIM_TYPE
value: "preferred_username"
- name: OPENID_SCOPE
value: "openid profile email"
# Formulaire local en premier : requis pour l'accès Internet
# (kaya.freeboxos.fr:9080 — comptes locaux Guacamole, Authentik n'étant
# pas exposé). Le lien « OpenID » reste dispo pour le SSO depuis le LAN.
# SSO direct : Authentik est le hub utilisateurs (page « My applications »,
# exposée en :9081) — arriver sur Guacamole = redirection immédiate vers lui.
# guacadmin inaccessible : l'admin passe par le compte SSO « Administer
# system » (Alkatrazz). Dépannage sans Authentik : "*, openid" + re-sync.
- name: EXTENSION_PRIORITY
value: "*, openid"
value: "openid, *"
- name: TZ
value: "Europe/Paris"
resources:

View file

@ -7,7 +7,7 @@ spec:
entryPoints:
- web
routes:
- match: Host(`portail.lab.local`) || Host(`kaya.freeboxos.fr`)
- match: Host(`portail.lab.local`)
kind: Rule
services:
- name: guacamole

View file

@ -9,3 +9,19 @@ spec:
ports:
- port: 8080
targetPort: 8080
---
# VIP MetalLB dédiée — exposition Internet via DNAT s01 (kaya.freeboxos.fr:9080)
apiVersion: v1
kind: Service
metadata:
name: guacamole-external
namespace: auth
annotations:
metallb.io/loadBalancerIPs: 192.168.10.202
spec:
type: LoadBalancer
selector:
app: guacamole
ports:
- port: 8080
targetPort: 8080