Installer K3s un VPS en cloud public avec Wireguard

Installer K3s un VPS en cloud public avec Wireguard

Sommaire

Présentation de K3s

K3S est une distribution légère, rapide et simplifiée de Kubernetes, conçue pour fonctionner dans des environnements à ressources limitées tels que l’edge computing, l’IoT ou les homelabs. Son installation minimaliste, sa faible empreinte mémoire et ses fonctionnalités intégrées en font une solution idéale pour déployer et gérer des clusters Kubernetes là où la performance et la simplicité sont essentielles.

Pré-requis

Installation de K3S sur le master

Dans ce guide, nous allons suivre la documentation officielle, en y ajoutant quelques paramètres spécifiques à notre configuration réseau.

📄 Référence : Guide officiel K3S - Quick Start

curl -sfL https://get.k3s.io | \
  INSTALL_K3S_EXEC="--node-ip 10.0.0.1 \
                    --advertise-address 10.0.0.1 \
                    --tls-san 10.0.0.1 \
                    --flannel-iface=wg0" \
  sh -
ParamètreRôle
--node-ip 10.0.0.1Définit l’IP interne utilisée par Kubernetes pour ce nœud.
--advertise-address 10.0.0.1Adresse IP annoncée aux autres nœuds du cluster.
--tls-san 10.0.0.1Ajoute cette IP dans le certificat TLS de l’API Server.
--flannel-iface=wg0Force Flannel à utiliser l’interface WireGuard wg0 pour le trafic inter-pods.

💡 Astuce : 10.0.0.1 est un exemple d’adresse. Remplacez-la par l’IP WireGuard réelle de votre master.

Vérification de l’installation

Une fois l’installation terminée, il est important de vérifier que le service k3s est correctement démarré et que le nœud master est bien enregistré.

Vérifier l’état du service K3S

Cette commande permet de s’assurer que le service k3s est actif et sans erreur

sudo systemctl status k3s

Si tout est correct, vous devriez voir un état active (running) en vert.

Vérifier la présence du nœud dans le cluster

sudo kubectl get nodes
  • STATUS doit être Ready
  • ROLES doit indiquer control-plane,master pour un master
  • VERSION doit indiquer la version de K3S

Points importants

  • Le fichier kubeconfig est disponible ici : /etc/rancher/k3s/k3s.yaml (vous pouvez l’exporter dans ~/.kube/config en modifiant l’adresse IP pour se connecter avec kubectl).
  • Sur un réseau WireGuard, la latence peut être légèrement plus élevée qu’en local, mais elle reste parfaitement adaptée pour un cluster K3S.
  • Vous pourrez ensuite ajouter des workers

Configuration de ufw

Ouverture des ports HTTP(S)

sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS

Ouverture des ports K3S (API, Admin, etc) par Wireguard

ufw allow in on wg0 to any port 6443 proto tcp
ufw allow in on wg0 to any port 2379,2380 proto tcp
ufw allow in on wg0 to any port 8472 proto udp
ufw allow in on wg0 to any port 10250 proto tcp
ufw allow in on wg0 to any port 5001 proto tcp
ufw allow in on wg0 to any port 3309 proto tcp
ufw reload

Troubleshooting

En cas de dysfonctionnement, voici une liste de commandes utiles pour diagnostiquer les problèmes courants sur un cluster K3S.

Vérifier si des services écoutent sur les ports 80 et 443

ss -lntp | egrep ':(80|443)\b' || echo "rien n'écoute sur 80/443"

Affiche les processus en écoute sur les ports HTTP (80) et HTTPS (443). Si aucun service n’est détecté, un message l’indique.

Vérifier le service Traefik

kubectl -n kube-system get svc traefik

Liste le service Traefik dans l’espace de noms kube-system, pour confirmer qu’il est créé et exposé.

Vérifier les pods du load balancer Klipper

kubectl -n kube-system get pods -l app=klipper-lb -o wide

Affiche les pods Klipper Load Balancer et leurs adresses IP, permettant de valider leur état.

Vérifier les pods associés au service Traefik

kubectl -n kube-system get pods -l svc=traefik -o wide

Montre les pods correspondant au service Traefik.

Lister les règles d’Ingress

kubectl get ingress -A

Affiche l’ensemble des ressources Ingress dans tous les namespaces.

Vérifier la configuration d’environnement du service K3S

cat /etc/systemd/system/k3s.service.env

Permet de consulter les variables d’environnement appliquées à K3S au démarrage.

Vérifier les pods Traefik (via label standard Kubernetes)

kubectl -n kube-system get pods -l app.kubernetes.io/name=traefik -o wide

Affiche les pods identifiés comme Traefik avec le label Kubernetes standard.

Vérifier que le processus K3S est actif et ses paramètres

ps aux | grep 'k3s server'

Permet de confirmer que le processus k3s server est bien en cours d’exécution avec les bons paramètres.

Tester un accès HTTP local

curl -vk http://127.0.0.1:31018/

Effectue une requête HTTP locale sur un port interne exposé par Traefik.

curl -vk https://127.0.0.1:30344/

Effectue une requête HTTPS locale sur un port interne exposé par Traefik

Sniffer le trafic HTTP entrant

tcpdump -i {{NETWORK_INTERFACE}} tcp port 80

Capture en temps réel le trafic sur le port 80 pour diagnostiquer d’éventuels problèmes réseau.

Afficher les journaux du service K3S

journalctl -xeu k3s.service

Affiche les logs détaillés du service K3S pour identifier des erreurs au démarrage ou à l’exécution.

Vérifier les événements Kubernetes

kubectl events

Liste les événements Kubernetes récents, utiles pour détecter des erreurs sur les pods, services ou ingress.

Conclusion

L’installation de K3S avec une configuration adaptée à WireGuard permet de disposer rapidement d’un cluster Kubernetes léger, sécurisé et optimisé pour un réseau privé.

Étapes suivantes

  1. Déployer des pods sur le cluster

  2. Ajouter un nœud worker au réseau Wireguard

  3. Ajouter ce même nœud au cluster k3s en répétant et adaptant les étapes ci-dessus

    curl -sfL https://get.k3s.io | \
      K3S_URL=https://10.0.0.1:6443 \
      K3S_TOKEN={{ MASTER_TOKEN }} \
      INSTALL_K3S_EXEC="--node-ip 10.0.0.2 \
                        --advertise-address 10.0.0.2 \
                        --tls-san 10.0.0.2 \
                        --flannel-iface=wg0" \
      sh -
    

    Le master token est disponible dans le fichier /var/lib/rancher/k3s/server/node-token

Partager :

Articles en relation

Sécuriser un VPS en cloud public avec Wireguard

Sécuriser un VPS en cloud public avec Wireguard

Cet article explique pas à pas comment protéger un VPS hébergé sur un cloud public en mettant en place un tunnel VPN chiffré via WireGuard. Après avoir présenté les prérequis matériels et logiciels, nous verrons comment installer et configurer WireGuard sur le serveur, sécuriser les flux réseau avec UFW, puis établir la connexion côté client. L’objectif : restreindre l’accès aux services critiques du VPS uniquement aux machines connectées via le VPN, réduisant ainsi considérablement la surface d’attaque et les risques d’intrusion.

En savoir plus