grafana.chezlepro.internal et tableaux.genese.internal nommaient le meme service de deux facons. Les deux deviennent observatoire. Un nom de produit dans une URL se grave aussi dans les SAN du certificat et dans les URI de redirection du SSO : remplacer Grafana obligerait alors a renommer le service. Le nom dit desormais la fonction. Le renommage a revele que les URI des clients Keycloak repetent a la main les FQDN declares dans expose:. Rien ne les reliait. P66 garde ce lien, ecrite en meme temps que le premier renommage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
3 KiB
Reverse-proxy & TLS
Unité d'apprentissage. Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer.
① Le concept (générique)
Un reverse-proxy est un point d'entrée unique devant plusieurs services. Il :
- route par nom (
grafana.…→ tel backend,forge.…→ tel autre) — via l'en-têteHost/ SNI ; - termine le TLS : il porte les certificats, parle HTTPS au client et (souvent) HTTP en interne ;
- centralise journaux, limites de débit, en-têtes de sécurité (et un WAF éventuel).
Terminaison TLS = le chiffrement s'arrête au proxy ; derrière, le réseau interne est de confiance. Un seul endroit gère les certificats → simple et cohérent.
② Comment Set-OPS le fait
serveur_nginx déployé sur l'edge (infra-edge) est le reverse-proxy. Le point élégant :
l'exposition est auto-dérivée. Déclarer expose: [icinga.chezlepro.internal] sur une app
génère tout :
expose ──> vhost nginx (route par nom)
──> SAN ajouté au certificat de l'edge (step-ca)
──> enregistrement A dans PowerDNS
──> alias plancher /etc/hosts
Le client parle HTTPS vérifié à l'edge ; l'edge relaie en HTTP au backend interne (Grafana, Forgejo, Keycloak…). Une seule ligne déclarative, toute la chaîne câblée. C'est une liaison (app → domaine) — voir l'unité Liaisons.
③ Pourquoi c'est transférable
| Set-OPS | Équivalents ailleurs |
|---|---|
| nginx reverse-proxy | HAProxy · Traefik · Caddy · Apache · Envoy |
| edge + terminaison TLS | tout load-balancer / ingress cloud, un NetScaler ADC |
| routage par SNI/Host | mécanisme standard de tout proxy HTTP |
Tu as appris le reverse-proxy, le routage par nom, la terminaison TLS — pas « nginx ».
④ À toi de jouer
- Route par nom. Deux noms, un seul edge (
10.17.16.11) :
Changecurl -sI --resolve observatoire.chezlepro.internal:443:10.17.16.11 \ --cacert /etc/step/certs/root_ca.crt https://observatoire.chezlepro.internal/ | head -1grafanaenforge: même IP, backend différent. C'est le routage par SNI. - Vois la terminaison TLS. Le certificat présenté est celui de l'edge (avec les SAN des
exposés) :
openssl s_client -connect 10.17.16.11:443 -servername observatoire.chezlepro.internal | openssl x509 -noout -text | grep -A1 'Subject Alternative'. - Casse & répare. Arrête le backend (ex.
systemctl stop grafana-serversur obs-01) et rouvre Grafana : l'edge répond 502 Bad Gateway (le proxy est là, le service non). Redémarre : ça remarche. Tu distingues le proxy de ce qu'il sert.
Pour aller plus loin (dépôt)
- Rôle :
roles/serveur_nginx; les sites se déclarent côté nginx (serveur_nginx_sites). - Machinerie d'exposition :
expositions_des_applications(dérive vhost + SAN + A + plancher). - Frontière publique (au-delà de l'edge interne) :
docs/+ Étape B (OPNsense).