0048 — Accès local développeur au banc (URLs cliquables + secrets + .env)
Contexte
Section intitulée « Contexte »Le développeur data travaille dans le dépôt applicatif atlas ; son objectif
est de se concentrer sur la data, pas d’opérer le cluster. Or atteindre le
banc Lima depuis l’hôte demandait, jusqu’ici, des gestes d’opérateur : lancer un
kubectl port-forward par UI, lire chaque secret en base64 -d, savoir que le
service Grafana s’appelle kube-prometheus-stack-grafana ou qu’Argo CD sert en
HTTP clair (server.insecure). Charge cognitive « cluster » que le dev ne
devrait pas porter.
Trois contraintes propres au banc Lima local (toutes vérifiées) :
- le réseau de la VM (
user-v2, ex.192.168.104.0/24) n’est pas routable depuis l’hôte macOS — c’est déjà pourquoi l’API K8s passe par un portForward127.0.0.1:6443(drift L5) ; - les hostnames
*.cluster.lansont des placeholders qui ne résolvent pas côté hôte (ADR 0021/0020) ; - chaque Gateway Cilium a sa propre IP LoadBalancer (une par namespace), pas une IP partagée.
Plusieurs voies « plus propres » ont été essayées et écartées, preuves à l’appui :
- portForward natif Lima (
guestIPnon-localhost) : exige un reboot de la VM (pas de reload à chaud) ; le reboot casse temporairement le control-plane (apiserver indisponible le temps du redémarrage). Trop intrusif pour une simple commande d’accès. - IP loopback par UI (
127.0.0.2,127.0.0.3…) : macOS ne lie pas127.0.0.0/8hors.1sansifconfig alias(sudo, non persistant). socket_vmnet(routage hôte→sous-réseaux VM) : exige sudo + une installation — précisément la dépendance que le banc a choisi d’éviter en retenant le réseauuser-v2.
Décision
Section intitulée « Décision »Un script unique — bench/lima/access.sh — rend
le banc consommable depuis l’hôte en une commande, sans reboot, sans sudo
réseau, sans dépendance nouvelle. Le développeur ne fait que git push côté
atlas.
Le script, en lisant le contrat comme source de vérité
(contract/endpoints.example.yaml, ADR
0043) :
- pose les Gateways des UI dont le Service existe (idempotent), prérequis
d’exposition déjà satisfaits par le chemin
atlas(cert-manager + CRDs Gateway API) ; - ouvre un forward SSH dédié par Gateway —
127.0.0.1:<port> → <IP_LB_du_Gateway>:443via la config SSH de Lima, multiplexing désactivé (ControlMaster=no ControlPath=none) pour un canal persistant. Un port hôte distinct par UI (8443, 8444…) ; c’est le port qui distingue le backend, pas l’IP (toutes en127.0.0.1) ; - pose un bloc
/etc/hostsdélimité*.cluster.lan → 127.0.0.1(sudo demandé explicitement ;--print-hosts/--no-hostspour s’en passer) → URLs cliquables, TLS validé par la CA interne ; - regroupe les secrets (Argo CD, Gitea, Grafana, rôles Postgres) en un écran ;
- génère
../atlas/.env.cluster.local(gitignoré) —.envprêt à consommer côtéatlas(Postgres, OpenLineage, registry,GITEA_PUSH_URL). Patron versionné générique :contract/atlas.env.cluster.example(ADR 0023).
Exposé aussi comme phase bench/lima/run-phases.sh access (le chemin
atlas renvoie vers elle). Conforme à
ADR 0046 : l’état (Gateways, hosts,
forwards) est posé par du code reproductible, pas par des gestes manuels. La
couche d’entrée reste Gateway API Cilium inchangée (ADR 0020) — le
sur-mesure est entièrement côté hôte et banc-only.
Accepted.
Conséquences
Section intitulée « Conséquences »- Gain : « git push et ça marche ». Le dev lance
run-phases.sh atlaspuisaccess.sh, obtient des URLs cliquables + un.envprêt, et travaille dansatlas. Plus de port-forward manuel, plus debase64 -d, plus de pièges de nommage de service. - Banc-only, assumé : forwards SSH +
/etc/hostssont spécifiques au banc local. En déploiement réel (bare-metal), rien de tout ça : l’IP LB est sur le vrai LAN et l’admin réseau pose le DNS*.cluster.lan→ les URLs Gateway marchent nativement. - Prix à payer : ports hôte non standard (8443+), un process SSH par UI
(tués par
--stop), et unsudoponctuel pour/etc/hosts(contournable). Acceptable pour un banc de dev. - Secrets en clair dans le
.envgénéré : c’est un fichier local, gitignoré, de valeurs de banc jetables (ADR 0023). Jamais commité (entrée.env.cluster.localajoutée au.gitignored’atlas). - Lien drift L57 : la commande
statusréférençaitsvc/grafana(inexistant) ; corrigée verskube-prometheus-stack-grafanaau passage. - Pistes documentées comme écartées (portForward natif, loopbacks, socket_vmnet) : si une version future de Lima recharge les portForwards à chaud, reconsidérer le natif (plus « intégré » que SSH).