Sticky Session With Docker Swarm (CE) på Debian 9

Introduktion

Docker Swarm forvandler dine individuelle servere til en klynge af computere; letter skalering, høj tilgængelighed og belastningsbalancering. Swarm load-balancer implementerer en round-robin load-balance-strategi, og dette kan forstyrre den korrekte funktion af (legacy) stateful-applikationer, som kræver en form for klæbrige sessioner for at tillade en høj-tilgængelig opsætning med flere instanser. Docker Enterprise Edition understøtter Layer-7 sticky session, men i denne guide vil vi fokusere på den gratis (CE) version af Docker. For at implementere klæbrige sessioner bruger vi Traefik.

Forudsætninger

  • Mindst to nyligt installerede og opdaterede Debian 9-instanser i samme undernet med privat netværk aktiveret
  • Docker CE installeret på disse forekomster
  • Forekomsterne skal være en del af den samme Swarm og skal kunne kommunikere med hinanden over det private netværk
  • Forudgående kendskab til Docker og Docker Swarm
  • En ikke-root-bruger med sudorettigheder (valgfrit, men det anbefales kraftigt ikke at bruge root-brugeren)

I denne vejledning vil vi bruge to Vultr-instanser med private IP-adresser 192.168.0.100og 192.168.0.101. Begge af dem er Docker Swarm manager noder (som ikke er ideel til produktion, men nok til denne tutorial).

Hvem er jeg

Denne vejledning bruger jwilder/whoamidocker-billedet som et demoprogram. Denne simple container vil reagere på et REST-kald med navnet på den reagerende container, hvilket gør det meget nemt at teste, om de klæbrige sessioner virker. Dette billede bruges naturligvis kun til demoformål og skal erstattes af dit eget programs billede.

Whoami-tjenesten er konfigureret som følger:

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

Hvis vi efterfølgende curlwhoami REST-endepunktet på http://192.168.0.100/, kan vi se round-robin belastningsbalanceringen af ​​Docker Swarm på arbejde:

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

Det nytter ikke at teste dette med moderne browsere som Chrome eller Firefox, fordi de er designet til at holde forbindelserne i live, og Docker Swarm load-balancer vil kun skifte til den anden container ved hver ny forbindelse. Hvis du vil teste dette med en browser, skal du vente mindst 30 sekunder på, at forbindelsen lukker, før du opdaterer igen.

Opsætning af Traefik

Traefik understøtter indbygget Docker Swarm, det kan registrere og registrere eller afregistrere containere på farten, og det kommunikerer med din applikation via det interne overlejringsnetværk. Traefik har brug for nogle oplysninger om din ansøgning, før den kan begynde at behandle anmodninger om den. Disse oplysninger gives til Traefik ved at tilføje etiketter til din Swarm-tjeneste:

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

Følgende liste beskriver, hvad hver etikett betyder:

  • traefik.docker.network : Docker-overlejringsnetværket, via hvilket Traefik kommunikerer med din tjeneste
  • traefik.port : Porten, som din tjeneste lytter til (dette er den internt eksponerede port, ikke den offentliggjorte port)
  • traefik.frontend.rule: PathPrefix:/ binder kontekstroden ' /' til denne tjeneste
  • traefik.backend.loadbalancer.stickiness : Aktiverer klæbrige sessioner for denne tjeneste

Nu hvor den whoami-serviceer blevet konfigureret med de nødvendige etiketter, kan vi tilføje Traefik-tjenesten til sværmen:

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

Denne kommando gør en hel del ting på én gang, som vist i følgende liste:

  • --name traefik : Vores nye Docker-tjeneste hedder Traefik
  • -p8080:80: Vi udgiver Traefiks port 80til port, 8080fordi port 80allerede er i brug af vores whoami-service
  • -p9090:8080 : Vi udgiver Traefiks egen webgrænseflade til port 9090
  • --mount ... : Vi monterer Docker Socket i containeren, så Traefik kan få adgang til værtens Docker runtime
  • --global : Vi ønsker Traefik-containere på hver managerknude af høje tilgængelighedsårsager
  • --constraint 'node.role == manager': Vi ønsker kun, at Traefik skal køre på managerknudepunkter, fordi arbejdsknudepunkter ikke kan give Traefik den information, den har brug for. For eksempel docker service lsvirker en arbejderknude ikke, så Traefik ville ikke engang være i stand til at opdage, hvilke tjenester der kører
  • --network whoaminet: Tilslut Traefik til samme netværk som vores whoami-service, ellers kan den ikke oprette forbindelse til den. Vi har tidligere bedt Traefik om at oprette forbindelse til vores tjeneste via dette netværk med traefik.docker.networketiketten
  • traefik : Bed docker om at bruge det seneste Traefik docker-billede til denne tjeneste
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Kommandolinjeargumenter sendt direkte til Traefik for at tillade det at køre i Docker swarm mode. DEBUGer valgfrit her, men interessant under opsætningen og til denne vejledning

