Caddy et Traefik : des concurrents sérieux à et HAProxy ? Mickaël Masquelin | Quelques mots sur le laboratoire …

• Unité Mixte de Recherche • 5 tutelles : • Le CNRS • L’Université de Lille • L’Université de Polytechnique HdF • L’Ecole Centrale • Le groupe YNCREA – ISEN • 6 sites géographiquement distants • Environ 500 personnes (chercheurs, ingénieurs, administratifs, étudiants, …)

Mickaël Masquelin – IEMN 10/03/2018 2 Journée thématique “Retours d’expériences” Les objectifs

Mickaël Masquelin – IEMN 10/03/2018 3 Journée thématique “Retours d’expériences” RETOUR D’EXPERIENCE SUR CES NOUVELLES APPLIS WEB QUI FACILITENT LA VIE L’idée est de faire un retour d’expérience sur ces nouvelles applications web qui pointent le bout de leur nez et qui viennent révolutionner un peu le paysage informatique …

Les objectifs

Mickaël Masquelin – IEMN 10/03/2018 4 Journée thématique “Retours d’expériences” RETOUR D’EXPERIENCE SUR CES NOUVELLES APPLIS WEB QUI FACILITENT LA VIE L’idée est de faire un retour d’expérience sur ces nouvelles applications web qui pointent le bout de leur nez et qui viennent révolutionner un peu le paysage informatique …

ESSAYER DE VOUS DONNER QUELQUES PISTES J’espère que vous repartirez de la journée thématique avec pleins d’idées, des envies de changer la manière dont vous travaillez, dont vous déployez vos applications ou vos Les objectifs services dans vos contextes respectifs …

Mickaël Masquelin – IEMN 10/03/2018 5 Journée thématique “Retours d’expériences” RETOUR D’EXPERIENCE SUR CES NOUVELLES APPLIS WEB QUI FACILITENT LA VIE L’idée est de faire un retour d’expérience sur ces nouvelles applications web qui pointent le bout de leur nez et qui viennent révolutionner un peu le paysage informatique …

ESSAYER DE VOUS DONNER QUELQUES PISTES J’espère que vous repartirez de la journée thématique avec pleins d’idées, des envies de changer la manière dont vous travaillez, dont vous déployez vos applications ou vos Les objectifs services dans vos contextes respectifs … ESSAYER DE VOUS CONVAINCRE QU’UNE ARCHITECTURE MICROSERVICES, C’EST BIEN J Docker & co, buzzwords ? Je ne pense pas …

Mickaël Masquelin – IEMN 10/03/2018 6 Journée thématique “Retours d’expériences” On y va ?

Mickaël Masquelin – IEMN 10/03/2018 7 Journée thématique “Retours d’expériences” Go

