Nginx Proxy Manager
J’aurais pu utiliser Traefik avec cert-manager pour le HTTPS. Mais honnêtement, NPM c’est tellement plus simple.
C’est quoi NPM ?
Nginx Proxy Manager c’est un reverse proxy avec une interface web. Tu cliques, tu configures un domaine, t’actives HTTPS, et c’est fait. Pas de YAML à écrire.
Pourquoi pas Traefik + cert-manager ?
J’ai essayé. Ça marche. Mais :
- Faut installer cert-manager
- Faut créer des ClusterIssuers
- Faut mettre les bonnes annotations sur chaque Ingress
- Quand ça marche pas, debugger les certificats c’est pas fun
Avec NPM : clic, clic, certificat. Fini.
Installation sur Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: npm
namespace: npm
spec:
replicas: 1
template:
spec:
containers:
- name: npm
image: jc21/nginx-proxy-manager:latest
ports:
- containerPort: 80
- containerPort: 81 # Admin UI
- containerPort: 443
volumeMounts:
- name: data
mountPath: /data
- name: letsencrypt
mountPath: /etc/letsencrypt
volumes:
- name: data
persistentVolumeClaim:
claimName: npm-data
- name: letsencrypt
persistentVolumeClaim:
claimName: npm-letsencrypt
Avec un Service LoadBalancer sur l’IP 192.168.1.202.
Premier accès
URL: http://192.168.1.202:81
Email: admin@example.com
Password: changeme
L’interface est propre. T’as des onglets pour les proxy hosts, les certificats, les access lists…
Ajouter un service
- Proxy Hosts → Add Proxy Host
- Domain Names :
grafana.mondomaine.fr - Scheme : http
- Forward Hostname :
grafana.grafana-namespace.svc.cluster.local - Forward Port : 3000
- SSL → Request a new SSL certificate → Force SSL
30 secondes plus tard, t’as HTTPS avec un certificat Let’s Encrypt valide.
Le DNS
J’ai un domaine chez Cloudflare. J’ai créé un wildcard :
*.sortium.fr → A → <mon IP publique>
Tous les sous-domaines pointent vers mon IP, et NPM route vers le bon service.
Port forwarding
Sur mon routeur :
Port 80 → 192.168.1.202:80 (pour le challenge HTTP-01)
Port 443 → 192.168.1.202:443 (pour le HTTPS)
C’est la seule config réseau à faire côté routeur.
Intégration avec l’Agent IA
Plus tard, j’ai ajouté un tool à mon agent IA pour configurer NPM automatiquement :
func toolConfigureNPMProxy(subdomain, service, port string) {
// Login à l'API NPM
// Créer le proxy host
// Demander le certificat SSL
}
Maintenant quand l’agent déploie une app, il configure automatiquement le HTTPS. Mais ça c’est pour un autre article.
Les certificats
Let’s Encrypt c’est gratuit et automatique. Les certificats sont valides 90 jours, et NPM les renouvelle automatiquement.
Tu peux voir tous tes certificats dans l’onglet SSL Certificates.
Backup
Les données importantes sont dans deux volumes :
/data: la config NPM/etc/letsencrypt: les certificats
Faut penser à les backup régulièrement.
Prochain article : Le stockage sur Talos - pourquoi Longhorn marche pas et comment j’ai résolu le problème.