Change namespace certificates

This commit is contained in:
2026-01-20 06:05:03 +01:00
parent 0badab1ecb
commit ae1844616d
14 changed files with 392 additions and 2 deletions

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: tls-secrets-sync
description: Synchronisation des secrets TLS depuis OPS vers les autres clusters
type: application
version: 1.0.0

View File

@@ -0,0 +1,50 @@
# Synchronisation des Secrets TLS
Ce chart gère la synchronisation des secrets TLS depuis le cluster OPS vers les autres clusters (DEV, RCT, PRD).
## Structure
- `Chart.yaml` : Définition du chart Helm
- `values.yaml` : Configuration par défaut
- `templates/` : Templates Kubernetes
- `namespace-certificates.yaml` : Namespace pour les certificats sur OPS
- `secret-*.yaml` : Secrets de référence (optionnel)
- `sync-job-*.yaml` : Jobs de synchronisation
- `rbac-secret-sync.yaml` : RBAC pour les Jobs
## Utilisation
### Option 1 : Synchronisation manuelle via script (Recommandée)
Utilisez le script `scripts/sync-tls-secret.sh` :
```bash
./scripts/sync-tls-secret.sh homarr-dev-tls cluster-ops certificates-ops cluster-dev homarr-dev
```
### Option 2 : Synchronisation automatique via Jobs
Les Jobs Kubernetes tentent de synchroniser automatiquement, mais nécessitent que les contextes kubectl soient configurés dans le pod.
### Option 3 : Synchronisation via CronJob
Créez un CronJob qui exécute le script de synchronisation périodiquement.
## Configuration
Les secrets sont synchronisés depuis :
- **Source** : Namespace `certificates-ops` sur cluster OPS
- **Destination** : Namespaces des applications sur clusters DEV/RCT/PRD
## Ajout d'un nouveau secret à synchroniser
1. Ajoutez une entrée dans `apps/applicationset-tls-secrets-sync.yaml`
2. Créez un template `sync-job-<app>-<env>.yaml` si nécessaire
3. Ou utilisez directement le script `sync-tls-secret.sh`
## Notes importantes
- Les contextes kubectl doivent être configurés pour accéder aux différents clusters
- Le namespace de destination doit exister sur le cluster cible
- Les secrets sont copiés avec leurs données, mais les métadonnées sont nettoyées

View File

@@ -0,0 +1,9 @@
apiVersion: v1
kind: Namespace
metadata:
name: certificates-ops
labels:
name: certificates-ops
managed-by: argocd
purpose: tls-certificates

View File

@@ -0,0 +1,30 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: secret-sync-sa
namespace: certificates-ops
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: secret-sync-role
namespace: certificates-ops
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: secret-sync-rolebinding
namespace: certificates-ops
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: secret-sync-role
subjects:
- kind: ServiceAccount
name: secret-sync-sa
namespace: certificates-ops

View File

@@ -0,0 +1,16 @@
apiVersion: v1
kind: Secret
metadata:
name: homarr-dev-tls
namespace: homarr-dev
labels:
app: homarr
environment: dev
managed-by: argocd
source-cluster: ops
source-namespace: certificates-ops
type: kubernetes.io/tls
# Les données seront copiées depuis le secret dans OPS
# Ce template sert de référence - le secret réel sera synchronisé via un Job ou script
data: {}

View File

@@ -0,0 +1,66 @@
apiVersion: batch/v1
kind: Job
metadata:
name: sync-tls-secret-homarr-dev
namespace: certificates-ops
annotations:
argocd.argoproj.io/hook: Sync
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
spec:
template:
spec:
serviceAccountName: secret-sync-sa
containers:
- name: kubectl
image: bitnami/kubectl:latest
command:
- /bin/sh
- -c
- |
set -e
echo "=== Synchronisation du secret TLS homarr-dev-tls ==="
echo "Source: cluster-ops, namespace: certificates-ops"
echo "Destination: cluster-dev, namespace: homarr-dev"
# Récupérer le secret depuis OPS (cluster actuel)
echo "1. Récupération du secret depuis OPS..."
kubectl get secret homarr-dev-tls -n certificates-ops -o yaml > /tmp/secret-source.yaml
if [ ! -s /tmp/secret-source.yaml ]; then
echo "❌ Erreur: Le secret homarr-dev-tls n'existe pas dans certificates-ops sur OPS"
exit 1
fi
# Modifier les métadonnées pour la destination
echo "2. Préparation du secret pour DEV..."
cat /tmp/secret-source.yaml | \
sed '/^ uid:/d' | \
sed '/^ resourceVersion:/d' | \
sed '/^ selfLink:/d' | \
sed '/^ creationTimestamp:/d' | \
sed 's/namespace: certificates-ops/namespace: homarr-dev/' > /tmp/secret-dest.yaml
# Appliquer le secret sur DEV
# Note: Cela nécessite que kubectl soit configuré avec les contextes des clusters
echo "3. Application du secret sur DEV..."
# Vérifier si le contexte cluster-dev existe
if kubectl config get-contexts cluster-dev &>/dev/null; then
# Créer le namespace s'il n'existe pas
kubectl create namespace homarr-dev --context=cluster-dev --dry-run=client -o yaml | kubectl apply --context=cluster-dev -f - || true
# Appliquer le secret
kubectl apply -f /tmp/secret-dest.yaml --context=cluster-dev
echo "✅ Secret synchronisé vers cluster-dev"
else
echo "⚠️ Le contexte cluster-dev n'est pas configuré dans kubectl"
echo " Pour synchroniser manuellement, exécutez :"
echo " kubectl apply -f /tmp/secret-dest.yaml --context=cluster-dev"
echo ""
echo " Ou utilisez le script :"
echo " ./scripts/sync-tls-secret.sh homarr-dev-tls cluster-ops certificates-ops cluster-dev homarr-dev"
fi
restartPolicy: Never
backoffLimit: 3

View File

@@ -0,0 +1,8 @@
# Valeurs par défaut - seront surchargées par l'ApplicationSet
app: homarr
env: dev
secretName: homarr-dev-tls
sourceNamespace: certificates-ops
sourceCluster: cluster-ops
targetNamespace: homarr-dev
targetCluster: cluster-dev