Sticky Session With Docker Swarm (CE) op Debian 9

Invoering

Docker Swarm verandert uw individuele servers in een cluster van computers; het faciliteren van schaalbaarheid, hoge beschikbaarheid en taakverdeling. De Swarm load-balancer implementeert een round-robin load-balancing-strategie, en dit kan de correcte werking van (legacy) stateful applicaties die een vorm van plakkerige sessies vereisen, verstoren om een ​​hoog beschikbare setup met meerdere instanties mogelijk te maken. Docker Enterprise Edition ondersteunt Layer-7 kleverige sessie, maar in deze handleiding zullen we ons concentreren op de gratis (CE) versie van Docker. Om plakkerige sessies te implementeren, gebruiken we Traefik.

Vereisten

  • Ten minste twee vers geïmplementeerde en bijgewerkte Debian 9-instanties in hetzelfde subnet met privénetwerken ingeschakeld
  • Docker CE is geïnstalleerd op deze instanties
  • De instanties moeten deel uitmaken van dezelfde Swarm en moeten via het particuliere netwerk met elkaar kunnen communiceren
  • Voorkennis van Docker en Docker Swarm
  • Een niet-rootgebruiker met sudorechten (optioneel, maar het wordt sterk aangeraden om de rootgebruiker niet te gebruiken)

In deze tutorial gebruiken we twee Vultr-instanties met privé IP-adressen 192.168.0.100en 192.168.0.101. Beiden zijn Docker Swarm-manager-nodes (wat niet ideaal is voor productie maar voldoende voor deze tutorial).

Wie ben ik

In deze zelfstudie wordt de jwilder/whoamidocker-afbeelding gebruikt als demotoepassing. Deze eenvoudige container reageert op een REST-aanroep met de naam van de reagerende container, waardoor het heel gemakkelijk is om te testen of de kleverige sessies werken. Deze afbeelding wordt uiteraard alleen gebruikt voor demodoeleinden en moet worden vervangen door de afbeelding van uw eigen applicatie.

De whoami-service is als volgt geconfigureerd:

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

Als we vervolgens curlhet whoami REST-eindpunt zien http://192.168.0.100/, kunnen we de round-robin load-balancing van Docker Swarm aan het werk zien:

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

Het heeft geen zin om dit te testen met moderne browsers zoals Chrome of Firefox, omdat ze zijn ontworpen om verbindingen levend te houden, en de Docker Swarm-load-balancer schakelt bij elke nieuwe verbinding alleen over naar de andere container . Als u dit met een browser wilt testen, moet u ten minste 30 seconden wachten voordat de verbinding wordt verbroken voordat u de pagina opnieuw ververst.

Traefik opzetten

Traefik ondersteunt native Docker Swarm, het kan containers on-the-fly detecteren en registreren of uitschrijven en het communiceert met uw applicatie via het interne overlay-netwerk. Traefik heeft wat informatie over uw aanvraag nodig voordat het aanvragen kan verwerken. Deze informatie wordt aan Traefik verstrekt door labels toe te voegen aan uw Swarm-service:

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

De volgende lijst beschrijft wat elk label betekent:

  • traefik.docker.network : Het Docker-overlay-netwerk waarover Traefik met uw service zal communiceren
  • traefik.port : De poort waarop uw service luistert (dit is de intern blootgestelde poort, niet de gepubliceerde poort)
  • traefik.frontend.rule: PathPrefix:/ bindt de context root ' /' aan deze service
  • traefik.backend.loadbalancer.stickiness : Maakt sticky-sessies mogelijk voor deze service

Nu het whoami-serviceis geconfigureerd met de vereiste labels, kunnen we de Traefik-service aan de zwerm toevoegen:

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

