Hackaethon et Traefik Labs
Quand on parle conteneurs et HTTP, Traefik est sans conteste le reverse proxy HTTP le plus populaire. Un binaire statique qui se lance partout, se configure dynamiquement en fonction d'événements (reçus par un daemon docker ou un cluster k8s) et qui en prime gère nativement Let's Encrypt, c'est le pied. La beauté de l'histoire, c'est que Traefik est un produit open-source (MIT), soutenu par Traefik Labs (anciennement containous.io).
Au hasard d'un scroll sur Twitter, je suis tombé sur une publication du compte @TraefikLabs. La société préparait l'organisation d'un hackathon dédié à Traefik. Et en bon gopher que je suis, je ne pouvais que sauter sur l'occasion.
Un hackathon (ou marathon de programmation comme le disait Molière) est un évènement qui dure généralement quelques jours, dans lequel un groupe de développeurs travaille ensemble autour d'un même sujet. Le but est de concentrer les efforts sur un temps très court et d'avancer rapidement sur les thématiques choisies.
Ce Hackaethon s'est déroulé sur trois jours, du 20 au 22 Octobre dernier (crise sanitaire oblige, chacun est resté tranquillement chez soi durant ces trois jours). Le principal enjeu pour Traefik Labs était de booster le catalogue de plugins pour Traefik. En effet, depuis la version 2.3, du reverse proxy, des plugins communautaires peuvent être branchés sur le reverse proxy pour en étendre les fonctionnalités (l'un d'eux permet par exemple de modifier les en-têtes HTTP d'un paquet).
Pour Bearstech, utilisateur de Traefik en production depuis la version 1, la participation d'ours à ces évènements est importante, car elle illustre par des actions directes notre engagement pour le logiciel libre.
La veille du hackaethon, un mail invite les participants à rejoindre un salon Discord créé pour l'occasion. Des messages postés par les membres de l'équipe de Traefik Labs nous accueillent chaleureusement.
Jour J
Le jour J, il est environ 14h, heure locale, quand l'évènement débute. Nous sommes une bonne vingtaine à être présents sur le Discord et certaines idées commencent à germer. Une grande partie des participants s'oriente vers la conception de plugins. Le reste se partage la documentation et des modifications dans le code de Traefik.
Des groupes se forment pour travailler sur des sujets communs et chacun débute le code. Le tout est dirigé par Kevin Crawley , developer advocate chez Traefik Labs, rejoint petit à petit par ses collègues développeurs.
Les échanges se font sur les canaux de discussions publiques du salon Discord. Tout le monde peut participer et répondre aux questions des uns et des autres, créant ainsi une ambiance communautaire proche d'un hackathon physique.
De mon côté, je me suis chargé d'une fonctionnalité proposée il y a quelque temps par mon collègue Mathieu. L'idée principale est d'étendre les sorties journaux supportées par Traefik. Côté logs, Traefik fait pour le moment le minimum : c'est au choix un fichier ou la sortie standard. Cependant, la notion de logs s'étend aujourd'hui à plus qu'une simple ligne dans un fichier. Logstash, Fluentd, par exemple, permettent d'avoir des logs typés, structurés et indexés (Vous pouvez retrouver la présentation de Fluentd ici ).
La demande étant appuyée régulièrement par d'autres utilisateurs, l'équipe a accepté que je travaille sur cet ajout. En guise d'expérimentation, j'ai choisi d'ajouter dans un premier temps le support de fluent.
Do you speak fluent ?
La première journée m'a permis de prendre en main le code de Traefik, la suite de tests et les recettes Makefile. Côté logging, Traefik a choisi logrus
qui, il y a quelques années, était LA référence pour les logs en Go. Même si elle est maintenant en mode maintenance, la librairie est mature et possède plusieurs hooks pour brancher les logs en fonction des besoins. En fouillant, on trouve rapidement logrus_fluent , qui implémente les hooks logrus
pour fluentd
, bingo !
Deuxième jour, je commence par une revue rapide du code de logrus_fluent
et de fluent-logger-golang , la librarie officielle fluent utilisée, in fine, pour envoyer les messages depuis logrus
vers fluentd
. Assez rapidement, j'identifie la fonction responsable de la configuration des logs et je commence à ajouter le support de fluent. Grâce aux conteneurs, je peux rapidement lancer une instance de fluentd
pour m'assurer que les messages sont correctement réceptionnés.
En Go, les tests unitaires, c'est culturel. L'outil de test go test
est standard et ne donne aucune excuse, même aux plus flemmards. J'entâme avec courage l'écriture du test permettant de valider mes ajouts. Après discussion avec l'équipe, il a été décidé de commencer par un mockup minimaliste de fluentd
. Et c'est là que les galères commencent...
Fluent utilise message pack, un format binaire qui discute directement en TCP. Impossible donc de passer par les helpers comme httptest
, il faut se farcir le tout à l'ancienne. Heureusement, durant le dernier jour, j'ai pu achever ce mockup de fluentd
! Tout fonctionne :thumbsup:
Certes, il reste des morceaux de code à peaufiner, et probablement un test d'intégration, mais ce n'est pas le plus important. Avant tout chose, ce hackathon m'a permis de me focaliser intensément sur Traefik, de proposer une pull-request et de dialoguer directement avec l'équipe pour que l'ensemble avance rapidement, dans la bonne direction.
De la technique et des échanges
Au-delà des aspects techniques, cet évènement a mis en avant l'aspect humain du logiciel libre et de la communauté derrière Traefik. Durant trois jours, tout le monde a travaillé d'arrache-pied, avec le soutien continu de Patricia , head of commmunity , chez Traefik Labs.
L'équipe interne a été très disponible pour répondre aux questions des participants, ce qui a grandement contribué au bon déroulement de ce hackathon. Ces échanges sont très utiles pour accueillir de nouveaux contributeurs (aka Traefik Ambassadors ), potentiellement récurrents au sein du projet.
Pour l'année prochaine, je conseille à l'équipe d'ajouter une courte intervention vidéo, au début et à la fin de l'événement. À mon sens, cela contribuerait à développer agréablement le côté humain du hackathon.
Pour finir, j'adresse un grand merci à l'équipe Traefik Labs et aux participants pour ces jours intenses. Rendez-vous sur Twitter pour une photo des goodies dès réception (@MarcelMonfort et @bearstech) ! On se retouve l'année prochaine pour la seconde édition !
Crédit Image Hackaethon 2020 : Traefik Labs
Crédit Image Bureau : Wilfried Ollivier