add endpoint

This commit is contained in:
2026-01-22 23:58:51 +01:00
parent f8dbd26467
commit 84b7bf8451
9 changed files with 196 additions and 256 deletions

View File

@@ -10,6 +10,10 @@ metadata:
labels:
app: external-device
device: {{ $name }}
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/instance: {{ $.Release.Name }}
annotations:
argocd.argoproj.io/sync-wave: "-1"
spec:
type: ClusterIP
ports:
@@ -26,6 +30,10 @@ metadata:
labels:
app: external-device
device: {{ $name }}
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/instance: {{ $.Release.Name }}
annotations:
argocd.argoproj.io/sync-wave: "0"
subsets:
- addresses:
- ip: {{ $device.ip }}

View File

@@ -1,7 +0,0 @@
apiVersion: v2
name: external-devices
description: Chart pour exposer les équipements externes via Traefik reverse proxy
type: application
version: 0.1.0
appVersion: "1.0"

View File

@@ -1,98 +0,0 @@
# External Devices - Reverse Proxy avec Traefik (Production)
Ce chart Helm expose vos équipements externes (pfSense, OpenMediaVault, NAS, etc.) via Traefik en utilisant les certificats TLS générés par cert-manager.
⚠️ **Note** : Pour le moment, seuls les services externes en **production** sont configurés.
## Principe
Au lieu d'exporter les certificats vers chaque équipement, Traefik agit comme reverse proxy :
- **Traefik** gère le HTTPS avec les certificats wildcard
- Les **équipements externes** restent en HTTP (interne)
- Les certificats sont **automatiquement renouvelés** par cert-manager
## Configuration
### 1. Modifier `values.yaml`
Configurez vos équipements dans `values.yaml` :
```yaml
externalDevices:
pfsense:
enabled: true
domain: "pfsense.prd.gkdomaine.fr"
ip: "192.168.1.1" # ⚠️ IP réelle de pfSense
port: 80
tlsSecret: "wildcard-prd-tls"
```
### 2. Déployer via ArgoCD
Le chart est déployé automatiquement via l'ApplicationSet `applicationset-external-devices.yaml`.
### 3. Vérifier
```bash
# Vérifier les services
kubectl get services -n traefik-prd | grep backend
# Vérifier les IngressRoute
kubectl get ingressroute -n traefik-prd
# Tester l'accès
curl -k https://pfsense.prd.gkdomaine.fr
```
## Ajouter un nouvel équipement
1. Ajoutez la configuration dans `values.yaml` :
```yaml
externalDevices:
mon-equipement:
enabled: true
domain: "equipement.prd.gkdomaine.fr"
ip: "192.168.1.100"
port: 80
tlsSecret: "wildcard-prd-tls"
namespace: "traefik-prd"
```
2. Le chart génère automatiquement :
- Un Service de type `ExternalName`
- Un IngressRoute avec TLS
- Une redirection HTTP → HTTPS (si activée)
## Authentification basique
Pour ajouter une authentification HTTP Basic :
```yaml
externalDevices:
pfsense:
enabled: true
domain: "pfsense.prd.gkdomaine.fr"
ip: "192.168.1.1"
port: 80
basicAuth:
enabled: true
secretName: "pfsense-basic-auth" # Secret à créer manuellement
```
Créer le secret :
```bash
# Générer le hash avec htpasswd
htpasswd -nb admin password | base64
# Créer le secret
kubectl create secret generic pfsense-basic-auth \
--from-literal=users='admin:$apr1$...' \
-n traefik-prd
```
## Documentation complète
Voir `docs/REVERSE-PROXY-EXTERNES.md` pour plus de détails.

View File

@@ -1,52 +0,0 @@
{{- range $name, $device := .Values.externalDevices }}
{{- if $device.enabled }}
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: {{ $name }}
namespace: {{ $device.namespace | default $.Values.global.namespace }}
labels:
app: external-device
device: {{ $name }}
spec:
entryPoints:
- websecure
routes:
- match: Host(`{{ $device.domain }}`)
kind: Rule
services:
- name: {{ $name }}-backend
port: {{ $device.port }}
{{- if $device.basicAuth.enabled }}
middlewares:
- name: {{ $name }}-auth
{{- end }}
tls:
secretName: {{ $device.tlsSecret | default $.Values.global.tlsSecret }}
{{- if $.Values.global.redirectHttpToHttps }}
---
# Redirection HTTP vers HTTPS
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: {{ $name }}-http-redirect
namespace: {{ $device.namespace | default $.Values.global.namespace }}
labels:
app: external-device
device: {{ $name }}
spec:
entryPoints:
- web
routes:
- match: Host(`{{ $device.domain }}`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: {{ $name }}-backend
port: {{ $device.port }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -1,29 +0,0 @@
{{- if .Values.global.redirectHttpToHttps }}
---
# Middleware pour rediriger HTTP vers HTTPS
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-https
namespace: {{ .Values.global.namespace }}
spec:
redirectScheme:
scheme: https
permanent: true
{{- end }}
{{- range $name, $device := .Values.externalDevices }}
{{- if and $device.enabled $device.basicAuth.enabled }}
---
# Middleware d'authentification basique pour {{ $name }}
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: {{ $name }}-auth
namespace: {{ $device.namespace | default $.Values.global.namespace }}
spec:
basicAuth:
secret: {{ $device.basicAuth.secretName }}
{{- end }}
{{- end }}

View File

@@ -1,37 +0,0 @@
{{- range $name, $device := .Values.externalDevices }}
{{- if $device.enabled }}
---
# Service pour {{ $name }}
apiVersion: v1
kind: Service
metadata:
name: {{ $name }}-backend
namespace: {{ $device.namespace | default $.Values.global.namespace }}
labels:
app: external-device
device: {{ $name }}
spec:
type: ClusterIP
ports:
- port: {{ $device.port }}
targetPort: {{ $device.port }}
protocol: TCP
---
# Endpoints pour {{ $name }} (pointe vers l'IP externe)
apiVersion: v1
kind: Endpoints
metadata:
name: {{ $name }}-backend
namespace: {{ $device.namespace | default $.Values.global.namespace }}
labels:
app: external-device
device: {{ $name }}
subsets:
- addresses:
- ip: {{ $device.ip }}
ports:
- port: {{ $device.port }}
protocol: TCP
{{- end }}
{{- end }}

View File

@@ -1,33 +0,0 @@
# Configuration pour les équipements externes exposés via Traefik (PRD)
# Les certificats TLS sont gérés par cert-manager dans le cluster OPS
# ⚠️ Pour le moment, seuls les services externes en production sont configurés
externalDevices:
# OpenMediaVault
omv:
enabled: true
domain: "nas.prd.gkdomaine.fr"
ip: "10.78.20.107" # ⚠️ À configurer avec l'IP réelle d'OpenMediaVault
port: 80
tlsSecret: "wildcard-prd-tls"
namespace: "traefik-prd"
basicAuth:
enabled: false
secretName: "omv-basic-auth"
# Ajoutez d'autres équipements ici
# exemple:
# autre-equipement:
# enabled: true
# domain: "autre.prd.gkdomaine.fr"
# ip: "192.168.1.30"
# port: 80
# tlsSecret: "wildcard-prd-tls"
# namespace: "traefik-prd"
# Configuration globale
global:
namespace: "traefik-prd"
tlsSecret: "wildcard-prd-tls"
redirectHttpToHttps: true