ADR 023 â Exposition publique de l'UI ArgoCD (2026-06-22)
Statut
Accepté (2026-06-22), validé en live le 2026-06-23. Issue #105 (MR2, exposition). Fait suite à l'ADR 022 (MR1, authentification admin via ESO) : on ouvre la porte aprÚs avoir verrouillé l'auth. Sprint 5 (accÚs plateforme).
Contexte
ArgoCD n'était accessible qu'en kubectl port-forward. On veut un accÚs web stable
argocd.devopsyouss.com pour la démo portfolio (montrer la console GitOps en entretien).
Exposer ArgoCD = exposer les clés du royaume GitOps. C'est assumé et borné : - l'authentification est durcie au préalable (ADR 022 : mot de passe admin géré par ESO, jamais le défaut) ; - le SSO OIDC (#106) viendra ensuite, aprÚs quoi l'admin deviendra un accÚs break-glass ; - on réutilise la stack d'exposition existante (#76 Grafana, ADR 010) : Gateway partagé + cert wildcard, aucune surface réseau nouvelle.
DĂ©cision 1 â Exposition via le Gateway partagĂ© (HTTPRoute)
Un HTTPRoute argocd.devopsyouss.com (ns argocd) â argocd-server:80, attachĂ© au
Gateway fastapi-gateway (ns fastapi) cross-namespace (allowedRoutes:from:All,
posé en #76). Le cert wildcard *.devopsyouss.com couvre déjà le sous-domaine ;
ExternalDNS crée le CNAME automatiquement depuis le hostname (#66).
MĂȘmes choix d'ownership que Grafana (ADR 010) : la route vit avec son service
(ns argocd, dossier k8s/platform/argocd/), déployée par l'Application argocd-config.
ĂcartĂ© : exposer via un Service LoadBalancer dĂ©diĂ© (ELB en plus, redondant avec le
Gateway L7 existant) ou un Ingress séparé (le projet est tout en Gateway API).
DĂ©cision 2 â server.insecure: true (TLS terminĂ© au Gateway)
Par dĂ©faut argocd-server fait lui-mĂȘme du TLS. DerriĂšre un Gateway qui termine dĂ©jĂ
le TLS, ça donne du TLS-sur-TLS : boucle de redirection HTTPâHTTPS et/ou 502 sur
le gRPC. On passe donc le serveur en server.insecure: true : il sert l'UI, l'API et
le gRPC-Web en clair sur le port 80, et le Gateway gĂšre le HTTPS public (cert
wildcard). C'est le mode recommandé d'ArgoCD derriÚre un ingress/proxy TLS.
Le trafic public reste chiffrĂ© (HTTPS jusqu'au Gateway) ; le segment Gatewayâpod est en clair dans le cluster (rĂ©seau overlay Cilium), acceptable ici (pas de mTLS intra-cluster dans ce projet). Alternative Ă©cartĂ©e : TLS passthrough (le Gateway ne verrait plus le L7, perte des bĂ©nĂ©fices Envoy ; et gestion du cert cĂŽtĂ© ArgoCD).
DĂ©cision 3 â server.insecure vit dans le bootstrap Ansible, la route en GitOps
server.insecure est un paramÚtre d'installation du serveur (clé
server.insecure du ConfigMap argocd-cmd-params-cm, posée par le chart). Il vit
donc dans les values du helm install ArgoCD, c'est-Ă -dire dans le bootstrap
Ansible (lĂ oĂč ArgoCD est installĂ©, poule/Ćuf). Le HTTPRoute, ressource
d'exposition, vit en GitOps (k8s/platform/argocd/, Application argocd-config),
comme httproute-grafana.yaml cÎté monitoring. Chaque chose à sa place.
PiÚges traités / à valider
- TLS-sur-TLS : réglé par
server.insecure(cf. Décision 2). - gRPC-Web (CLI
argocd) : avecserver.insecureet un seul port HTTP, ArgoCD sert le gRPC-Web sur le 80. ValidĂ© live le 2026-06-23 :argocd login argocd.devopsyouss.com --grpc-webpasse Ă travers le Gateway (argocd app listOK). - Ordre cert/Gateway : le cert wildcard doit ĂȘtre
Readyavant le Gateway (déjà le cas depuis #76, le listener HTTPS référencewildcard-devopsyouss-tls).
Conséquences
- Validé en live le 2026-06-23 :
argocd.devopsyouss.comen HTTPS (cert wildcard,ssl_verify_result: 0), login admin (mot de passe ESO, ADR 022), pas de boucle de redirection, CLI gRPC-Web OK. Hors infra :kustomize build,ansible syntax-check,mkdocs. - Aucun ELB nouveau : on réutilise le NLB du Gateway partagé (#70). Teardown par cascade (le HTTPRoute part avec l'Application, CNAME retiré par ExternalDNS).
- Surface d'attaque : une UI d'admin de plus en public, mitigée par l'auth ESO et (à venir) le SSO #106.
Ăvolution possible
- SSO OIDC GitHub (#106) : login unique, RBAC readonly par défaut, admin en
break-glass (
admin.enabled: falseĂ terme). - Keycloak central sur le homelab : IdP cross-cluster (suite de #106).
- Restreindre l'accĂšs (allowlist IP, SecurityPolicy Envoy) si besoin de durcir.
Date : 2026-06-22 Sprint : 5 Issue : #105