
RKE2 (Rancher Kubernetes Engine 2) est la distribution Kubernetes orientée sécurité de Rancher/SUSE, conçue pour faciliter la conformité aux benchmarks CIS. Ce guide vous accompagne dans le déploiement d’un cluster RKE2 reproductible sur KVM, prêt à être renforcé pour la production.
Prérequis : Une machine Linux avec KVM/libvirt, accès SSH avec clé, et kubectl installé sur votre poste.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer des VMs KVM avec cloud-init pour héberger le cluster
- Installer un nœud server RKE2 (control plane + etcd)
- Joindre des nœuds agent (workers) au cluster
- Récupérer l’accès kubectl et valider le déploiement
- Diagnostiquer les problèmes courants et nettoyer le lab
Pourquoi choisir RKE2 ?
Section intitulée « Pourquoi choisir RKE2 ? »RKE2 se distingue par son orientation sécurité par défaut et ses options facilitant la conformité aux benchmarks CIS Kubernetes.
| Caractéristique | RKE2 |
|---|---|
| Orienté sécurité | Profils et options CIS, SELinux/AppArmor |
| Distribution packagée | Composants intégrés, pas d’assemblage |
| Configuration centralisée | Un fichier /etc/rancher/rke2/config.yaml |
| Intégration Rancher | Compatible avec Rancher Manager |
| Support enterprise | SUSE/Rancher support commercial |
| CNI par défaut | Canal (Flannel + Calico policies) |
| Containerd | Runtime CRI intégré et hardené |
RKE2 vs autres solutions
Section intitulée « RKE2 vs autres solutions »Avant de démarrer, comparez RKE2 avec les autres options :
| Critère | RKE2 | kubeadm | k0s | k3s | Kubespray |
|---|---|---|---|---|---|
| Type | Distribution | Bootstrap tool | Distribution | Distribution | Playbooks Ansible |
| Orientation | Enterprise, sécurité | Standard upstream | Edge, prod, CI | Edge, IoT, dev | Prod, multi-cloud |
| Installation | Script | Commandes | k0sctl (YAML) | Script unique | Ansible |
| CNI défaut | Canal | Aucun | kube-router | Flannel | Configurable |
| HA native | ✅ Intégrée | Manuel | ✅ Multi-controller | ✅ Multi-server | ✅ Ansible |
| Profil CIS | ✅ Intégré | Manuel | Manuel | Manuel | Selon config |
| Cas d’usage | Conformité, prod | Bare metal, formation | Edge, CI/CD, prod | Edge, IoT, dev | Prod automatisée |
Architecture du lab
Section intitulée « Architecture du lab »Ce lab déploie un cluster RKE2 minimaliste mais fonctionnel :
Ports réseau requis
Section intitulée « Ports réseau requis »| Port | Protocole | Source → Destination | Rôle |
|---|---|---|---|
| 6443 | TCP | Agents, kubectl → Server | API Kubernetes |
| 9345 | TCP | Agents → Server | Registration RKE2 |
| 10250 | TCP | Server → Agents | kubelet API |
| 8472 | UDP | Tous nœuds ↔ Tous nœuds | VXLAN (Canal) |
Prérequis
Section intitulée « Prérequis »Sur l’hyperviseur (votre machine)
Section intitulée « Sur l’hyperviseur (votre machine) »# Paquets KVM/libvirtsudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virtinst cloud-image-utils
# Vérifier que libvirtd est actifsudo systemctl status libvirtd
# Télécharger kubectl si absentcurl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"chmod +x kubectl && sudo mv kubectl /usr/local/bin/Image cloud Ubuntu
Section intitulée « Image cloud Ubuntu »# Télécharger l'image cloud Ubuntu 24.04wget -O ubuntu-24.04-cloudimg.img \ https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.imgCréation des VMs KVM
Section intitulée « Création des VMs KVM »-
Créer les disques QCOW2
Fenêtre de terminal # Créer un disque basé sur l'image cloudfor VM in rke2-cp1 rke2-worker1 rke2-worker2; doqemu-img create -f qcow2 -F qcow2 \-b ubuntu-24.04-cloudimg.img \${VM}.qcow2 20Gdone -
Générer la configuration cloud-init
Créez un fichier
cloud-init-cp1.yamlpour le server :#cloud-confighostname: rke2-cp1manage_etc_hosts: trueusers:- name: kubesudo: ALL=(ALL) NOPASSWD:ALLshell: /bin/bashssh_authorized_keys:- ssh-ed25519 AAAA... votre-clé-publique# Désactiver le swap (requis pour Kubernetes)swap:filename: /swap.imgsize: 0# Configuration réseau statiquewrite_files:- path: /etc/netplan/50-cloud-init.yamlcontent: |network:version: 2ethernets:enp1s0:addresses: [192.168.122.10/24]routes:- to: defaultvia: 192.168.122.1nameservers:addresses: [192.168.122.1]runcmd:- netplan apply- swapoff -a- sed -i '/swap/d' /etc/fstab -
Créer les ISOs cloud-init
Fenêtre de terminal for VM in rke2-cp1 rke2-worker1 rke2-worker2; docloud-localds ${VM}-cloud-init.iso cloud-init-${VM}.yamldone -
Créer les VMs avec virt-install
Fenêtre de terminal # Server (4 Go RAM)virt-install --name rke2-cp1 \--memory 4096 --vcpus 2 \--disk rke2-cp1.qcow2 \--disk rke2-cp1-cloud-init.iso,device=cdrom \--os-variant ubuntu24.04 \--network network=default \--graphics none --console pty,target_type=serial \--noautoconsole --import# Workers (3 Go RAM chacun)for WORKER in rke2-worker1 rke2-worker2; dovirt-install --name ${WORKER} \--memory 3072 --vcpus 2 \--disk ${WORKER}.qcow2 \--disk ${WORKER}-cloud-init.iso,device=cdrom \--os-variant ubuntu24.04 \--network network=default \--graphics none --console pty,target_type=serial \--noautoconsole --importdone -
Attendre la disponibilité SSH
Fenêtre de terminal for IP in 192.168.122.10 192.168.122.20 192.168.122.21; dountil ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no kube@${IP} exit 2>/dev/null; doecho "Attente de ${IP}..."sleep 5doneecho "${IP} accessible"done
Installation du server RKE2
Section intitulée « Installation du server RKE2 »-
Installer RKE2 sur le server
Fenêtre de terminal ssh kube@192.168.122.10 << 'EOF'# Télécharger et exécuter le script d'installationcurl -sfL https://get.rke2.io | sudo sh -EOF -
Configurer le server RKE2
Créez
/etc/rancher/rke2/config.yamlsur le server :Fenêtre de terminal ssh kube@192.168.122.10 << 'EOF'sudo mkdir -p /etc/rancher/rke2sudo tee /etc/rancher/rke2/config.yaml << 'CONFIG'# Token stable pour les agents (à conserver !)token: rke2-lab-token-secure-2026# Certificats TLS valides pour ces noms/IPstls-san:- 192.168.122.10- rke2-cp1- rke2-cp1.localCONFIGEOF -
Démarrer le service rke2-server
Fenêtre de terminal ssh kube@192.168.122.10 << 'EOF'sudo systemctl enable rke2-serversudo systemctl start rke2-serverEOF -
Suivre les logs d’initialisation
Fenêtre de terminal ssh kube@192.168.122.10 "sudo journalctl -u rke2-server -f"Attendez le message
rke2 is up and running(environ 1-2 minutes).
Jonction des agents
Section intitulée « Jonction des agents »Une fois le server opérationnel, installez RKE2 en mode agent sur les workers :
-
Installer RKE2 (mode agent) sur chaque worker
Fenêtre de terminal for WORKER_IP in 192.168.122.20 192.168.122.21; dossh kube@${WORKER_IP} << 'EOF'curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sudo sh -EOFdone -
Configurer les agents
Fenêtre de terminal for WORKER_IP in 192.168.122.20 192.168.122.21; dossh kube@${WORKER_IP} << 'EOF'sudo mkdir -p /etc/rancher/rke2sudo tee /etc/rancher/rke2/config.yaml << 'CONFIG'# Adresse du server RKE2server: https://192.168.122.10:9345# Token identique au servertoken: rke2-lab-token-secure-2026CONFIGEOFdone -
Démarrer les agents
Fenêtre de terminal for WORKER_IP in 192.168.122.20 192.168.122.21; dossh kube@${WORKER_IP} << 'EOF'sudo systemctl enable rke2-agentsudo systemctl start rke2-agentEOFdone -
Vérifier le statut des agents
Fenêtre de terminal for WORKER_IP in 192.168.122.20 192.168.122.21; dossh kube@${WORKER_IP} "sudo systemctl status rke2-agent --no-pager | head -5"done
Récupération de l’accès kubectl
Section intitulée « Récupération de l’accès kubectl »-
Récupérer le kubeconfig depuis le server
Fenêtre de terminal # Copier le kubeconfigssh kube@192.168.122.10 "sudo cat /etc/rancher/rke2/rke2.yaml" > kubeconfig# Adapter l'adresse du serversed -i 's/127.0.0.1/192.168.122.10/g' kubeconfig -
Tester l’accès au cluster
Fenêtre de terminal export KUBECONFIG=$PWD/kubeconfigkubectl cluster-infokubectl get nodesRésultat attendu :
NAME STATUS ROLES AGE VERSIONrke2-cp1 Ready control-plane,etcd 10m v1.34.5+rke2r1rke2-worker1 Ready <none> 5m v1.34.5+rke2r1rke2-worker2 Ready <none> 5m v1.34.5+rke2r1
Vérification du cluster
Section intitulée « Vérification du cluster »Pods système
Section intitulée « Pods système »kubectl get pods -n kube-systemVous devriez retrouver les static pods du control plane et les composants packagés activés :
| Catégorie | Pods |
|---|---|
| Control plane | etcd-*, kube-apiserver-*, kube-controller-manager-*, kube-scheduler-* |
| CNI | rke2-canal-* (un par nœud) |
| DNS | rke2-coredns-* |
| Composants optionnels | rke2-ingress-nginx-*, rke2-metrics-server-* (selon config) |
Test de déploiement
Section intitulée « Test de déploiement »# Créer un déploiement nginxkubectl create deployment nginx --image=nginx:alpine --replicas=2
# Vérifier le schedulingkubectl get pods -o wideLes pods doivent être répartis sur les workers (rke2-worker1 et rke2-worker2).
Test DNS
Section intitulée « Test DNS »kubectl run test-dns --rm -it --restart=Never --image=busybox:1.36 \ -- nslookup kubernetes.default.svc.cluster.localRésultat attendu :
Server: 10.43.0.10Address: 10.43.0.10:53
Name: kubernetes.default.svc.cluster.localAddress: 10.43.0.1Nettoyage du test
Section intitulée « Nettoyage du test »kubectl delete deployment nginxPremiers réflexes d’exploitation
Section intitulée « Premiers réflexes d’exploitation »Où trouver les fichiers
Section intitulée « Où trouver les fichiers »| Chemin | Contenu |
|---|---|
/etc/rancher/rke2/config.yaml | Configuration du nœud |
/etc/rancher/rke2/rke2.yaml | Kubeconfig local (server) |
/var/lib/rancher/rke2/ | Données du cluster |
/var/lib/rancher/rke2/server/db/ | Données etcd |
/var/lib/rancher/rke2/agent/logs/ | Logs conteneurs |
/usr/local/bin/rke2 | Binaire RKE2 |
/var/lib/rancher/rke2/bin/ | Binaires additionnels (kubectl, crictl) |
Commandes utiles
Section intitulée « Commandes utiles »# Logs du servicesudo journalctl -u rke2-server -fsudo journalctl -u rke2-agent -f
# Status du servicesudo systemctl status rke2-serversudo systemctl status rke2-agent
# kubectl depuis le serversudo /var/lib/rancher/rke2/bin/kubectl \ --kubeconfig /etc/rancher/rke2/rke2.yaml \ get nodes
# crictl pour inspecter les conteneurs# Identifiez d'abord le socket containerd sur votre nœud :ls /run/containerd/ /run/k3s/containerd/ 2>/dev/null
# Puis utilisez crictl avec le socket trouvésudo /var/lib/rancher/rke2/bin/crictl \ --runtime-endpoint unix:///run/k3s/containerd/containerd.sock \ psErreurs fréquentes
Section intitulée « Erreurs fréquentes »Le scheduler ou controller-manager échoue
Section intitulée « Le scheduler ou controller-manager échoue »Symptôme :
UnexpectedAdmissionError: preemption: error finding a set of pods to preempt:no set of running pods found to reclaim resources: memoryCause : Mémoire insuffisante.
Solution : Augmentez la RAM de la VM à 4 Go minimum pour le server.
L’agent ne rejoint pas le cluster
Section intitulée « L’agent ne rejoint pas le cluster »Symptôme : Nœud jamais visible dans kubectl get nodes
Vérifications :
- Token identique au server ? (
/etc/rancher/rke2/config.yaml) - URL du server correcte ? (
https://IP:9345, pas 6443) - Connectivité réseau ?
curl -k https://192.168.122.10:9345 - Service démarré ?
systemctl status rke2-agent
Kubeconfig : “certificate signed by unknown authority”
Section intitulée « Kubeconfig : “certificate signed by unknown authority” »Cause : Le kubeconfig local contient un ancien certificat.
Solution :
# Récupérer un kubeconfig fraisssh kube@192.168.122.10 "sudo cat /etc/rancher/rke2/rke2.yaml" > kubeconfigsed -i 's/127.0.0.1/192.168.122.10/g' kubeconfigPods en Pending (scheduler inactif)
Section intitulée « Pods en Pending (scheduler inactif) »Symptôme : Tous les pods Helm helm-install-* restent en Pending.
Cause possible : Le kube-scheduler n’a pas démarré (voir erreur mémoire).
Vérification :
kubectl get pods -n kube-system | grep schedulerNetworkManager interfère avec le CNI
Section intitulée « NetworkManager interfère avec le CNI »Symptôme : Problèmes réseau après redémarrage.
Solution : Voir la section “Prérequis” pour la configuration de NetworkManager.
Nettoyage du lab
Section intitulée « Nettoyage du lab »Désinstallation propre de RKE2
Section intitulée « Désinstallation propre de RKE2 »Sur chaque nœud, utilisez le script de désinstallation installé par votre méthode d’installation :
# Le chemin dépend de la méthode d'installation# Vérifiez lequel existe sur votre nœud :ls -la /usr/local/bin/rke2-uninstall.sh \ /opt/rke2/bin/rke2-uninstall.sh \ /usr/bin/rke2-uninstall.sh 2>/dev/null
# Exécutez le script trouvé (exemple avec /usr/local/bin)sudo /usr/local/bin/rke2-uninstall.shCe script supprime le binaire RKE2, les données et les configurations. Consultez la documentation Uninstall pour les détails.
Suppression des VMs KVM
Section intitulée « Suppression des VMs KVM »Depuis l’hyperviseur :
# Arrêter et supprimer les VMsfor VM in rke2-cp1 rke2-worker1 rke2-worker2; do virsh destroy ${VM} 2>/dev/null virsh undefine ${VM} --remove-all-storagedone
# Supprimer les ISOs cloud-initrm -f rke2-*-cloud-init.isoÉvolutions possibles
Section intitulée « Évolutions possibles »Haute disponibilité (HA)
Section intitulée « Haute disponibilité (HA) »Pour un cluster HA, déployez 3 servers minimum (nombre impair) :
- Quorum etcd : etcd nécessite une majorité de nœuds disponibles (2 sur 3, 3 sur 5). Avec un nombre impair, vous tolérez la perte d’un server.
- Adresse de registration fixe : les agents et servers additionnels doivent pointer vers une adresse stable (load balancer ou VIP)
- Load balancer : HAProxy, keepalived, ou cloud LB devant les servers sur le port 9345/6443
# config.yaml sur chaque server HAserver: https://rke2-lb.example.com:9345token: votre-token-stabletls-san: - rke2-lb.example.com - 192.168.122.100 # VIP du load balancerLa documentation officielle détaille cette architecture : RKE2 HA
Profil CIS Hardening
Section intitulée « Profil CIS Hardening »RKE2 propose des options et profils facilitant la conformité CIS :
profile: cisCela active des restrictions de sécurité supplémentaires. Attention : l’installation seule ne garantit pas la conformité — elle facilite l’atteinte des benchmarks.
Intégration Rancher Manager
Section intitulée « Intégration Rancher Manager »RKE2 s’intègre nativement avec Rancher Manager pour :
- Gestion centralisée multi-clusters
- RBAC visuel
- Monitoring intégré
- Catalogue d’applications
À retenir
Section intitulée « À retenir »- Distribution orientée sécurité : RKE2 facilite la conformité CIS avec des profils et options intégrés — mais l’installation seule ne garantit pas la conformité.
- Configuration via YAML : Privilégiez
/etc/rancher/rke2/config.yamlpour une configuration reproductible et versionnable. - Token stable : Définissez un token explicite et conservez-le : il sert au chiffrement, à la restauration et à l’ajout de nœuds.
- Ports 6443 et 9345 : 6443 pour l’API Kubernetes, 9345 pour l’enregistrement et la supervision RKE2.
Ressources officielles
Section intitulée « Ressources officielles »- Introduction RKE2
- Quick Start Linux
- Requirements
- Configuration Options
- Server Config Reference
- Cluster Access
- High Availability
- Uninstall