Skip to content

Installation d'un Cluster Kubernetes K0s Single Node géré avec Muppy

Ce document décrit comment configurer un Cluster K0s sécurisé (single node mais pas pour longtemps) pour une utilisation optimale et sécurisée avec muppy.io / Pack8s.

Introduction

Contabo dispose de réseaux privés sur les gammes VPS et VDS.

Quand le réseau privé est activé, les noeuds ont 2 interfaces:

  • eth0 -> interface publique
  • eth1 -> interface privé (10.0.0.0/22)

Le débit sur le réseau privé est d'environ 1Gbit/s.

Tip

Lors du setup du réseau privé, il peut être pratique de commencer par créer la gateway pour lui donner l'adresse 10.0.0.1.

Il est possible de créer un cluster sécurisé avec 2 (minimum) ou 3 nodes:

  • VPS S SSD (BP Publique 250 mbit/s) : Gateway
  • VPS S SSD (BP Publique 250 mbit/s) : LoadBalancer
  • VPS ou VDS : (single) Worker Kubernetes
  • VPS ou VDS : Cluster PostgreSQL (Pour séparer la DB du cluster k8s)

La Gateway et le LoadBalancer peuvent être installés sur le même serveur.

Installation

To_move

Au niveau du réseau, il faut:

  • Désactiver l'IP publique sur le node K8s et utiliser la gateway sur le réseau privé

Installation Gateway

La gateway assure 2 fonctions:

  • SSH Proxy pour permettre d'accéder aux nodes k8s
  • Autoriser le traefik TCP sortant des nodes

Configuration NAT router

On utilise UFW pour configurer le serveur en router NAT.

Ref: https://gist.github.com/kimus/9315140

# edit /etc/default/ufw to change DEFAULT_FORWARD_POLICY
DEFAULT_FORWARD_POLICY="ACCEPT"

# edit /etc/ufw/sysctl.conf to allow IP V4 forwarding
net.ipv4.ip_forward=1

# edit /etc/ufw/before.rules to add content lines (between ---) 
# at the very end of file
---
# BEGIN: Mpy rules for NAT forward
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/22 -o eth0 -j MASQUERADE
COMMIT
# END: Mpy rules for NAT forward
---

Warning

Replace 10.0.0.0/22 with your private network CID.

Validate and activate the configuration with:

sudo ufw reload

LoadBalancer Installation

Il y a 2 options pour le setup:

  • Utiliser le Port Forwarding NAT

    • Ce n'est pas à proprement parler un Load Balancer
    • Utilisable uniquement avec les clusters single node
  • Installer un load balancer

    • compatible les clusters k8s multi nodes.

Le Load Balancer peut être installé sur le serveur qui sert de gateway ou un serveur distinct.

Configuration du Port Forwarding NAT

Se connecter en SSH sur le serveur "LoadBalancer".

Info

Le Port Forwarding n'est pas à proprement parler un Load Balancer, mais pour un seul worker K8s il permet d'arriver au même résultat en sollicitant moins le server.

# Edit /etc/ufw/before.rules to add lines below (replace 10.0.0.X with the IP of your WRKR Node)
sudo vim /etc/ufw/before.rules

# BEGIN: Mpy Port Forwarding Rules
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp --dport   80 -j DNAT --to-destination 10.0.0.x
-A PREROUTING -i eth0 -p tcp --dport  443 -j DNAT --to-destination 10.0.0.x
-A PREROUTING -i eth0 -p tcp --dport 6443 -j DNAT --to-destination 10.0.0.x
COMMIT
# END: Mpy Port Forwarding Rules
Configuration d'un LoadBalancer

TODO: Complétez avec les instructions pour Configurer Traefik avec les packets:

  • Traefik2 - K8s TCP Router v1 - Muppy (server)
  • Traefik2 K8s Loadbalancer (L4) App Config v1 Yaml - Muppy (application)

Installation Node Kubernetes

  • Installez un serveur Ubuntu 20.04 ou 22.04 dans le Private Network
  • Enrôler le dans Muppy
  • Ajouter une règle UFW pour autoriser tout le traffic depuis le réseau privé (10.0.0.0/22)
  • Une fois 'Enrolled', modifiez les IP pour utiliser l' IP Private et renseignez le SSH Gateway Host avec l'IP Publique de la gateway.
    • Assurez vous que la connexion SSH est Ok (Icone Wifi)

Danger

Don't forget the firewall rule to allow traffic from 10.0.0.0/22 or you will be unable to access the server !

Configuration Réseau

L'étape suivante est la moise à jour de la config réseau pour désactiver l'IP Publique et ajouter la gateway sur l'IP privée.

Pour cela, on modifie le fichier netplan (Doc: https://netplan.io/) et on s'assure que la config par défaut ne sera pas restaurée:

sudo vim /etc/netplan/50-cloud-init.yaml
# et ajouter les blocs en rouge ci-dessous

# valider que le fichier est correct
sudo netplan generate

# appliquer les changements
sudo netplan apply 

# Si tout est Ok, on vérouille la config
echo -e "network: {config: disabled}" | sudo tee -a /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Configuration netplan

Le serveur est prêt pour l'installation de Kubernetes.

Installation de Kubernetes avec k0s

  • Connectez vous en SSH puis exécutez le commandes suivantes:

curl -sSLf https://get.k0s.sh | sudo sh
sudo mkdir -p /etc/k0s
sudo k0s config create admin | sudo tee -a /etc/k0s/k0s.yaml
Editer le fichier k0s.yaml pour ajouter l'IP Publique (ou IP de la gateway) dans spec.api.sans:

Example

sudo k0s install controller -c /etc/k0s/k0s.yaml --single
sudo k0s start

# Récupérer l'IP Publique en copiant la sortie de la commande suivante
echo "# PUBLIC_IP_V4 => $(curl --silent ipinfo.io | jq .ip)"

# Récupérer un kubeconfig 
sudo k0s kubeconfig admin > $HOSTNAME-kubeconfig.yaml
# puis téléchargez le fichier ou copiez son contenu dans le presse papier

# Check
sudo k0s kubectl get -A all

Enregistrement dans Muppy

  • Utilisez Muppy / K8s / K8s Clusters pour créer un Cluster.
  • Uploadez le fichier de config via le champ Kubeconfig ou copiez/coller le contenu dans les champs "Kubeconfig" et "Kubeconfig" filename.
  • Ajuster les valeurs nameet server avec l'IP de la gateway utilisée pour accéder au control plane
  • Renseignez les champs Qualifier et Provider

Cliquez sur "Update Info" et vérifiez que les Namespaces sont bien récupérés.

Installation PostgreSQL

L'installation se fait en suivant la doc Muppy.

La seule particularité tient à la configuration de UFW, il faut:

  • Autoriser le traffic provenant du réseau privée (10.0.0.0/22)
  • Autoriser le trafdic provenant d'un éventuel Replica

Conclusion

Kubernetes est installé, la prochaine étape est l'installation des Packages d'Infrastructure qui font l'objet d'un guide à part.

Désinstallation de K0s

Voir https://docs.k0sproject.io/v1.23.6+k0s.2/install/

Références

Utiliser le logging UFW

sudo ufw logging on
sudo tail -f /var/log/ufw.log
sudo ufw logging off