Projets / homelab

Homelab kubeadm

Kubernetes on-premise monté de zéro avec kubeadm sur mon serveur Proxmox, et exploité comme une production depuis le 1er juin 2026 : tout en code, tout revu en merge request.

État au 13/11/2026

  • En service : cluster kubeadm (1 control plane, 2 workers), GitOps ArgoCD, observabilité, SSO Keycloak, Vault.
  • En cours : alertes envoyées par mail. #26
  • Suivant : reconstruire le cluster par pipeline, avec 3 control planes.

Ce qu’il reste à prouver : Un seul control plane aujourd’hui, pas encore de NetworkPolicy, et jamais exploité avec de vrais utilisateurs ni une astreinte.

Le dépôt public ↗

Architecture du homelab : le cluster kubeadm et Vault sur Proxmox, MinIO, Keycloak et le DNS sur le NAS, le runner CI sur ESXi.
Cliquer pour agrandir · ouvrir l’image ↗

Exploitation

Sauvegarde etcd restaurée pour de vrai

Un snapshot toutes les 2 h vers le MinIO du NAS, hors du cluster, avec un identifiant en écriture seule. Restauration jouée le 02/10/2026.

Extinction scriptée

Le lab est éteint entre les sessions. Un script arrête les nœuds puis l’hôte, dans l’ordre, jamais par un arrêt brutal.

Des runbooks rejouables

Accès admin, sauvegarde etcd, Sealed Secrets, Vault, Keycloak : chaque geste d’exploitation est écrit pour qu’un tiers puisse le refaire.

Incidents

Un incident, étape par étape

Un compte admin MinIO au mot de passe public pendant quatre mois →

  1. 1 · Symptôme

    Aucun. Trouvé en lisant les valeurs par défaut du chart Helm.

  2. 2 · Diagnostic

    Le chart avait créé un compte admin au mot de passe public. Tout pod du cluster pouvait l’utiliser.

  3. 3 · Contenir

    Compte désactivé le jour même.

  4. 4 · Corriger

    Comptes déclarés explicitement, compte par défaut retiré, mot de passe root changé.

  5. 5 · Leçon

    Lire les valeurs par défaut d’un chart avant de l’installer, pas seulement celles qu’on modifie.

Tous les incidents tracés

Sécurité

Comment un changement est contrôlé, du commit au runtime

Chaîne de sécurité : pipeline de merge request, porte de merge, ArgoCD, admission et runtime, trois voies des secrets, trous connus.
Cliquer pour agrandir · ouvrir l’image ↗

Schémas interactifs

Authentification Kubernetes de Vault

Comment un pod lit un secret dans Vault sans aucun identifiant dans le dépôt.

Identifiants Postgres dynamiques

Vault crée pour l’application un compte Postgres à courte durée de vie, renouvelé puis remplacé sans intervention.

Certificats TLS

La CA interne du homelab, comparée à Let’s Encrypt sur le projet EKS.

La sécurité du homelab par les 4 C →

Décisions

kubeadm plutôt qu’un cluster managé

Pour avoir la main sur le control plane : audit CIS, journal d’audit, chiffrement d’etcd. Cilium pour le réseau, Flannel écarté car il n’applique pas les NetworkPolicy.

Sauvegardes hors du cluster

Une sauvegarde rangée dans le cluster disparaît le jour où le cluster meurt. Elle part sur le NAS.

Vault sur sa propre VM

Le coffre de secrets survit à une reconstruction du cluster, et la met à l’épreuve.