Session collante avec Docker Swarm (CE) sur Debian 9

introduction

Docker Swarm transforme vos serveurs individuels en un cluster d'ordinateurs; facilitant la mise à l'échelle, la haute disponibilité et l'équilibrage de charge. L'équilibreur de charge Swarm implémente une stratégie d'équilibrage de charge à tour de rôle, ce qui peut nuire au bon fonctionnement des applications avec état (héritées) qui nécessitent une certaine forme de sessions persistantes pour permettre une configuration hautement disponible avec plusieurs instances. Docker Enterprise Edition prend en charge la session persistante Layer-7, mais dans ce guide, nous nous concentrerons sur la version gratuite (CE) de Docker. Pour implémenter des sessions persistantes, nous utiliserons Traefik.

Conditions préalables

  • Au moins deux instances Debian 9 fraîchement déployées et mises à jour dans le même sous-réseau avec mise en réseau privée activée
  • Docker CE installé sur ces instances
  • Les instances doivent faire partie du même Swarm et doivent pouvoir communiquer entre elles via le réseau privé
  • Connaissance préalable de Docker et Docker Swarm
  • Un utilisateur non root avec des sudodroits (facultatif mais il est fortement déconseillé d'utiliser l'utilisateur root)

Dans ce didacticiel, nous utiliserons deux instances Vultr avec des adresses IP privées 192.168.0.100et 192.168.0.101. Les deux sont des nœuds de gestionnaire Docker Swarm (ce qui n'est pas idéal pour la production mais suffisant pour ce tutoriel).

Qui suis je

Ce didacticiel utilise l' jwilder/whoamiimage de docker comme application de démonstration. Ce conteneur simple répondra à un appel REST avec le nom du conteneur répondant, ce qui permet de tester très facilement si les sessions persistantes fonctionnent. Cette image n'est évidemment utilisée qu'à des fins de démonstration et doit être remplacée par l'image de votre propre application.

Le service whoami est configuré comme suit:

sudo docker network create whoaminet -d overlay
sudo docker service create --name whoami-service --mode global --network whoaminet --publish "80:8000"  jwilder/whoami
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

Si nous avons ensuite curlle point de terminaison whoami REST à http://192.168.0.100/, nous pouvons voir l'équilibrage de charge à tour de rôle de Docker Swarm à l'œuvre:

curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3

Il est inutile de tester cela avec des navigateurs modernes comme Chrome ou Firefox, car ils sont conçus pour maintenir les connexions en vie, et l'équilibreur de charge Docker Swarm ne basculera sur l'autre conteneur qu'à chaque nouvelle connexion. Si vous souhaitez tester cela avec un navigateur, vous devrez attendre au moins 30 secondes pour que la connexion se ferme avant de l'actualiser à nouveau.

Configuration de Traefik

Traefik prend en charge nativement Docker Swarm, il peut détecter et enregistrer ou désenregistrer des conteneurs à la volée et il communique avec votre application via le réseau de superposition interne. Traefik a besoin de quelques informations sur votre application avant de pouvoir commencer à traiter les demandes. Ces informations sont fournies à Traefik en ajoutant des étiquettes à votre service Swarm:

sudo docker service update --label-add "traefik.docker.network=whoaminet" --label-add "traefik.port=8000" --label-add "traefik.frontend.rule=PathPrefix:/" --label-add "traefik.backend.loadbalancer.stickiness=true" whoami-service

La liste suivante décrit la signification de chaque étiquette:

  • traefik.docker.network : Le réseau de superposition Docker, sur lequel Traefik communiquera avec votre service
  • traefik.port : Le port sur lequel votre service écoute (c'est le port exposé en interne, pas le port publié)
  • traefik.frontend.rule: PathPrefix:/ lie la racine de contexte ' /' à ce service
  • traefik.backend.loadbalancer.stickiness : Permet des sessions persistantes pour ce service

Maintenant que le whoami-servicea été configuré avec les étiquettes requises, nous pouvons ajouter le service Traefik à l'essaim:

sudo docker service create --name traefik -p8080:80 -p9090:8080 --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock --mode=global --constraint 'node.role == manager' --network whoaminet traefik --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG

Cette commande fait beaucoup de choses à la fois, comme le montre la liste suivante:

  • --name traefik : Le nom de notre nouveau service Docker est Traefik
  • -p8080:80: Nous publions le port de Traefik 80au port 8080car le port 80est déjà utilisé par notre service whoami
  • -p9090:8080 : Nous publions la propre interface Web de Traefik pour le portage 9090
  • --mount ... : Nous montons le Docker Socket dans le conteneur afin que Traefik puisse accéder au runtime Docker de l'hôte
  • --global : Nous voulons des conteneurs Traefik sur chaque nœud gestionnaire pour des raisons de haute disponibilité
  • --constraint 'node.role == manager': Nous souhaitons que Traefik s'exécute uniquement sur les nœuds de gestionnaire, car les nœuds de travail ne peuvent pas fournir à Traefik les informations dont il a besoin. Par exemple, docker service lssur un nœud de travail ne fonctionne pas, Traefik ne pourrait même pas découvrir quels services sont en cours d'exécution
  • --network whoaminet: Connectez Traefik au même réseau que le nôtre whoami-service, sinon il ne peut pas s'y connecter. Nous avons précédemment dit à Traefik de se connecter à notre service sur ce réseau avec le traefik.docker.networklabel
  • traefik : Indiquer à docker d'utiliser la dernière image de docker Traefik pour ce service
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Les arguments de ligne de commande sont passés directement à Traefik pour lui permettre de s'exécuter en mode Swarm Docker. DEBUGest facultatif ici, mais intéressant lors de la configuration, et pour ce tutoriel

Il ne reste plus qu'à ouvrir les ports nécessaires dans le pare-feu Debian:

sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 9090 -j ACCEPT

Comment ça fonctionne

Dès que Traefik démarre, vous pouvez voir dans les journaux que Traefik découvre les deux whoamiconteneurs. Il génère également le nom du cookie qu'il utilisera pour gérer la session persistante:

time="2018-11-25T13:17:30Z" level=debug msg="Configuration received from provider docker: {\"backends\":{\"backend-whoami-service\":{\"servers\":{\"server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05\":{\"url\":\"http://10.0.0.5:8000\",\"weight\":1},\"server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6\":{\"url\":\"http://10.0.0.4:8000\",\"weight\":1}},\"loadBalancer\":{\"method\":\"wrr\",\"stickiness\":{}}}},\"frontends\":{\"frontend-PathPrefix-0\":{\"entryPoints\":[\"http\"],\"backend\":\"backend-whoami-service\",\"routes\":{\"route-frontend-PathPrefix-0\":{\"rule\":\"PathPrefix:/\"}},\"passHostHeader\":true,\"priority\":0,\"basicAuth\":null}}}"
time="2018-11-25T13:17:30Z" level=debug msg="Wiring frontend frontend-PathPrefix-0 to entryPoint http"
time="2018-11-25T13:17:30Z" level=debug msg="Creating backend backend-whoami-service"
time="2018-11-25T13:17:30Z" level=debug msg="Adding TLSClientHeaders middleware for frontend frontend-PathPrefix-0"
time="2018-11-25T13:17:30Z" level=debug msg="Creating load-balancer wrr"
time="2018-11-25T13:17:30Z" level=debug msg="Sticky session with cookie _a49bc"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05 at http://10.0.0.5:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6 at http://10.0.0.4:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating route route-frontend-PathPrefix-0 PathPrefix:/"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :80"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :8080"

Si nous nous recroquevillons, http://192.168.0.100:8080nous pouvons voir qu'un nouveau cookie,, _a49bca été défini:

curl -v http://192.168.0.100:8080
* About to connect() to 192.168.0.100 port 8080 (#0)
*   Trying 192.168.0.100...
* Connected to 192.168.0.100 (192.168.0.100) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.100:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 17
< Content-Type: text/plain; charset=utf-8
< Date: Sun, 25 Nov 2018 13:18:40 GMT
< Set-Cookie: _a49bc=http://10.0.0.5:8000; Path=/
<
I'm a6a8c9294fc3
* Connection #0 to host 192.168.0.100 left intact

Si, lors d'appels ultérieurs, nous envoyons ce cookie à Traefik, nous serons toujours transférés vers le même conteneur:

curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3

Le cookie ne contient que l'adresse IP interne du conteneur auquel Traefik doit envoyer pour demander. Si vous passez à la valeur du cookie en http://10.0.0.4:8000, la demande serait effectivement transmise à l'autre conteneur. Si le cookie ne devait jamais être renvoyé à Traefik, la session persistante ne fonctionnera pas et les demandes seront équilibrées entre les conteneurs de l'application et les conteneurs Traefik.

C'est tout ce qui est nécessaire pour configurer des sessions persistantes de couche 7 dans Docker CE sur Debian 9.



Installer Docker sur Ubuntu 14.04

Installer Docker sur Ubuntu 14.04

Vous utilisez un système différent? Docker est une application qui permet de déployer des programmes exécutés en tant que conteneurs. Il a été écrit dans le populaire programme Go

Configuration de Sentry via Docker sur Ubuntu 16.04

Configuration de Sentry via Docker sur Ubuntu 16.04

Vous utilisez un système différent? Introduction Sentry est une solution open source pour le suivi des erreurs. Sentry suit les exceptions et autres messages utiles

Déployer une application PHP à laide de Docker-compose

Déployer une application PHP à laide de Docker-compose

Les applications PHP sont généralement composées dun serveur Web, dun système de base de données relationnelle et de linterpréteur de langage lui-même. Dans ce tutoriel, nous serons leveragin

Installer Rancher Server sur RancherOS

Installer Rancher Server sur RancherOS

Présentation RancherOS est un système dexploitation incroyablement léger (seulement environ 60 Mo) qui exécute un démon Docker système en tant que PID 0 pour exécuter les services système

Comment utiliser Docker: création de votre premier conteneur Docker

Comment utiliser Docker: création de votre premier conteneur Docker

Ce didacticiel explique les bases de la prise en main de Docker. Je suppose que Docker est déjà installé. Les étapes de ce didacticiel fonctionnent sur un

Équilibrage de charge avec Docker

Équilibrage de charge avec Docker

Lorsque vous exécutez une application Web, vous souhaitez normalement tirer le meilleur parti de vos ressources sans avoir à convertir votre logiciel pour utiliser le multithreading o

Sur CoreOS, configurez votre propre registre Docker

Sur CoreOS, configurez votre propre registre Docker

Nous connaissons et aimons tous Docker, une plateforme pour créer, gérer et distribuer des conteneurs dapplications sur plusieurs machines. Docker Inc. fournit un service t

Déployer une application Node.js à laide de Docker

Déployer une application Node.js à laide de Docker

Cet article vous montrera comment déployer votre application Node dans un conteneur Docker. Remarque: ce didacticiel suppose que Docker est installé et lu

Installer Rancher OS via iPXE

Installer Rancher OS via iPXE

Rancher OS est une distribution Linux très légère construite autour de Docker. LOS lui-même pèse environ 20 Mo. Ce tutoriel vous permettra de devenir opérationnel avec

Déployer Kubernetes avec Kubeadm sur CentOS 7

Déployer Kubernetes avec Kubeadm sur CentOS 7

Présentation Cet article est destiné à vous aider à obtenir un cluster Kubernetes opérationnel avec kubeadm en un rien de temps. Ce guide déploiera deux serveurs, sur

Installation de docker-compose sur CoreOS

Installation de docker-compose sur CoreOS

Cet article explique comment installer docker-compose sur CoreOS. Dans CoreOS, le dossier / usr / est immuable, donc le chemin standard / usr / local / bin nest pas disponible pour

Comment installer Harbor sur CentOS 7

Comment installer Harbor sur CentOS 7

Harbor est un serveur de registre de classe entreprise open source qui stocke et distribue des images Docker. Harbor étend la distribution open source Docker b

Installer Docker CE sur Ubuntu 18.04

Installer Docker CE sur Ubuntu 18.04

Introduction Docker est une application qui nous permet de déployer des programmes exécutés en tant que conteneurs. Il a été écrit dans le langage de programmation Go populaire

Créer un essaim Docker sur Alpine Linux 3.9.0

Créer un essaim Docker sur Alpine Linux 3.9.0

Introduction Ce guide vous montrera comment créer et configurer un essaim Docker à laide de plusieurs serveurs Alpine Linux 3.9.0 et Portainer. Veuillez noter que

Premiers pas avec SQL Server 2017 (MS-SQL) sur CentOS 7 avec Docker

Premiers pas avec SQL Server 2017 (MS-SQL) sur CentOS 7 avec Docker

Prérequis Docker engine 1.8+. Minimum de 4 Go despace disque. Minimum de 4 Go de RAM. Étape 1. Installer Docker Pour installer SQL-Server, Docker mus

Premiers pas avec Kubernetes sur CentOS 7

Premiers pas avec Kubernetes sur CentOS 7

Kubernetes est une plate-forme open source développée par Google pour gérer les applications conteneurisées sur un cluster de serveurs. Il s’appuie sur une décennie et

Installer Rancher sur Ubuntu 16.04

Installer Rancher sur Ubuntu 16.04

Vous utilisez un système différent? Introduction Rancher est une plate-forme open source pour exécuter des conteneurs et créer un service de conteneurs privé. Léleveur est la base

Installation de Docker CE sur CentOS 7

Installation de Docker CE sur CentOS 7

La technologie de conteneur Docker vous permet dexécuter des applications dans un environnement spécifique et isolé. Docker Community Edition (CE) est le nouveau nom du fre

Installer Docker CE sur Debian 9

Installer Docker CE sur Debian 9

Vous utilisez un système différent? Introduction Docker est une application qui permet le déploiement de logiciels dans des conteneurs virtuels. Il a été écrit dans le G

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

Les attaques de ransomware sont en augmentation, mais l'IA peut-elle aider à lutter contre le dernier virus informatique ? L'IA est-elle la réponse ? Lisez ici, sachez que l'IA est un boone ou un fléau

ReactOS : est-ce lavenir de Windows ?

ReactOS : est-ce lavenir de Windows ?

ReactOS, un système d'exploitation open source et gratuit est ici avec la dernière version. Cela peut-il suffire aux besoins des utilisateurs de Windows modernes et faire tomber Microsoft ? Découvrons-en plus sur cet ancien style, mais une expérience de système d'exploitation plus récente.

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Whatsapp a finalement lancé l'application de bureau pour les utilisateurs Mac et Windows. Vous pouvez désormais accéder facilement à Whatsapp depuis Windows ou Mac. Disponible pour Windows 8+ et Mac OS 10.9+

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Lisez ceci pour savoir comment l'intelligence artificielle devient populaire parmi les petites entreprises et comment elle augmente les probabilités de les faire grandir et de donner à leurs concurrents un avantage.

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

Récemment, Apple a publié macOS Catalina 10.15.4, une mise à jour supplémentaire pour résoudre les problèmes, mais il semble que la mise à jour cause davantage de problèmes, ce qui entraîne le bridage des machines mac. Lisez cet article pour en savoir plus

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux d'extraction de données de Big Data

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Notre ordinateur stocke toutes les données d'une manière organisée connue sous le nom de système de fichiers de journalisation. C'est une méthode efficace qui permet à l'ordinateur de rechercher et d'afficher des fichiers dès que vous appuyez sur la recherche.https://wethegeek.com/?p=94116&preview=true

Singularité technologique : un futur lointain de la civilisation humaine ?

Singularité technologique : un futur lointain de la civilisation humaine ?

Alors que la science évolue à un rythme rapide, prenant le pas sur une grande partie de nos efforts, les risques de nous soumettre à une Singularité inexplicable augmentent également. Lisez, ce que la singularité pourrait signifier pour nous.

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques d'analyse des mégadonnées : partie 1

Limpact de lintelligence artificielle dans les soins de santé 2021

Limpact de lintelligence artificielle dans les soins de santé 2021

L'IA dans le domaine de la santé a fait de grands progrès au cours des dernières décennies. Ainsi, l'avenir de l'IA dans les soins de santé continue de croître de jour en jour.