Deze opdracht doet heel veel dingen tegelijk, zoals wordt weergegeven in de volgende lijst:

  • --name traefik : De naam van onze nieuwe Docker-service is Traefik
  • -p8080:80: We publiceren de poort 80naar poort van Traefik 8080omdat de poort 80al in gebruik is door onze whoami-service
  • -p9090:8080 : We publiceren Traefik's eigen webinterface naar poort 9090
  • --mount ... : We monteren de Docker Socket in de container zodat Traefik toegang heeft tot de Docker-runtime van de host
  • --global : We willen Traefik-containers op elk manager-knooppunt om redenen van hoge beschikbaarheid
  • --constraint 'node.role == manager': We willen alleen dat Traefik op manager-nodes draait omdat worker-nodes Traefik niet de informatie kunnen geven die het nodig heeft. Bijvoorbeeld, docker service lseen werknemer knooppunt niet werkt, dus Traefik zou niet eens in staat om te ontdekken welke services worden uitgevoerd
  • --network whoaminet: Verbind Traefik met hetzelfde netwerk als het onze whoami-service, anders kan het er geen verbinding mee maken. We hebben Traefik eerder gezegd om via dit netwerk met het traefik.docker.networklabel verbinding te maken met onze service
  • traefik : Vertel docker om de nieuwste Traefik-docker-image te gebruiken voor deze service
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Opdrachtregelargumenten worden rechtstreeks aan Traefik doorgegeven zodat het in de zwermmodus Docker kan worden uitgevoerd. DEBUGis hier optioneel, maar interessant tijdens de installatie en voor deze zelfstudie

Het enige dat u hoeft te doen, is de nodige poorten in de Debian-firewall openen:

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

Hoe het werkt

Zodra Traefik opstart, kun je in de logs zien dat Traefik de twee whoamicontainers ontdekt . Het voert ook de cookienaam uit die het zal gebruiken om de kleverige sessie af te handelen:

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"

Als we omkrullen, kunnen http://192.168.0.100:8080we zien dat er een nieuwe cookie _a49bcis ingesteld:

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

Als we bij volgende oproepen deze cookie naar Traefik sturen, worden we altijd doorgestuurd naar dezelfde container:

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

De cookie bevat niets anders dan het interne IP-adres van de container waarnaar Traefik moet sturen om op te vragen. Als u de cookiewaarde wijzigt in http://10.0.0.4:8000, wordt het verzoek effectief doorgestuurd naar de andere container. Als de cookie nooit opnieuw zou worden verzonden naar Traefik, zal de kleverige sessie niet werken en zullen de verzoeken worden uitgebalanceerd tussen de containers van de applicatie en de Traefik-containers.

Dat is alles wat nodig is om Layer 7 Sticky Sessions in Docker CE op Debian 9 in te stellen.



Installeer Rancher Server op RancherOS

Installeer Rancher Server op RancherOS

Overzicht RancherOS is een ongelooflijk lichtgewicht besturingssysteem (slechts ongeveer 60 MB) dat een systeem Docker-daemon draait als PID 0 voor het uitvoeren van systeemservices

Harbor installeren op CentOS 7

Harbor installeren op CentOS 7

Harbor is een open-source registerserver van ondernemingsklasse die Docker-images opslaat en distribueert. Harbor breidt de open source Docker Distribution uit b

Docker installeren op Ubuntu 14.04

Docker installeren op Ubuntu 14.04

Gebruikt u een ander systeem? Docker is een applicatie waarmee programmas kunnen worden geïmplementeerd die als containers worden uitgevoerd. Het is geschreven in het populaire Go-programma

Implementeer een Node.js-applicatie met Docker

Implementeer een Node.js-applicatie met Docker

Dit artikel laat zien hoe u uw Node-toepassing kunt implementeren in een Docker-container. Opmerking: in deze zelfstudie wordt ervan uitgegaan dat Docker is geïnstalleerd en gelezen

Installeer Rancher op Ubuntu 16.04

Installeer Rancher op Ubuntu 16.04

Gebruikt u een ander systeem? Introductie Rancher is een open source platform voor het draaien van containers en het bouwen van een eigen containerservice. Rancher is basis

Implementeer Kubernetes met Kubeadm op CentOS 7