Det eneste, der er tilbage at gøre, er at åbne de nødvendige porte i Debians firewall:

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

Hvordan det virker

Så snart Traefik starter op, kan du se i loggene, at Traefik opdager de to whoamicontainere. Den udsender også cookienavnet, som den vil bruge til at håndtere den klæbrige session:

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"

Hvis vi krøller til, http://192.168.0.100:8080kan vi se, at en ny cookie, _a49bc, er blevet sat:

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

Hvis vi ved efterfølgende opkald sender denne cookie til Traefik, vil vi altid blive videresendt til samme beholder:

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

Cookien indeholder intet andet end den interne IP-adresse på den container, som Traefik skal sende til for at anmode. Hvis du ændrer til cookieværdi til http://10.0.0.4:8000, vil anmodningen reelt blive videresendt til den anden beholder. Hvis cookien aldrig skulle sendes til Traefik igen, vil den klæbrige session ikke fungere, og anmodninger vil blive afbalanceret mellem applikationens containere og Traefik-beholderne.

Det er alt, der skal til for at konfigurere Layer 7 Sticky Sessions i Docker CE på Debian 9.


Sådan tjekker du Hyper-V-containere på Windows 10 Insider

Sådan tjekker du Hyper-V-containere på Windows 10 Insider

Microsoft har i et nyt blogindlæg forklaret, hvordan Windows Insiders kan teste Hyper-V-containere på Windows 10, en ny virtualiseringsløsning, der giver applikationer mulighed for at køre uden at påvirke resten af ​​dit operativsystem.

Sådan installeres Harbor på CentOS 7

Sådan installeres Harbor på CentOS 7

Harbor er en open source-registreringsserver i virksomhedsklassen, der gemmer og distribuerer Docker-billeder. Harbor udvider open source Docker Distribution b

Installer Rancher OS via iPXE

Installer Rancher OS via iPXE

Rancher OS er en meget let Linux-distribution bygget op omkring Docker. Selve operativsystemet vejer omkring 20 MB. Denne tutorial får dig op at køre med

På CoreOS skal du konfigurere dit eget Docker-register

På CoreOS skal du konfigurere dit eget Docker-register

Vi kender og elsker alle Docker, en platform til at skabe, administrere og distribuere applikationscontainere på tværs af flere maskiner. Docker Inc. leverer en service t

Installation af docker-compose på CoreOS

Installation af docker-compose på CoreOS

Denne artikel forklarer, hvordan du installerer docker-compose på CoreOS. I CoreOS er mappen /usr/ uforanderlig, så standardstien /usr/local/bin er ikke tilgængelig for

Installer Rancher på CentOS 7

Installer Rancher på CentOS 7

Bruger du et andet system? Introduktion Rancher er en open source-platform til at køre containere og bygge en privat containerservice. Rancher er base

Installer Docker CE på Ubuntu 18.04

Installer Docker CE på Ubuntu 18.04

Introduktion Docker er et program, der giver os mulighed for at implementere programmer, der køres som containere. Det er skrevet i det populære Go-programmeringssprog

Opret en Docker Swarm på Alpine Linux 3.9.0

Opret en Docker Swarm på Alpine Linux 3.9.0

Introduktion Denne guide viser dig, hvordan du opretter og konfigurerer en Docker-sværm ved hjælp af flere Alpine Linux 3.9.0-servere og Portainer. Vær venligst opmærksom på det

Implementer en PHP-applikation ved hjælp af Docker-compose

Implementer en PHP-applikation ved hjælp af Docker-compose

PHP-applikationer er normalt sammensat af en webserver, et relationsdatabasesystem og selve sprogfortolkeren. I denne tutorial vil vi være gearing

Load Balance med Docker

Load Balance med Docker

Når du kører en webapplikation, vil du normalt få mest muligt ud af dine ressourcer uden at skulle konvertere din software til at bruge multithreading o

Implementer en Node.js-applikation ved hjælp af Docker

Implementer en Node.js-applikation ved hjælp af Docker

Denne artikel viser dig, hvordan du implementerer din Node-applikation i en Docker-container. Bemærk: Denne vejledning forudsætter, at du har Docker installeret og læst

Installation af Docker CE på CentOS 7

Installation af Docker CE på CentOS 7

Docker container teknologi giver dig mulighed for at køre applikationer i et specifikt og isoleret miljø. Docker Community Edition (CE) er det nye navn for fre

Implementer Kubernetes med Kubeadm på CentOS 7

Implementer Kubernetes med Kubeadm på CentOS 7

Oversigt Denne artikel er beregnet til at hjælpe dig med at få en Kubernetes-klynge op at køre med kubeadm på ingen tid. Denne vejledning vil implementere to servere på

Installation af Docker på CentOS 7

Installation af Docker på CentOS 7

