Traefik¶
Aperçu¶
Traefik sert de reverse proxy et contrôleur d'ingress Kubernetes pour AKKO. Il gère la terminaison TLS, le routage automatique des services via les ressources Ingress, et le middleware d'authentification forward-auth OAuth2 pour les services dépourvus de support OIDC natif.
Architecture¶
Internet / Navigateur
│
▼
Traefik (:443 / :80)
├── Terminaison TLS (auto-signé ou Let's Encrypt)
├── Middleware forward-auth ──→ OAuth2 Proxy ──→ Keycloak
│
├──→ akko.local ──→ akko-cockpit:80
├──→ federation.akko.local ──→ akko-trino:8080
├──→ jupyterhub.akko.local ──→ akko-jupyterhub:8000
├──→ orchestrator.akko.local ──→ akko-airflow-webserver:8080
├──→ bi.akko.local ──→ akko-superset:8088
├──→ identity.akko.local ──→ akko-keycloak:8080
├──→ grafana.akko.local ──→ akko-grafana:3000
├──→ minio.akko.local ──→ akko-minio:9001
├──→ experiments.akko.local ──→ akko-mlflow:5000
└──→ ... ──→ (tous les autres services)
Chaque service AKKO est accessible via Traefik — aucun service n'expose ses ports directement sur le réseau hôte.
Ports¶
| Port | Fonction | Exposé |
|---|---|---|
| 80 | HTTP — redirige tout le trafic vers HTTPS (port 443) | Oui (NodePort / LoadBalancer) |
| 443 | HTTPS — point d'entrée avec terminaison TLS pour tous les services | Oui (NodePort / LoadBalancer) |
| 8080 | Dashboard Traefik (désactivé en production) | Interne uniquement |
Fonctionnalités principales¶
- Routage automatique des ingress — lit les ressources Kubernetes Ingress et configure les routes sans redémarrage
- Terminaison TLS — utilise des certificats auto-signés en dev (k3d), supporte Let's Encrypt / cert-manager en production
- Middleware forward-auth — protège les services sans OIDC natif (Dashboards, MLflow, LiteLLM, Cockpit) en déléguant l'authentification à OAuth2 Proxy
- Redirection HTTP vers HTTPS — tout le trafic du port 80 est redirigé vers le 443
- Chaînes de middlewares — supporte la limitation de débit, les en-têtes et la compression via les CRDs middleware Kubernetes
Configuration¶
Exemple de ressource Ingress¶
Chaque service définit sa propre ressource Ingress dans son sous-chart Helm :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: akko-superset
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
rules:
- host: bi.akko.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: akko-superset
port:
number: 8088
Middleware Forward-Auth¶
Les services nécessitant une protection OAuth2 utilisent une annotation middleware Traefik :
metadata:
annotations:
traefik.ingress.kubernetes.io/router.middlewares: >-
akko-oauth2-proxy-forward-auth@kubernetescrd
Cela transfère chaque requête à OAuth2 Proxy, qui valide la session auprès de Keycloak avant d'autoriser l'accès.
Chart Helm¶
Traefik est déployé via le chart Helm officiel de la communauté Traefik :
- name: traefik
version: "34.3.0"
repository: https://traefik.github.io/charts
Valeurs clés¶
traefik:
ports:
web:
redirectTo:
port: websecure
websecure:
tls:
enabled: true
providers:
kubernetesIngress:
enabled: true
logs:
general:
level: INFO
Mappage de ports k3d
Dans les clusters de développement k3d, les ports 80 et 443 sont mappés
vers l'hôte via
k3d cluster create --port "80:80@loadbalancer" --port "443:443@loadbalancer".
Le script k3d-create.sh gère cela automatiquement.
Dépannage¶
Problèmes courants
- 502 Bad Gateway : Le pod du service cible n'est pas prêt ou le nom/port
du Service est incorrect. Vérifiez
kubectl get endpoints <nom-du-service>pour confirmer que les endpoints existent. Vérifiez également que la sonde de disponibilité du service passe correctement. - Boucle de redirection avec OAuth2 : Assurez-vous que le domaine du
cookie OAuth2 Proxy correspond au hostname de l'ingress. En k3d, tous les
services doivent partager le même domaine de base (
.akko.local). Vérifiez que le client Keycloak a la bonne URI de redirection. - Erreurs de certificat TLS dans Safari : Les certificats auto-signés
nécessitent une approbation manuelle sur macOS. Ajoutez le CA au
Trousseau d'accès, ou utilisez
--insecurepour les outils CLI. Pour k3d, le scriptdeploy.shgénère et approuve un CA local.