Création et utilisation d'un cluster Kubernetes "Kapsule" sur Scaleway
L'objet de ce document est de présenter la création et l'utilisation d'un cluster kubernetes managé fonctionnel chez Scaleway, en donnant un exemple adaptable et reproductible de déploiement d'application avec stockage (stateful) et accès externe via un certificat TLS automatiquement et dynamiquement généré par Let's Encrypt.
Pré requis
Cloner ce dépôt pour avoir les fichiers yaml nécessaires à son utilisation.
Création du cluster
Aller sur https://console.scaleway.com/kapsule/clusters, créer un cluster avec 2 noeuds "Development" (DEV1-M). Ne pas installer de contrôleur "ingress".
Connexion et manipulation du cluster
Installer kubectl sur votre poste de travail : https://kubernetes.io/fr/docs/tasks/tools/install-kubectl . Il faut également installer sur votre poste l'outil helm pour déployer les helm charts : https://helm.sh/docs/intro/install .
Enregistrer le fichier "Kubeconfig" propre à votre cluster avec le chemin $HOME/.kube/config
(config est le nom du fichier, pas un dossier), ainsi les commandes kubectl et helm permettront de manipuler votre cluster directement.
Installation de traefik et création d'une application de démo
Traefik doit être installé à part, à partir de sa "helm chart" afin de garantir la stabilité de la configuration dans le temps. Installer traefik avec la configuration permettant d'utiliser Let's Encrypt :
helm install traefik traefik/traefik
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.1/cert-manager.yaml
Source : https://traefik.io/blog/secure-web-applications-with-traefik-proxy-cert-manager-and-lets-encrypt/
Exposition du cluster via une ressource de type "load balancer" et le gestionnaire de certificat Let's Encrypt
L'installation de Traefik crée automatiquement une ressource "load balancer" sur le cluster.
Obtenir l'adresse IP publique du load balancer (EXTERNAL-IP sur la ligne de type LoadBalancer) :
kubectl get svc -n kube-system
... ou regarder l'IP associée au load balancer dans la console scaleway.
Enregistrer cette IP dans le DNS Scaleway :
Name | Type | Data | TTL | Priority |
---|---|---|---|---|
<sous_domaine_du_cluster> | A | IP publique du cluster | 3600 | 0 |
*.<sous_domaine_du_cluster> | A | IP publique du cluster | 3600 | 0 |
Déploiement complet d'une application de test
Modifier le nom d'hôte "whoami.air.alpha.grandlyon.com" dans le fichier "demo/whoami.yml".
kubectl apply -f demo/whoami.yml