AKKO Cockpit¶
Aperçu¶
Le Cockpit AKKO est le point d'entrée unique de la plateforme : une
application web monopage (SPA) React qui offre à chaque utilisateur une vue
adaptée à son rôle, limitée aux couches qu'il a le droit d'utiliser. Il est
servi sur demo.<domaine> derrière le SSO de la plateforme, et chaque lien de
service ou page embarquée est filtré par la même source de politique que celle
qui garde l'outil sous-jacent.
Le cockpit est bâti comme un ensemble d'îlots React (ADR-074, migration
strangler-fig) vivant dans branding/cockpit-react/. Il remplace l'ancien
portail nginx + JavaScript vanilla : il n'y a plus de proxy de santé ni de
fichiers statiques index.html/app.js à éditer.
Architecture¶
Navigateur ──→ Traefik (:443, hôte demo.<domaine>)
│ middleware ForwardAuth
▼
oauth2-proxy ──→ /auth-check ──→ Keycloak (SSO)
│ (200 = authentifié, en-têtes d'identité injectés)
▼
SPA React du Cockpit (nginx sert le build statique)
├── src/platform/catalog.ts (couches + capacités + rôles)
├── src/features/<x>/ (un dossier par page)
├── src/session/SessionProvider (gating canSeeCap)
└── src/app/App.tsx (routes hash /x/<slug>)
Le nginx du pod cockpit ne fait que servir le build statique et exposer le pont
/auth-check qui convertit un 401 d'oauth2-proxy en redirection 302. Il ne
relaie plus les points de santé des services : la santé par tuile est récupérée
depuis le backend du cockpit, et l'accès à chaque service est appliqué par le
ForwardAuth de Traefik plus le moteur de politique propre au service.
Accès¶
Accédez au cockpit sur https://demo.<domaine> (par exemple
https://demo.akko-ai.com). L'hôte d'ingress est dérivé de global.domain via
le helper akko.fqdn.cockpitReact (demo.<domaine>) et peut être surchargé
avec akko-cockpit-react.ingress.host.
Filtrage adapté au rôle¶
Chaque couche et capacité est déclarée dans src/platform/catalog.ts avec une
liste roles et un kind (integrated = une page dans la SPA, external =
une UI dédiée ouverte dans un nouvel onglet). La visibilité est dérivée par
canSeeCap(cap, role, toolAccess) dans src/session/SessionProvider, qui lit
la même matrice d'accès aux outils que celle qui pilote la porte OPA
(ADR-075). La barre latérale (src/shell/Sidebar.tsx) et la grille d'accueil
(src/features/home) filtrent toutes deux leurs tuiles via canSeeCap :
l'utilisateur ne voit jamais un lien vers un outil auquel il n'a pas droit. Il
n'y a pas de sélecteur de rôle côté client : le rôle provient de la session SSO
vérifiée.
Fonctionnalités clés¶
- Accueil par couche : services groupés par couche (Calcul, Requêtage, Stockage, Analyse & restitution, IA, Gouvernance, ...), chaque tuile portant un statut de santé et un lien direct, filtré par rôle
- Pages intégrées : fonctionnalités gouvernées rendues dans le cockpit comme
routes React : ADEN (
/x/aden), NORA (/x/nora), RAG (/x/rag), modèles IA (/x/litellm), supervision (/x/monitoring), audit (/x/audit), usage (/x/usage), DevHub (/x/devhub), sources (/x/sources), rôles data (/x/data-roles), rôles plateforme (/admin/platform-roles) - Bilingue (FR/EN) : chaque fonctionnalité fournit un dictionnaire
i18n.ts; les chaînes vivent à côté de la fonctionnalité, jamais codées en dur dans le JSX - Deux thèmes : clair et sombre, pilotés par les jetons du design-system
sous
src/design-systemetsrc/theme
Chart Helm¶
Le cockpit est déployé via le sous-chart akko-cockpit-react :
helm/akko/charts/akko-cockpit-react/
├── Chart.yaml
├── values.yaml
├── Dockerfile # multi-étage : build vite → image nginx statique
└── templates/
├── deployment.yaml
├── service.yaml
├── configmap-nginx.yaml # service statique + pont /auth-check
├── ingress.yaml # hôte demo.<domaine>
├── ingress-oauth2.yaml # routes oauth2-proxy (évite les boucles)
└── networkpolicy.yaml # aller-retour ForwardAuth + appels backend
Valeurs clés¶
akko-cockpit-react:
image:
repository: akko-cockpit-react
tag: "2026.06"
ingress:
enabled: true
host: "" # vide → demo.<global.domain>
Dépannage¶
Problèmes courants
- Boucle de redirection après connexion/déconnexion : le cockpit porte
le ForwardAuth de la plateforme. Vérifiez que les routes de
ingress-oauth2.yamlsont appliquées et que le client Identité (Keycloak)akko-oauth2-proxya la bonne URI de redirection (https://demo.<domaine>/oauth2/callback). - Tuiles absentes pour un utilisateur : attendu quand le rôle de
l'utilisateur n'a pas accès à cet outil. La visibilité est dérivée de la
matrice d'accès aux outils (
canSeeCap, ADR-075) ; vérifiez le mapping groupe→rôle de l'utilisateur plutôt que l'UI. - Page blanche : vérifiez que le build statique a bien été produit (Dockerfile multi-étage) et que la ConfigMap nginx est montée ; la SPA utilise un HashRouter, donc aucune règle de réécriture nginx n'est nécessaire.