K3S/Traefik - A (long) way to DevSecOps - Épisode 1
Rappel de la saga : A long way to DevSecOps : Épisode 1, Épisode 2, Épisode 3, Épisode 4, Épisode 5, Épisode 6, Épisode 7, Épisode 8.
J’espère aussi faire de la « dé-offuscation » de mots clés barbares martelés ici ou là dans toute bonne présentation commerciale.
K3S
Le commencement
K3S est en gros un Kubernetes facile pour les pauvres (en vrai c’est une distribution K8S allégée et facilement déployable – and « light is right »). Lorsque que tu veux commencer à tâter du kubectl, la première étape qui est souvent conseillée c’est d’utiliser un petit Minikube. C’est ce que j’avais fait en premier, mais je me suis trouvé assez rapidement limité. Des exemples qui peuvent fonctionner sur Minikube, ne fonctionnent pas forcément de la même manière sur un déploiement grandeur nature. Je conseille donc de commencer directement par K3S. Le petit pas pour l’homme est finalement plus grand sur K3S…
Le design
L’avantage avec K3S c’est que l’on peut déployer rapidement un cluster multi-masters / multi-workers très simplement. Si vous voulez de la haute disponibilité facilement c’est un point intéressant à regarder.
K3S intègre par défaut (dans un binaire packagé de moins 100M) :
- containerd
- Flannel (pour la partie réseau),
- CoreDNS (résolution de nom),
- CNI (si vous voulez intégrer votre propre partie réseau)
- Ingress Controller (Traefik par défaut)
- LoadBalancer
- Network Policy Controller
Le détail ce trouve sur cette page Web. C’est dans toute cette légèreté que K3S est adapté à de petits déploiements, sur Rasberry Pi par exemple.
L’installation
La première étape c’est d’installer votre distribution préférée. Personnellement, je suis parti sur une Ubuntu Server 20.04 LTS en mode Cloud (autant de serveurs que vous avez de noeuds). Mais vous pouvez partir sur une VM locale et encore mieux si vous êtes sous Linux, utiliser Multipass. Vous pouvez même utiliser K3S sur des containers avec K3D. Il y a même un docker-compose ici, pour aller encore plus vite.
Taper cette commande pour installer K3S, sans déployer Traefik :
curl -sfL https://get.k3s.io | sh -s - --no-deploy=traefik
On peut déjà vérifer que kubectl répond bien :
sudo kubectl get nodes
Et pour ajouter des nœuds, il suffit de récupérer le TOKEN situé ici :
/var/lib/rancher/k3s/server/node-token
Puis sur un autre serveur lancer cette commande (avec l’URL du serveur et le contenu du TOKEN à la place de XXX) :
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=XXX sh -
Le déploiement de Traefik
Déploiement de Traefik avec accès au dashboard
Pour cela il suffit de suivre les instructions de cette page :
traefik-k3s (ce lien s’ouvre dans une nouvelle fenêtre) par kyzdev (ce lien s’ouvre dans une nouvelle fenêtre)
A kubectl YAML to deploy Traefik on Kubernetes
Mécanisme de répartition de charge
Le mécanisme de charge n’est pas si simple à prendre en main, et à comprendre. Car il existe un LB en interne permettant de rediriger le trafic vers un Pod K3S disponible, et il faut aussi exposer en externe sur une ou plusieurs IP publiques puis répartir aussi également la charge sur les services internes K8S.
Généralement les fournisseurs Cloud possèdent leur propre implémentation LB en connexion directe avec le cluster K8S.
Dans notre petite implémentation K3S il est possible, par exemple d’avoir une ou plusieurs IPs publique par nœud et de faire du DNS round-robin en mode « LB simple ».
J’ai vu aussi des implémentations diverses et variées en utilisant que les nœuds masters et qui redirigent le trafic sur les workers, et j’ai vu aussi l’implémentation inverse. Le mieux reste de toute manière une implémentation dédiée Cloud qui prend en compte la bande passante en entrée et laissent les workers « travailler » et les maîtres répartir la charge des pods (dans un déploiement HA) et respecter la politique d’orchestration des containers.
Conclusion
On aura vu dans cette épisode 1, comment mettre en route un cluster Kubernetes avec Traefik en frontal. Comme vous pouvez vous en douter on est loin d’avoir expliqué pourquoi ce choix dans notre démarche « DevSecOps ». En réalité dans la forêt des technologies « DevOps », il y a beaucoup de choix possibles. C’est donc un cheminement possible parmi des milliers d’autres. Celui-ci ne sera certainement pas adapté pour toutes les situations, ce sera à vous de décider selon votre contexte particulier.
Traefik a été déployé à partir des quelques fichiers de configuration YAML, c’est dans ce sens que l’on commence à poser les fondations d’une IaC : Infrastructure as Code.
Note : N’hésitez pas à faire part de vos commentaires sur le site ou Twitter, ça fait toujours plaisir et j’en profiterai pour améliorer les articles.