This commit is contained in:
2026-01-21 22:33:19 +01:00
parent 39853b7882
commit 0027501e09
13 changed files with 0 additions and 1087 deletions

View File

@@ -1,119 +0,0 @@
#!/bin/bash
# Script pour extraire le certificat CA root et le mettre à jour dans le ConfigMap
# Usage: ./extract-ca-root-cert.sh [--context CLUSTER_CONTEXT] [--output FILE]
set -e
CONTEXT="${KUBECTL_CONTEXT:-cluster-ops}"
NAMESPACE="certificates-ops"
SECRET_NAME="ca-root-secret"
CONFIGMAP_NAME="ca-root-certificate"
OUTPUT_FILE=""
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--context)
CONTEXT="$2"
shift 2
;;
--output)
OUTPUT_FILE="$2"
shift 2
;;
*)
echo "Usage: $0 [--context CLUSTER_CONTEXT] [--output FILE]"
echo " --context: Contexte kubectl (défaut: cluster-ops)"
echo " --output: Fichier de sortie pour le certificat (optionnel)"
exit 1
;;
esac
done
echo "=== Extraction du certificat CA root ==="
echo "Cluster: $CONTEXT"
echo "Namespace: $NAMESPACE"
echo ""
# Vérifier que kubectl est disponible
if ! command -v kubectl &> /dev/null; then
echo "❌ kubectl n'est pas installé"
exit 1
fi
# Vérifier l'accès au cluster
if ! kubectl --context="$CONTEXT" cluster-info &> /dev/null; then
echo "❌ Impossible d'accéder au cluster $CONTEXT"
exit 1
fi
# Vérifier que le secret existe
if ! kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" &> /dev/null; then
echo "❌ Le secret $SECRET_NAME n'existe pas dans le namespace $NAMESPACE"
echo " Assurez-vous que la CA root a été générée :"
echo " kubectl get certificate ca-root-certificate -n $NAMESPACE --context=$CONTEXT"
exit 1
fi
# Extraire le certificat
echo "📋 Extraction du certificat depuis le secret..."
CA_CERT=$(kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" \
-o jsonpath='{.data.tls\.crt}' | base64 -d)
if [ -z "$CA_CERT" ]; then
echo "❌ Impossible d'extraire le certificat du secret"
exit 1
fi
# Sauvegarder dans un fichier si demandé
if [ -n "$OUTPUT_FILE" ]; then
echo "$CA_CERT" > "$OUTPUT_FILE"
echo "✅ Certificat sauvegardé dans: $OUTPUT_FILE"
else
TEMP_FILE=$(mktemp)
echo "$CA_CERT" > "$TEMP_FILE"
OUTPUT_FILE="$TEMP_FILE"
echo "✅ Certificat extrait dans un fichier temporaire"
fi
# Afficher les informations du certificat
echo ""
echo "📜 Informations du certificat CA root:"
echo "$CA_CERT" | openssl x509 -text -noout | grep -E "Subject:|Issuer:|Not Before|Not After|X509v3 Subject Alternative Name" || true
# Mettre à jour le ConfigMap
echo ""
echo "🔄 Mise à jour du ConfigMap $CONFIGMAP_NAME..."
# Créer ou mettre à jour le ConfigMap
kubectl --context="$CONTEXT" create configmap "$CONFIGMAP_NAME" \
--from-file=ca.crt="$OUTPUT_FILE" \
-n "$NAMESPACE" \
--dry-run=client -o yaml | \
kubectl --context="$CONTEXT" apply -f -
if [ $? -eq 0 ]; then
echo "✅ ConfigMap mis à jour avec succès"
else
echo "❌ Erreur lors de la mise à jour du ConfigMap"
exit 1
fi
# Nettoyer le fichier temporaire si créé
if [ -n "$TEMP_FILE" ] && [ -f "$TEMP_FILE" ]; then
rm "$TEMP_FILE"
fi
echo ""
echo "=== Résumé ==="
echo "✅ Certificat CA root extrait"
echo "✅ ConfigMap $CONFIGMAP_NAME mis à jour dans le namespace $NAMESPACE"
echo ""
echo "📋 Prochaines étapes:"
echo "1. Distribuer le certificat CA root aux clients (navigateurs, machines)"
echo "2. Voir docs/PKI-INTERNE.md pour les instructions détaillées"
echo ""
echo "Pour extraire le certificat dans un fichier:"
echo " $0 --output ca-root.crt"

View File

@@ -1,182 +0,0 @@
#!/bin/bash
# Script d'initialisation de la PKI interne
# Ce script vérifie et crée le certificat CA root si nécessaire
# Usage: ./init-pki.sh [--context CLUSTER_CONTEXT]
set -e
CONTEXT="${KUBECTL_CONTEXT:-cluster-ops}"
NAMESPACE="certificates-ops"
CERT_NAME="ca-root-certificate"
SECRET_NAME="ca-root-secret"
ISSUER_NAME="ca-root-issuer"
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--context)
CONTEXT="$2"
shift 2
;;
*)
echo "Usage: $0 [--context CLUSTER_CONTEXT]"
echo " --context: Contexte kubectl (défaut: cluster-ops)"
exit 1
;;
esac
done
echo "=== Initialisation de la PKI interne ==="
echo "Cluster: $CONTEXT"
echo "Namespace: $NAMESPACE"
echo ""
# Vérifier que kubectl est disponible
if ! command -v kubectl &> /dev/null; then
echo "❌ kubectl n'est pas installé"
exit 1
fi
# Vérifier l'accès au cluster
if ! kubectl --context="$CONTEXT" cluster-info &> /dev/null; then
echo "❌ Impossible d'accéder au cluster $CONTEXT"
exit 1
fi
# Vérifier que cert-manager est installé
if ! kubectl --context="$CONTEXT" get crd certificates.cert-manager.io &> /dev/null; then
echo "❌ cert-manager n'est pas installé sur le cluster $CONTEXT"
exit 1
fi
# Vérifier que le namespace existe
if ! kubectl --context="$CONTEXT" get namespace "$NAMESPACE" &> /dev/null; then
echo "📦 Création du namespace $NAMESPACE..."
kubectl --context="$CONTEXT" create namespace "$NAMESPACE"
fi
# Vérifier que le ClusterIssuer ca-root-issuer existe
if ! kubectl --context="$CONTEXT" get clusterissuer "$ISSUER_NAME" &> /dev/null; then
echo "❌ Le ClusterIssuer $ISSUER_NAME n'existe pas"
echo " Assurez-vous qu'il est déployé via ArgoCD"
exit 1
fi
# Vérifier si le secret existe déjà
if kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" &> /dev/null; then
echo "✅ Le secret $SECRET_NAME existe déjà"
echo " La PKI est déjà initialisée"
# Vérifier l'état du certificat
if kubectl --context="$CONTEXT" get certificate "$CERT_NAME" -n "$NAMESPACE" &> /dev/null; then
CERT_STATUS=$(kubectl --context="$CONTEXT" get certificate "$CERT_NAME" -n "$NAMESPACE" \
-o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' 2>/dev/null || echo "Unknown")
if [ "$CERT_STATUS" == "True" ]; then
echo "✅ Le certificat CA root est prêt"
echo ""
echo "📋 Informations du certificat:"
kubectl --context="$CONTEXT" get certificate "$CERT_NAME" -n "$NAMESPACE" -o wide
echo ""
echo "✅ La PKI est opérationnelle"
exit 0
else
echo "⚠️ Le certificat existe mais n'est pas encore prêt (status: $CERT_STATUS)"
echo " Attente de la génération..."
fi
else
echo "⚠️ Le secret existe mais le Certificate n'existe pas"
echo " Cela peut indiquer un problème de configuration"
fi
else
echo "📋 Le secret $SECRET_NAME n'existe pas encore"
echo " Vérification du Certificate..."
fi
# Vérifier si le Certificate existe
if ! kubectl --context="$CONTEXT" get certificate "$CERT_NAME" -n "$NAMESPACE" &> /dev/null; then
echo "❌ Le Certificate $CERT_NAME n'existe pas dans le namespace $NAMESPACE"
echo " Assurez-vous qu'il est déployé via ArgoCD"
echo ""
echo " Le Certificate doit être créé dans:"
echo " helm/certificates/ops/templates/certificate-ca-root.yaml"
exit 1
fi
# Attendre que le certificat soit généré
echo "⏳ Attente de la génération du certificat CA root..."
echo " (Cela peut prendre quelques secondes)"
MAX_WAIT=120 # 2 minutes
ELAPSED=0
INTERVAL=5
while [ $ELAPSED -lt $MAX_WAIT ]; do
if kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" &> /dev/null; then
CERT_STATUS=$(kubectl --context="$CONTEXT" get certificate "$CERT_NAME" -n "$NAMESPACE" \
-o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' 2>/dev/null || echo "False")
if [ "$CERT_STATUS" == "True" ]; then
echo ""
echo "✅ Certificat CA root généré avec succès !"
break
fi
fi
echo -n "."
sleep $INTERVAL
ELAPSED=$((ELAPSED + INTERVAL))
done
echo ""
# Vérifier le résultat final
if ! kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" &> /dev/null; then
echo ""
echo "❌ Le secret n'a pas été généré après $MAX_WAIT secondes"
echo ""
echo "🔍 Diagnostic:"
echo ""
echo "1. Vérifier le Certificate:"
kubectl --context="$CONTEXT" get certificate "$CERT_NAME" -n "$NAMESPACE" -o yaml
echo ""
echo "2. Vérifier les événements:"
kubectl --context="$CONTEXT" get events -n "$NAMESPACE" --sort-by='.lastTimestamp' | tail -10
echo ""
echo "3. Vérifier les logs de cert-manager:"
echo " kubectl --context=$CONTEXT logs -n cert-manager-ops -l app.kubernetes.io/name=cert-manager --tail=50"
exit 1
fi
# Vérifier que le ClusterIssuer ca-issuer fonctionne maintenant
echo "🔍 Vérification du ClusterIssuer ca-issuer..."
sleep 2
if kubectl --context="$CONTEXT" get clusterissuer ca-issuer &> /dev/null; then
ISSUER_STATUS=$(kubectl --context="$CONTEXT" get clusterissuer ca-issuer \
-o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' 2>/dev/null || echo "False")
if [ "$ISSUER_STATUS" == "True" ]; then
echo "✅ Le ClusterIssuer ca-issuer est prêt"
else
echo "⚠️ Le ClusterIssuer ca-issuer n'est pas encore prêt (status: $ISSUER_STATUS)"
echo " Il devrait se mettre à jour automatiquement"
fi
fi
echo ""
echo "=== Résumé ==="
echo "✅ Certificat CA root: $(kubectl --context="$CONTEXT" get certificate "$CERT_NAME" -n "$NAMESPACE" -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' 2>/dev/null || echo "Unknown")"
echo "✅ Secret CA root: $(kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" &> /dev/null && echo "Existe" || echo "Manquant")"
echo ""
echo "📋 Prochaines étapes:"
echo "1. Extraire le certificat CA root:"
echo " ./scripts/extract-ca-root-cert.sh --context=$CONTEXT"
echo ""
echo "2. Distribuer le certificat aux clients (voir docs/PKI-INTERNE.md)"
echo ""
echo "3. Créer des certificats pour vos applications internes en utilisant 'ca-issuer'"
echo ""
echo "🎉 Initialisation terminée !"