AKKO Cockpit¶
Aperçu¶
Le Cockpit AKKO est le portail de découverte de services et tableau de bord opérationnel de la plateforme. Construit avec nginx, HTML et JavaScript vanilla, il fournit une vue unifiée de tous les services avec des vérifications de santé en temps réel, des liens d'accès rapide et des indicateurs clés de performance.
Architecture¶
Navigateur ──→ Traefik (:443)
│
▼
Cockpit (nginx :80)
├── index.html (cartes de services, DevHub)
├── app.js (polling santé, URLs dynamiques)
├── style.css (thème sombre AKKO)
└── nginx.conf (routes proxy de santé)
│
▼ /health/* proxy inverse
┌───────┼───────┐
▼ ▼ ▼
Trino Airflow Polaris ... (tous les services)
Le serveur nginx du cockpit agit comme proxy de vérification de santé, transférant
les requêtes /health/<service> vers le point de santé interne de chaque service.
Cela évite les problèmes CORS et maintient des URLs de santé cohérentes pour le
frontend.
Ports¶
| Port | Fonction | Exposé |
|---|---|---|
| 80 | HTTP — sert l'interface du portail et proxifie les vérifications de santé | Oui (via ingress Traefik) |
Accédez au cockpit via https://cockpit.akko.local (k3d) ou le nom d'hôte
d'ingress configuré.
Fonctionnalités principales¶
- Cartes de services — chaque service de la plateforme dispose d'une carte avec nom, version, indicateur de santé (vert/rouge) et lien direct
- Proxy de santé — les blocs
location /health/*de nginx proxifient vers le point de santé natif de chaque service, normalisant les réponses pour le frontend - Thème sombre — suit le Design System AKKO (
--bg-primary: #0a0a14,--accent: #6c63ff, police : Inter) - Section DevHub — liens rapides vers JupyterHub, Superset, Airflow, MLflow, Dashboards et la documentation
- Affichage des versions — lit
versions.json(généré parscripts/generate-versions.sh) pour afficher les versions épinglées de chaque service
Portail 8 pages (Sprint 14)¶
Le cockpit est organisé en huit pages dédiées :
| Page | Objectif | Route |
|---|---|---|
| Home | Cartes de services avec health checks et liens rapides | / |
| DevHub | Raccourcis développeur (JupyterHub, Airflow, Superset, MLflow, docs dbt) | /devhub/ |
| AI | Playground des UDF SQL IA, info passerelle LiteLLM, statut Ollama/vLLM | /ai/ |
| Governance | Catalogue OpenMetadata, policies OPA, dashboard RBAC | /governance/ |
| Architecture | Diagramme d'architecture interactif (Mermaid) | /architecture/ |
| Logs | Visionneur de logs logs layer (LogQL, live tail, filtres par pod/namespace) | /logs/ |
| Monitoring | Métriques Prometheus (CPU, mémoire, taux de requêtes, HPA) | /monitoring/ |
| Alerts | Alertes AlertManager actives/silenciées avec sévérité, receiver et annotations | /alerts/ |
Les pages Logs, Monitoring et Alerts font un reverse-proxy via nginx vers les services internes logs layer, Prometheus et AlertManager — aucun DNS/TLS externe requis.
Configuration¶
nginx.conf¶
La configuration nginx du cockpit définit les routes proxy de santé pour chaque service :
location /health/trino {
proxy_pass http://akko-trino:8080/v1/info/state;
}
location /health/airflow {
proxy_pass http://akko-airflow-webserver:8080/health;
}
location /health/polaris {
proxy_pass http://akko-polaris:8182/q/health;
}
ConfigMap Kubernetes
En déploiement Helm, la configuration nginx est montée via un ConfigMap
depuis le sous-chart akko-cockpit. Le fichier branding/cockpit/nginx.conf
de l'ère Docker sert de source de vérité et est copié dans
helm/akko/charts/akko-cockpit/files/.
app.js¶
Le frontend JavaScript interroge les endpoints /health/* toutes les 30 secondes
et met à jour l'indicateur de statut sur chaque carte de service. Les URLs des
services sont construites dynamiquement en fonction du pattern de nom d'hôte
courant (utilise les domaines *.akko.local, configurable via global.domain
dans les valeurs Helm).
Chart Helm¶
Le cockpit est déployé via le sous-chart personnalisé akko-cockpit :
helm/akko/charts/akko-cockpit/
├── Chart.yaml
├── values.yaml
├── files/
│ ├── index.html
│ ├── app.js
│ ├── style.css
│ └── nginx.conf
└── templates/
├── deployment.yaml
├── service.yaml
├── configmap.yaml # monte les fichiers via .Files.Get
└── ingress.yaml
Valeurs clés¶
akko-cockpit:
image:
repository: akko-cockpit
tag: "2026.03"
ingress:
enabled: true
hostname: cockpit.akko.local
Fichiers statiques via .Files.Get
Tous les fichiers HTML, CSS, JS et de configuration nginx doivent être
lus via .Files.Get depuis le répertoire files/. Ne jamais passer du
contenu statique par .Values — cela produit des fichiers de 0 octet.
Dépannage¶
Problèmes courants
- Vérifications de santé toutes rouges : Vérifiez que les noms DNS des
services sont résolus depuis l'intérieur du pod cockpit. Lancez
kubectl exec deploy/akko-cockpit -- nslookup akko-trinopour vérifier. Une cause fréquente est le déploiement du cockpit avant que les autres services soient prêts. - Page blanche / pas de cartes : Vérifiez que le ConfigMap est
correctement monté. Lancez
kubectl exec deploy/akko-cockpit -- cat /usr/share/nginx/html/index.htmlpour vérifier que le fichier n'est pas vide (problème de.Files.Getà 0 octet). - Boucle de redirection OAuth2 : Le cockpit est protégé par
oauth2-proxyvia le middleware forward-auth de Traefik. Assurez-vous que le client Keycloakakko-oauth2-proxya la bonne URI de redirection (https://cockpit.akko.local/oauth2/callback).