add endpoint
This commit is contained in:
@@ -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 }}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user