Implementeer Kubernetes met Kubeadm op CentOS 7

Overzicht Dit artikel is bedoeld om u te helpen in een mum van tijd een Kubernetes-cluster aan de praat te krijgen met kubeadm. In deze handleiding worden twee servers geïmplementeerd

Docker-compose installeren op CoreOS

Docker-compose installeren op CoreOS

In dit artikel wordt uitgelegd hoe u docker-compose installeert op CoreOS. In CoreOS is de map / usr / onveranderlijk, dus het standaard / usr / local / bin-pad is niet beschikbaar voor

Implementeer en beheer LXC-containers veilig op Ubuntu 14.04

Implementeer en beheer LXC-containers veilig op Ubuntu 14.04

LXC-containers (Linux-containers) zijn een besturingssysteemfunctie in Linux die kan worden gebruikt om meerdere geïsoleerde Linux-systemen op één host uit te voeren. Thes

Installeer Docker CE op Ubuntu 18.04

Installeer Docker CE op Ubuntu 18.04

Inleiding Docker is een applicatie waarmee we programmas kunnen implementeren die als containers worden uitgevoerd. Het is geschreven in de populaire programmeertaal Go

Docker installeren op CentOS 7

Docker installeren op CentOS 7

Gebruikt u een ander systeem? Docker is een applicatie waarmee software kan worden geïmplementeerd in virtuele containers. Het is geschreven in het Go-programma

Aan de slag met Kubernetes op CentOS 7

Aan de slag met Kubernetes op CentOS 7

Kubernetes is een open-sourceplatform dat is ontwikkeld door Google voor het beheren van container-apps op een cluster van servers. Het bouwt voort op een decennium en

Stel Sentry in via Docker op Ubuntu 16.04

Stel Sentry in via Docker op Ubuntu 16.04

Gebruikt u een ander systeem? Introductie Sentry is een open source-oplossing voor het volgen van fouten. Sentry houdt uitzonderingen en andere nuttige berichten bij

Hoe Docker te gebruiken: uw eerste Docker-container maken

Hoe Docker te gebruiken: uw eerste Docker-container maken

Deze tutorial legt de basisprincipes van het starten met Docker uit. Ik neem aan dat Docker al is geïnstalleerd. Stappen in deze tutorial werken op een

Load Balance met Docker

Load Balance met Docker

Wanneer u een webtoepassing uitvoert, wilt u normaal gesproken het meeste uit uw bronnen halen zonder dat u uw software hoeft te converteren om multithreading o te gebruiken

Docker CE installeren op CentOS 7

Docker CE installeren op CentOS 7

Dankzij Docker-containertechnologie kunt u applicaties uitvoeren in een specifieke en geïsoleerde omgeving. Docker Community Edition (CE) is de nieuwe naam voor de fre

Maak een Docker Swarm op Alpine Linux 3.9.0

Maak een Docker Swarm op Alpine Linux 3.9.0

Inleiding In deze handleiding wordt uitgelegd hoe u een Docker-zwerm maakt en configureert met behulp van meerdere Alpine Linux 3.9.0-servers en Portainer. Houd er rekening mee dat

Stel op CoreOS uw eigen Docker-register in

Stel op CoreOS uw eigen Docker-register in

We kennen en houden allemaal van Docker, een platform voor het maken, beheren en distribueren van applicatiecontainers over meerdere machines. Docker Inc. biedt een service t

Ga aan de slag met SQL Server 2017 (MS-SQL) op CentOS 7 met Docker

Ga aan de slag met SQL Server 2017 (MS-SQL) op CentOS 7 met Docker

Vereisten Docker-engine 1.8+. Minimaal 4 GB schijfruimte. Minimaal 4 GB RAM. Stap 1. Docker installeren Om SQL-Server te installeren, Docker mus

Docker CE installeren op Debian 9

Docker CE installeren op Debian 9

Gebruikt u een ander systeem? Inleiding Docker is een applicatie waarmee software kan worden geïmplementeerd in virtuele containers. Het stond in de G

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.