Les sidecars Kubernetes
Ma problématique : utiliser nginx comme reverse proxy pour exposer une application Django tournant sur un serveur uWSGI, ainsi que ses statics afin de limiter les requêtes HTTP.
Un side-car fait référence à un siège attaché à une moto afin qu’ils puissent transporter un passager ou du matériel. C’est donc un objet qui s’attache à un autre et, ainsi, en fait partie. Le but principal de l’objet auxiliaire est d’aider le principal.
Kubernetes propose ce modèle side-car, qui utilise l’un des composants les
plus puissants de Kubernetes : le Pod
. Les conteneurs hébergés sur le même pod
partagent la même adresse réseau. Tous les conteneurs du même pod peuvent se
connecter les uns aux autres via l’adresse localhost de la même manière que les
processus communiquent entre eux via HTTP sur la même machine.
Je vais donc utiliser ce principe. Je vais créer un pod qui héberge deux conteneurs, un pour l’application principale tournant sous gunicorn et un conteneur annexe expose le site via un reverse proxy Nginx.
Mise en oeuvre du side-car
Je vais simplifier en prenant une simple application Flask tournant également sur un serveur uWSGI en l’occurence gunicorn.
L’application est composée d’un fichier mainapp.py
:
et son Dockerfile
On construit l’image et on la lance pour tester que tout fonctionne :
Mon application tourne ! Maintenant passons à la partie Kubernetes. Commençons par créer un namespace :
Kubens permet de switcher de namespace facilement. Pour l’installer rien de plus simple avec asdf :
Passons à l’écriture du deployment, dans le fichier app-deployment.yml
:
Voici la configuration nginx permettant d’exposer l’application Django
On charge le tout dans le configmap :
On charge le déployment :
On retrouve bien deux conteneurs accrochés au pod app.
Exposons le service. Pour cela créer un fichier app-service.yaml
Chargeons-le et exposons-le :
Dans un autre terminal :
Cool ça fonctionne :). Pour arrêter le port forwarding un simple CTRL + C.
Et pour les statics on a rien dedans. Utilisons un initContainer pour créer un fichier dedans. Dans le fichier app-deployment.yml ajoutez ceci :
Appliquons-le et testons :
Je suis sûr que vous allez trouver des applications à l’utilisation de sidecar dans vos applications hébergé dans des clusters Kubernetes. A la prochaine.