- traefik : values.yaml versionné (réplique existant + certResolver ACME HTTP-01 + acme.json persistant) — appliqué par helm upgrade (hors ArgoCD). Redirect HTTP→HTTPS scopée funklab.online (ne casse pas *.lab.local). - gateway : DNAT 80/443 → Traefik + rate-limit - dnsmasq : split-horizon *.funklab.online → Traefik (var public_domain) - doc : admin/k8s/public-domain.md (archi, OVH/Freebox, helm, ajout d'app) Appliqué et vérifié : helm upgrade OK (services *.lab.local intacts), resolver ACME chargé, DNAT/dnsmasq en place. En attente DNS OVH + Freebox pour l'émission des certificats. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.1 KiB
Domaine public + HTTPS — funklab.online
Exposition des applications du cluster sur Internet via un domaine public
(funklab.online, OVH) avec routage par sous-domaine et TLS Let's Encrypt.
Une seule redirection Freebox (80+443) pour toutes les apps.
Architecture
Internet ─▶ grafana.funklab.online ─┐ DNS OVH : *.funklab.online → 82.67.223.17
chat.funklab.online │
auth.funklab.online │
▼
[ Freebox ] 80 + 443 → funk-s01
▼
s01 (DNAT nftables + rate-limit) → Traefik (VIP .200)
▼
Traefik : route par Host + cert Let's Encrypt (HTTP-01) → l'app
- Split-horizon : dnsmasq résout
*.funklab.online → Traefik (192.168.10.200)en interne → le LAN utilise les mêmes URLs sans sortir sur Internet. - Ports historiques conservés : le hub reste aussi joignable en
kaya.freeboxos.fr:9081/9080(bascule non destructive).
Prérequis (une fois, côté fournisseurs)
- OVH — zone DNS
funklab.online: enregistrementA, sous-domaine*(wildcard), cible82.67.223.17. (Propagation quelques minutes à ~1 h.) - Freebox : redirections
80/tcpet443/tcp→funk-s01.
Vérifier la résolution : dig +short grafana.funklab.online → doit rendre 82.67.223.17.
Déploiement
1. Traefik — Let's Encrypt (hors ArgoCD, helm)
Config versionnée : k8s/infra/traefik/values.yaml. Toujours pinner la version du
chart (sinon helm upgrade tire la dernière → risque de casse de l'ingress cluster) :
helm repo update traefik
helm upgrade traefik traefik/traefik -n infra --version 40.1.0 \
-f k8s/infra/traefik/values.yaml
kubectl -n infra rollout status deploy/traefik
Rollback immédiat si l'ingress tombe : helm rollback traefik -n infra.
2. Redirection HTTP→HTTPS (scopée funklab.online)
kubectl apply -f k8s/infra/traefik/redirect.yaml
⚠️ Pas de redirection globale : les services internes
*.lab.localresteraient cassés (Let's Encrypt ne certifie pas.lab.local).
3. Réseau (Ansible)
ansible-playbook -i inventory.yml playbooks/storage-01.yml --tags gateway,dnsmasq
gateway: DNAT80/443 → Traefik+ rate-limitdnsmasq:*.funklab.online → Traefik(variablepublic_domain)
4. Exposer une app en HTTPS
Ajouter/adapter une IngressRoute sur l'entrypoint websecure avec le certResolver :
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata: { name: grafana-public, namespace: monitoring }
spec:
entryPoints: [websecure]
routes:
- match: Host(`grafana.funklab.online`)
kind: Rule
services:
- name: kube-prometheus-stack-grafana
port: 80
tls:
certResolver: letsencrypt # ← émission auto du cert à la 1re visite
Le certificat est émis automatiquement au premier accès (challenge HTTP-01 sur le port 80).
Intégration auth par app
| App | Mode | Note |
|---|---|---|
| Grafana, Open WebUI, ArgoCD | OIDC natif | redirect_uri sur l'URL publique *.funklab.online |
| Prometheus, Alertmanager, n8n, SearXNG | Proxy Provider Authentik | middleware forward-auth Traefik (app sans login propre) |
Détail de l'ajout d'une app au hub : admin/k8s/auth-portal-admin.md.
Pièges
- Cert bloqué en « TRAEFIK DEFAULT CERT » : DNS pas encore propagé ou Freebox
80non redirigé → le challenge HTTP-01 échoue. Vérifierdig+ la redirection. Logs :kubectl -n infra logs deploy/traefik | grep -i acme. - Rate-limit Let's Encrypt (5 certs identiques/semaine) : ne pas boucler les
redéploiements ;
acme.jsonest persistant (PVC nfs) pour éviter la ré-émission. helm upgradesans--version→ tire la dernière chart : toujours pinner.- redirect_uri OIDC : chaque provider Authentik doit lister l'URL publique
https://<app>.funklab.online/...(en plus des URLs internes si conservées).