#!/usr/bin/env bash # ============================================================================= # 03 - Composants du cluster (cert-manager, namespaces, acces registre) # ============================================================================= # A executer depuis VOTRE POSTE, kubeconfig de prod charge : # # export KUBECONFIG=~/.kube/xpeditis-prod.yaml # REGISTRY_TOKEN=... bash 03-install-cluster-addons.sh # # cert-manager est installe depuis son manifeste statique officiel : pas de # Helm a maintenir sur le cluster, une seule version epinglee, un seul fichier # a relire en cas de doute. set -euo pipefail CERT_MANAGER_VERSION="${CERT_MANAGER_VERSION:-v1.16.2}" REGISTRY_SERVER="${REGISTRY_SERVER:-rg.fr-par.scw.cloud}" REGISTRY_TOKEN="${REGISTRY_TOKEN:-}" NAMESPACE="${NAMESPACE:-xpeditis-prod}" HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" K8S_DIR="${HERE}/../k8s" log() { printf '\n>>> %s\n' "$*"; } kubectl version --output=yaml >/dev/null || { echo "kubectl ne joint pas le cluster." >&2; exit 1; } # --- 1. Namespaces ----------------------------------------------------------- log "Namespaces" kubectl apply -f "${K8S_DIR}/base/00-namespaces.yaml" # --- 2. cert-manager --------------------------------------------------------- if ! kubectl get ns cert-manager >/dev/null 2>&1; then log "Installation de cert-manager ${CERT_MANAGER_VERSION}" kubectl apply -f \ "https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml" else log "cert-manager deja present" fi log "Attente de cert-manager" kubectl -n cert-manager rollout status deploy/cert-manager --timeout=180s kubectl -n cert-manager rollout status deploy/cert-manager-webhook --timeout=180s kubectl -n cert-manager rollout status deploy/cert-manager-cainjector --timeout=180s # --- 3. Acces au registre Scaleway ------------------------------------------ # Le registre est prive : sans ce Secret, les pods restent en ImagePullBackOff. if [[ -n "$REGISTRY_TOKEN" ]]; then log "Secret d'acces au registre (${REGISTRY_SERVER})" kubectl -n "$NAMESPACE" create secret docker-registry regcred \ --docker-server="$REGISTRY_SERVER" \ --docker-username=nologin \ --docker-password="$REGISTRY_TOKEN" \ --dry-run=client -o yaml | kubectl apply -f - else echo "AVERTISSEMENT: REGISTRY_TOKEN absent. Creez 'regcred' avant de deployer :" echo " kubectl -n ${NAMESPACE} create secret docker-registry regcred \\" echo " --docker-server=${REGISTRY_SERVER} --docker-username=nologin --docker-password=" fi # --- 4. Emetteur ACME -------------------------------------------------------- # Le ClusterIssuer depend d'un Secret contenant le token API Cloudflare : # il est chiffre SOPS et doit etre applique avant (secrets-apply.sh). if kubectl -n cert-manager get secret cloudflare-api-token >/dev/null 2>&1; then log "ClusterIssuer Let's Encrypt (DNS-01 Cloudflare)" kubectl apply -f "${K8S_DIR}/cluster/cluster-issuer.yaml" else echo "AVERTISSEMENT: le Secret cert-manager/cloudflare-api-token est absent." echo " Appliquez d'abord les secrets : bash scripts/secrets-apply.sh" echo " puis : kubectl apply -f ${K8S_DIR}/cluster/cluster-issuer.yaml" fi # --- 5. Verifications -------------------------------------------------------- log "Etat" kubectl get ns kubectl -n cert-manager get pods kubectl get clusterissuer 2>/dev/null || true cat < cluster 2. bash scripts/deploy.sh # premier deploiement ============================================================================= NEXT