Installation hors ligne de k3s sur Raspberry Pi 5

Il est parfois nécessaire de pouvoir installer un cluster kubernetes mono-noeud à une connexion internet inexistante. Cela fait parti de notre série voyage. Contrairement aux articles précédent, nous partons d’un raspberry pi 5 (le raspberry pi 3 étant trop limité pour l’exercise).

Introduction

Dans certains environnements où la connexion Internet est limitée ou inexistante, il est crucial de pouvoir déployer Kubernetes hors ligne. nous allons détailler la procédure complète pour installer k3s en mode mono-noeud sur un Raspberry Pi 5, depuis la création d’une image bootable jusqu’à la vérification d’intégrité du système et l’utilisation de TPM pour sécuriser le matériel.

Pré-requis

Matériel

  • Raspberry Pi 5
  • Média de boot : Carte microSD (min. 8 Go)
  • Accès à un autre ordinateur connecté à Internet pour préparer l’image et télécharger les fichiers hors ligne
  • Périphérique de stockage externe pour transférer les paquets et images de conteneur hors ligne

Fichiers et Logiciels Nécessaires

  • Image ISO ou image pré-installée de votre distribution Linux pour le Raspberry Pi 5 (Ubuntu Server ARM64)
  • Outils de création de média bootable : dd par exemple
  • Archive k3s hors ligne : Le binaire k3s, les images Docker nécessaires, et un script d’installation personnalisé. Ces fichiers doivent être téléchargés en environnement connecté.
  • Dépendances hors ligne : Télécharger en amont les paquets requis par votre distribution (ex. curl, tar, etc.) si besoin.
  • Outils de sécurité : TPM ou swtpm (pour simulation) afin de sécuriser le matériel, et scripts de vérification d’intégrité.

1. Préparation de l’image bootable Hors Ligne

1.1. Téléchargement de l’Image du Système

Dans un environnement connecté, téléchargez l’image de la distribution choisie pour le Raspberry Pi 5. Par exemple, pour Ubuntu Server ARM64 :

wget https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-arm64.iso

Vous pouvez également utiliser une image officielle de Raspberry Pi OS Lite version 64 bits si vous préférez.

1.2. Création de la Clé Bootable

Utilisez la commande dd pour copier l’image sur votre carte microSD.

sudo dd if=ubuntu-22.04-live-server-arm64.iso of=/dev/sdX bs=4M status=progress oflag=sync

2. Préparation du système hors ligne

2.1. Installation de l’OS sur le Raspberry Pi 5

  1. Insérez le média bootable dans le Raspberry Pi 5 et démarrez-le.
  2. Suivez les instructions d’installation pour installer la distribution en mode standard.
  3. Lors de l’installation, ne configurez pas de connexion réseau, car l’environnement sera exploité hors ligne.

2.2. Transfert des fichiers d’installation k3s Hors Ligne

  1. Depuis l’ordinateur connecté, préparez une archive (par exemple, k3s-offline.tar.gz) contenant :
    • Le binaire k3s pour ARM64.
    • Les images nécessaires (pour containerd).
    • Le script d’installation personnalisé.
  2. Transférez cette archive sur le Raspberry Pi 5 (en utilisant un support externe ou en copiant via USB), dans un dossier dédié comme /opt/offline_k3s.
ls -l /opt/offline_k3s
sha256sum /opt/offline_k3s/k3s-offline.tar.gz

Vérifiez que les sommes de contrôle correspondent aux références.

3. Installation de k3s en Mode Hors Ligne

3.1. Extraction de l’Archive k3s

Décompressez l’archive dans un répertoire :

sudo mkdir -p /opt/k3s
sudo tar -xzvf /opt/offline_k3s/k3s-offline.tar.gz -C /opt/k3s

3.2. Installation et Configuration de k3s

Créez un script d’installation personnalisé pour lancer k3s en mode mono-noeud sans accès Internet. Sauvegardez ce script dans /opt/k3s/install_offline.sh :

#!/bin/bash
# Script d'installation hors ligne de k3s sur Raspberry Pi 5

# Définir les options pour k3s (désactiver servicelb et traefik pour un cluster minimal)
export INSTALL_K3S_EXEC="--disable=servicelb,traefik"

# Copier le binaire k3s dans /usr/local/bin
sudo cp /opt/k3s/k3s /usr/local/bin/

# Importer les images nécessaires dans containerd, si disponible (utilisation de ctr)
sudo ctr -n=k8s.io image import /opt/k3s/k3s-images.tar.gz

# Lancer k3s en tant que serveur
sudo /usr/local/bin/k3s server $INSTALL_K3S_EXEC

Rendez ce script exécutable et lancez-le :

sudo chmod +x /opt/k3s/install_offline.sh
sudo /opt/k3s/install_offline.sh

3.3. Vérification de l’installation

Après le démarrage de k3s, vérifiez que le noeud fonctionne correctement :

sudo k3s kubectl get nodes
sudo k3s kubectl get pods --all-namespaces

Votre noeud devrait apparaître comme “Ready” et les pods système devraient démarrer correctement.

4. Sécurité et vérification d’intégrité

4.1. Vérification d’intégrité via checksum

Pour s’assurer que le système n’a pas été modifié, créez un script qui calcule les checksums des fichiers critiques.

  • /opt/k3s/verify_integrity.sh :
#!/bin/bash
FILES=(
  "/usr/local/bin/k3s"
  "/etc/systemd/system/k3s.service"
)

for file in "${FILES[@]}"; do
    sha256sum "$file"
done

Exécutez ce script régulièrement pour vérifier l’intégrité.

4.2. Utilisation de TPM/swtpm pour la sécurité matérielle

Si vous utilisez swtpm pour émuler un TPM, protégez les clés sensibles et attestez l’intégrité du système :

# Création de l'Endorsement Key (EK) et de l'Attestation Key (AK)
tpm2_createek -C e -c ek.ctx -G rsa -u ek.pub
tpm2_createak -C ek.ctx -c ak.ctx -G rsa -s rsassa -u ak.pub -n ak.name

# Attestation de Boot : enregistrer les événements dans les PCR
tpm2_pcrevent 0 /boot/vmlinuz
tpm2_pcrevent 1 /boot/initrd.img

# Vérification du quote pour s'assurer que le système n'est pas modifié
if ! tpm2_checkquote -u ak.pub -m pcr.bin -s quote.sig; then
    echo "Alerte : Altération non autorisée détectée !" | mail -s "TPM Alert" security@example.com
    sudo systemctl stop k3s
fi

Conclusion

Cet article détaille la procédure complète pour installer k3s en mode hors ligne sur un Raspberry Pi 5, depuis la création d’une clé bootable jusqu’à la mise en service d’un cluster Kubernetes en mono-noeud. En intégrant des mécanismes de mise à jour centralisée, de vérification d’intégrité par checksum et l’utilisation de TPM pour sécuriser le matériel, vous disposez d’une solution robuste pour des déploiements dans des environnements isolés ou sécurisés, afin de garantir un espace de test fiable durant vos voyages.

Notre série sur un SI de voyage hautement sécurisé

Si vous ne les avez pas encore lu, retrouvez notre série d’articles sur la conception un Système d’Information transportable :