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 Hostavec 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
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
spec.api.sans:
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
nameetserveravec 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¶
- https://docs.k0sproject.io/v1.21.2+k0s.0/install/
- https://cloudnativelabs.github.io/post/2017-05-1-kube-network-policies/
- https://techviewleo.com/install-kubernetes-cluster-using-k0s
Utiliser le logging UFW¶
sudo ufw logging on
sudo tail -f /var/log/ufw.log
sudo ufw logging off