(http://golang.org)

Mickaël Masquelin – IEMN 10/03/2018 8 Journée thématique “Retours d’expériences” Avantages du langage Go

• Simple à écrire, syntaxe humainement lisible ; • Intègre dans sa conception de base le principe de concurrence et de parallélisme ; • Adapté aux architectures de nouvelles générations (multicoeurs).

Mickaël Masquelin – IEMN 10/03/2018 9 Journée thématique “Retours d’expériences” Quelques applications écrites en Go

Mickaël Masquelin – IEMN 10/03/2018 10 Journée thématique “Retours d’expériences” Caddy

Mickaël Masquelin – IEMN 10/03/2018 11 Journée thématique “Retours d’expériences” Origine de la démarche

Approche Approche Monolithique Microservices

Mickaël Masquelin – IEMN 10/03/2018 12 Journée thématique “Retours d’expériences” Les architectures microservices

• Plusieurs avantages : • Consommation plus efficace des ressources ; • Plus modulaires ; • Mises à jour facilitées. • Composées de plusieurs briques : • Application -> API • Application -> Base de données • Application -> Service partenaire • « Combo » HTTP + API RESTful + JSON (assez souvent)

Mickaël Masquelin – IEMN 10/03/2018 13 Journée thématique “Retours d’expériences” Paysage des serveurs web en Mars 2018

Ce qui nous intéresse …

Mickaël Masquelin – IEMN 10/03/2018 14 Journée thématique “Retours d’expériences” Caddy : présentation et structure

+

+ ServeHTTP() + http.FileServer() =

Mickaël Masquelin – IEMN 10/03/2018 15 Journée thématique “Retours d’expériences” Sous le capot …

Exemple d’illustration :

logHandler(gzipHandler(fileServer))

Handler HTTP

middleware

middleware

Mickaël Masquelin – IEMN 10/03/2018 16 Journée thématique “Retours d’expériences” Environnements d’exécution

Mickaël Masquelin – IEMN 10/03/2018 17 Journée thématique “Retours d’expériences” Pourquoi utiliser Caddy

Simplicité

Sécurité 4S Stabilité « Scalabilité »

Mickaël Masquelin – IEMN 10/03/2018 18 Journée thématique “Retours d’expériences” S comme Simplicité

• Installation :

[root@home ~]# curl ://getcaddy.com | bash -s personal

• Installation « avancée » (avec plugins) [root@home ~]# curl https://getcaddy.com | bash -s personal \ http.cache,http.cors,http.git

Mickaël Masquelin – IEMN 10/03/2018 19 Journée thématique “Retours d’expériences” S comme Simplicité

nginx.conf Caddyfile

Mickaël Masquelin – IEMN 10/03/2018 20 Journée thématique “Retours d’expériences” S comme Simplicité

nginx.conf (php-fpm) Caddyfile (php-fpm)

ext split index

Mickaël Masquelin – IEMN 10/03/2018 21 Journée thématique “Retours d’expériences” S comme Simplicité

nginx.conf (en reverse proxy) Caddyfile (en reverse proxy)

Mickaël Masquelin – IEMN 10/03/2018 22 Journée thématique “Retours d’expériences” S comme Simplicité

• Journalisation (ala Apache) :

log /var/log/caddy/requests.log [format] { rotate_size 50 # Rotation des journaux qd taille > 10 MB rotate_age 366 # Nombre de jours de conservation des logs rotate_keep 20 # Nombre de fichiers de logs à conserver rotate_compress # Compression des journaux }

où [format] = "{>Cf-Connecting-Ip} - [{when}] \"{method} {uri} {proto}\" {status} {size} \"{>Referer}\" \"{>User-Agent}\""

Mickaël Masquelin – IEMN 10/03/2018 23 Journée thématique “Retours d’expériences” S comme Simplicité

• Cache WordPress (plugin WP Super Cache) : rewrite { to /wp-content/cache/supercache/{host}{uri}index-https.html {path} {path}/ /index.php?{query} if {path} not_match ^\/wp-admin to {path} {path}/ /index.php?{query} }

Mickaël Masquelin – IEMN 10/03/2018 24 Journée thématique “Retours d’expériences” S comme Simplicité

• Restrictions IP(v4) : ipfilter / { rule block ip 192.168.1.0-255 172.16.20.0-10 193.49.50.51 blockpage /var/www/html/403.html }

Mickaël Masquelin – IEMN 10/03/2018 25 Journée thématique “Retours d’expériences” S comme Simplicité

• Gestion du Cross Origin Ressources Sharing : cors / { origin https://www.monsite.fr origin http://monsite.fr methods POST,PUT allow_credentials false max_age 3600 allowed_headers X-Custom-Header [...] }

Mickaël Masquelin – IEMN 10/03/2018 26 Journée thématique “Retours d’expériences” S comme Sécurité

Mickaël Masquelin – IEMN 10/03/2018 27 Journée thématique “Retours d’expériences” S comme Sécurité

Mickaël Masquelin – IEMN 10/03/2018 28 Journée thématique “Retours d’expériences” S comme Sécurité

Mickaël Masquelin – IEMN 10/03/2018 29 Journée thématique “Retours d’expériences” Euhhh … et le support du TLS 1.3 ?

Mickaël Masquelin – IEMN 10/03/2018 30 Journée thématique “Retours d’expériences” S comme Sécurité

Source : ZDnet

Mickaël Masquelin – IEMN 10/03/2018 31 Journée thématique “Retours d’expériences” S comme Sécurité

• Ecoute par défaut sur le port tcp/2015

• Supporte la rotation des tickets de sessions

• Supporte le SNI

Mickaël Masquelin – IEMN 10/03/2018 32 Journée thématique “Retours d’expériences” S comme Scalable

• Loadbalancing facile (aléatoire) :

proxy / site-nginx1:80 site-nginx2:80 site-nginx3:80

• Loadbalancing avec du round-robin : proxy / site-nginx1:80 site-nginx2:80 site-nginx3:80 { policy round_robin }

Mickaël Masquelin – IEMN 10/03/2018 33 Journée thématique “Retours d’expériences” S comme Stable

Mickaël Masquelin – IEMN 10/03/2018 34 Journée thématique “Retours d’expériences” Extensible

• Beaucoup de « plugins » : • cors • git • hugo • ipfilter • jsonp • search • metrics • …

Mickaël Masquelin – IEMN 10/03/2018 35 Journée thématique “Retours d’expériences” Côté performances

KS-2E : Intel Atom 2800 (2c/4t) @ 1,86 Ghz OS Version 16.04 LTS 1.10.3-0ubuntu0.16.04.2 0.10.12 (non-commercial use only) 4 Go DDR3 – 100 Mbps

• Protocole de test : [masqueli@laptop ~]# echo "Test "; sleep 30; for i in {1..7}; do /usr/local/bin/h2load -t2 -c200 -m100 -n10000 -v -H 'Accept-Encoding: gzip' https://www.xxxx-xxx.xxx:443 > h2load.$i.webserver.log; cat h2load.$i.webserver.log | awk '/finished in/ {print $4 " req/s "} /requests: / {print ($8/$2*100)"% completees"}' | tr -d '\n'; echo; sleep 30; done;

Mickaël Masquelin – IEMN 10/03/2018 36 Journée thématique “Retours d’expériences” Côté performances

Test nginx Test Caddy

215.66 req/s 100% completees 441.29 req/s 100% completees 215.75 req/s 100% completees 992.23 req/s 100% completees 231.11 req/s 100% completees 1010.82 req/s 100% completees 212.68 req/s 100% completees 1021.35 req/s 100% completees 249.37 req/s 99,5% completees 881.57 req/s 100% completees 206.67 req/s 100% completees 938.86 req/s 100% completees 226.23 req/s 100% completees 1048.38 req/s 100% completees

Mickaël Masquelin – IEMN 10/03/2018 37 Journée thématique “Retours d’expériences” Côté performances

Résultats obtenus avec nginx à nuancer ? Test nginx Test Caddy

215.66 req/s 100% completes 441.29 req/s 100% completes 215.75 req/s 100% completes 992.23 req/s 100% completes 231.11 req/s 100% completes 1010.82 req/s 100% completes 212.68 req/s 100% completes 1021.35 req/s 100% completes 249.37 req/s 99,5% completes 881.57 req/s 100% completes 206.67 req/s 100% completes 938.86 req/s 100% completes 226.23 req/s 100% completes 1048.38 req/s 100% completes

Mickaël Masquelin – IEMN 10/03/2018 38 Journée thématique “Retours d’expériences” Traefik

Mickaël Masquelin – IEMN 10/03/2018 39 Journée thématique “Retours d’expériences” Problématique

Conteneurs

Conteneur

Mickaël Masquelin – IEMN 10/03/2018 40 Journée thématique “Retours d’expériences” Une première réponse ?

Mickaël Masquelin – IEMN 10/03/2018 41 Journée thématique “Retours d’expériences” La solution ?

Mickaël Masquelin – IEMN 10/03/2018 42 Journée thématique “Retours d’expériences” LA solution ?

Mickaël Masquelin – IEMN 10/03/2018 43 Journée thématique “Retours d’expériences” Pourquoi Traefik + Docker ?

Source : https://traefik.io Mickaël Masquelin – IEMN 10/03/2018 44 Journée thématique “Retours d’expériences” C’est compliqué à mettre en œuvre ?

• Extrait d’un fichier docker-compose.yml : traefik: image: traefik:latest command: --web --docker --logLevel=DEBUG ports: - "80:80" - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "/datas/traefik.toml:/etc/traefik/traefik.toml" webapp: image: dockercloud/hello-world labels: - "traefik.port=80" - "traefik.backend=hello" - "traefik.frontend.rule=Host:hello.docker"

Mickaël Masquelin – IEMN 10/03/2018 45 Journée thématique “Retours d’expériences” C’est compliqué à mettre en œuvre ?

• Extrait d’un fichier traefik.toml (minimaliste) :

[docker] domain = "docker" endpoint = "unix:///var/run/docker.sock" watch = true

Mickaël Masquelin – IEMN 10/03/2018 46 Journée thématique “Retours d’expériences” Ca ressemble à quoi ?

10/03/2018 47 Ca ressemble à quoi ?

frontend backend

Mickaël Masquelin – IEMN 10/03/2018 48 Journée thématique “Retours d’expériences” Avantages

Source : https://traefik.io

Mickaël Masquelin – IEMN 10/03/2018 49 Journée thématique “Retours d’expériences” Conclusion

Mickaël Masquelin – IEMN 10/03/2018 50 Journée thématique “Retours d’expériences” Questions ?

Mickaël Masquelin – IEMN 10/03/2018 51 Journée thématique “Retours d’expériences” Références

• Go • https://golang.io/fr/

• Caddy • https://caddyserver.com/

• Traefik • https://traefik.io

Mickaël Masquelin – IEMN 10/03/2018 52 Journée thématique “Retours d’expériences”