Bruger du et andet system? Docker er et program, der giver mulighed for implementering af software i virtuelle containere. Det blev skrevet i Go-programmet

Installation af Docker CE på Debian 9

Installation af Docker CE på Debian 9

Bruger du et andet system? Introduktion Docker er et program, der giver mulighed for udrulning af software i virtuelle containere. Det blev skrevet i G

Kom godt i gang med SQL Server 2017 (MS-SQL) på CentOS 7 med Docker

Kom godt i gang med SQL Server 2017 (MS-SQL) på CentOS 7 med Docker

Forudsætninger Docker-motor 1.8+. Minimum 4 GB diskplads. Minimum 4 GB RAM. Trin 1. Installer Docker For at installere SQL-Server skal Docker mus

Sticky Session With Docker Swarm (CE) på Debian 9

Sticky Session With Docker Swarm (CE) på Debian 9

Bruger du et andet system? Introduktion Docker Swarm forvandler dine individuelle servere til en klynge af computere; letter skalering, høj tilgængelighed og

To Docker grafiske styringsværktøjer: DockerUI og Shipyard

To Docker grafiske styringsværktøjer: DockerUI og Shipyard

Ved hjælp af Vultr Docker-applikationen kan du nemt implementere Docker på din Vultr-serverinstans. I mellemtiden kan du lette Docker-administrationsopgaven

Installer Rancher Server på RancherOS

Installer Rancher Server på RancherOS

Oversigt RancherOS er et utroligt let operativsystem (kun omkring 60 MB), der kører en system Docker-dæmon som PID 0 til at køre systemtjenester

Kom godt i gang med Kubernetes på CentOS 7

Kom godt i gang med Kubernetes på CentOS 7

Kubernetes er en open source-platform udviklet af Google til styring af containeriserede applikationer på tværs af en klynge af servere. Det bygger på et årti og

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Kunstig intelligens er ikke i fremtiden, det er her lige i nuet I denne blog Læs, hvordan kunstig intelligens-applikationer har påvirket forskellige sektorer.

DDOS-angreb: et kort overblik

DDOS-angreb: et kort overblik

Er du også et offer for DDOS-angreb og forvirret over forebyggelsesmetoderne? Læs denne artikel for at løse dine spørgsmål.

Har du nogensinde spekuleret på, hvordan tjener hackere penge?

Har du nogensinde spekuleret på, hvordan tjener hackere penge?

Du har måske hørt, at hackere tjener mange penge, men har du nogensinde spekuleret på, hvordan tjener de den slags penge? lad os diskutere.

Revolutionære opfindelser fra Google, der vil gøre dit liv lettere.

Revolutionære opfindelser fra Google, der vil gøre dit liv lettere.

Vil du se revolutionerende opfindelser fra Google, og hvordan disse opfindelser ændrede livet for ethvert menneske i dag? Læs derefter til bloggen for at se opfindelser fra Google.

Fredag ​​Essential: Hvad skete der med AI-drevne biler?

Fredag ​​Essential: Hvad skete der med AI-drevne biler?

Konceptet med selvkørende biler til at køre på vejene ved hjælp af kunstig intelligens er en drøm, vi har haft i et stykke tid nu. Men på trods af flere løfter er de ingen steder at se. Læs denne blog for at lære mere...

Teknologisk singularitet: En fjern fremtid for menneskelig civilisation?

Teknologisk singularitet: En fjern fremtid for menneskelig civilisation?

Efterhånden som videnskaben udvikler sig i et hurtigt tempo og overtager en stor del af vores indsats, stiger risikoen for at udsætte os selv for en uforklarlig Singularitet. Læs, hvad singularitet kunne betyde for os.

Udvikling af datalagring – Infografik

Udvikling af datalagring – Infografik

Opbevaringsmetoderne for dataene har været under udvikling, kan være siden fødslen af ​​dataene. Denne blog dækker udviklingen af ​​datalagring på basis af en infografik.

Funktioner af Big Data Reference Architecture Layers

Funktioner af Big Data Reference Architecture Layers

Læs bloggen for at kende forskellige lag i Big Data-arkitekturen og deres funktionaliteter på den enkleste måde.

6 fantastiske fordele ved at have smarte hjemmeenheder i vores liv

6 fantastiske fordele ved at have smarte hjemmeenheder i vores liv

I denne digitalt drevne verden er smarte hjemmeenheder blevet en afgørende del af livet. Her er et par fantastiske fordele ved smarte hjemmeenheder om, hvordan de gør vores liv værd at leve og enklere.

macOS Catalina 10.15.4-tillægsopdatering forårsager flere problemer end at løse

macOS Catalina 10.15.4-tillægsopdatering forårsager flere problemer end at løse

For nylig udgav Apple macOS Catalina 10.15.4 en supplerende opdatering for at løse problemer, men det ser ud til, at opdateringen forårsager flere problemer, hvilket fører til mursten af ​​mac-maskiner. Læs denne artikel for at lære mere