Sticky Session With Docker Swarm (CE) á Debian 9

Kynning

Docker Swarm breytir einstökum netþjónum þínum í hóp af tölvum; auðveldar stærðarstærð, mikið aðgengi og álagsjafnvægi. Swarm load-jöfnunarbúnaðurinn útfærir álagsjafnvægisstefnu í hringrás og þetta gæti truflað rétta virkni (gamla) kerfisbundinna forrita sem krefjast einhvers konar klístraða lota til að leyfa uppsetningu með mörgum tilfellum. Docker Enterprise Edition styður Layer-7 Sticky session, en í þessari handbók munum við einbeita okkur að ókeypis (CE) útgáfu af Docker. Til að útfæra klístraðar lotur munum við nota Traefik.

Forkröfur

  • Að minnsta kosti tvö nýuppsett og uppfærð Debian 9 tilvik í sama undirneti með einkanet virkt
  • Docker CE sett upp á þessum tilvikum
  • Tilvikin ættu að vera hluti af sama Swarm og ættu að geta átt samskipti sín á milli í gegnum einkanetið
  • Fyrri þekking á Docker og Docker Swarm
  • Notandi sem ekki er rót með sudoréttindi (valfrjálst en það er eindregið ráðlagt að nota ekki rótarnotandann)

Í þessari kennslu munum við nota tvö Vultr tilvik með einka IP tölum 192.168.0.100og 192.168.0.101. Báðir eru þeir Docker Swarm stjórnandahnútar (sem er ekki tilvalið fyrir framleiðslu en nóg fyrir þessa kennslu).

Hver er ég

Þessi kennsla notar jwilder/whoamiDocker myndina sem kynningarforrit. Þessi einfalda gámur mun svara REST símtali með nafni gámsins sem svarar, sem gerir það mjög auðvelt að prófa hvort klístruðu loturnar virka. Þessi mynd er augljóslega aðeins notuð í kynningarskyni og þarf að skipta út fyrir myndina þíns eigin forrits.

Whoami-þjónustan er stillt sem hér segir:

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

Ef við í kjölfarið curlwhoami REST endapunktinn á http://192.168.0.100/, getum við séð álagsjafnvægi Docker Swarm í vinnunni:

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

Það þýðir ekkert að prófa þetta með nútíma vöfrum eins og Chrome eða Firefox vegna þess að þeir eru hannaðir til að halda tengingum á lífi og Docker Swarm hleðslujafnari mun aðeins skipta yfir í hinn ílátið við hverja nýja tengingu. Ef þú vilt prófa þetta með vafra þarftu að bíða í að minnsta kosti 30 sekúndur þar til tengingin lokar áður en þú endurnýjar hana aftur.

Uppsetning Traefik

Traefik styður Docker Swarm innbyggt, það getur greint og skráð eða afskráð gáma á flugi og það hefur samskipti við forritið þitt í gegnum innra yfirborðsnetið. Traefik þarf nokkrar upplýsingar um umsókn þína áður en það getur byrjað að afgreiða beiðnir um hana. Þessar upplýsingar eru veittar Traefik með því að bæta merkimiðum við Swarm þjónustuna þína:

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

Eftirfarandi listi lýsir hvað hver merki þýðir:

  • traefik.docker.network : Docker yfirborðsnetið, sem Traefik mun eiga samskipti við þjónustuna þína
  • traefik.port : Gáttin sem þjónustan þín hlustar á (þetta er tengið sem er útsett innra með, ekki birta tengið)
  • traefik.frontend.rule: PathPrefix:/ bindur samhengisrótina ' /' við þessa þjónustu
  • traefik.backend.loadbalancer.stickiness : Virkjar klístraðar lotur fyrir þessa þjónustu

Nú þegar whoami-servicebúið er að stilla tilskilin merki getum við bætt Traefik þjónustunni við kvik:

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

Þessi skipun gerir ansi marga hluti í einu, eins og sýnt er á eftirfarandi lista:

  • --name traefik : Nýja Docker þjónustan okkar heitir Traefik
  • -p8080:80: Við birtum Traefik's port 80to port 8080vegna þess að port 80er þegar í notkun hjá whoami-þjónustunni okkar
  • -p9090:8080 : Við birtum eigin vefviðmót Traefik í port 9090
  • --mount ... : Við festum Docker Socket í gáminn svo að Traefik geti fengið aðgang að Docker keyrslutíma gestgjafans
  • --global : Við viljum Traefik gáma á hvern stjórnandahnút af mikilli framboðsástæðum
  • --constraint 'node.role == manager': Við viljum aðeins að Traefik keyri á stjórnendahnútum vegna þess að starfshnútar geta ekki veitt Traefik þær upplýsingar sem það þarf. Til dæmis, docker service lsá vinnuhnút virkar ekki, þannig að Traefik myndi ekki einu sinni geta uppgötvað hvaða þjónustur eru í gangi
  • --network whoaminet: Tengdu Traefik við sama net og okkar whoami-service, annars getur það ekki tengst því. Við sögðum Traefik áður að tengjast þjónustu okkar í gegnum þetta net með traefik.docker.networkmerkimiðanum
  • traefik : Segðu docker að nota nýjustu Traefik docker myndina fyrir þessa þjónustu
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Skipanalínurök sendar beint til Traefik til að leyfa því að keyra í Docker swarm ham. DEBUGer valfrjálst hér, en áhugavert við uppsetningu og fyrir þessa kennslu

Allt sem er eftir að gera er að opna nauðsynlegar gáttir í Debian eldveggnum:

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

Hvernig það virkar

Um leið og Traefik fer í gang geturðu séð í loggunum að Traefik uppgötvar gámana tvo whoami. Það gefur líka út kökuheitið sem það mun nota til að takast á við klístraða lotuna:

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"

Ef við snúum okkur að http://192.168.0.100:8080getum við séð að ný kex, _a49bc, hefur verið stillt:

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

Ef við sendum þessa vafraköku til Traefik í síðari símtölum, munum við alltaf vera áframsend í sama ílát:

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

Kexið inniheldur ekkert nema innra IP tölu gámsins sem Traefik ætti að senda til að biðja um. Ef þú breytir í vafrakökugildi í http://10.0.0.4:8000, þá yrði beiðnin í raun áframsend til hins ílátsins. Ef kexið ætti aldrei að vera sent aftur til Traefik, þá virkar klístur sessan ekki og beiðnir verða jafnaðar á milli gáma forritsins og Traefik gáma.

Það er allt sem þarf til að setja upp Layer 7 Sticky Sessions í Docker CE á Debian 9.


The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Gervigreind er ekki í framtíðinni, hún er hér í nútímanum Í þessu bloggi Lestu hvernig gervigreindarforrit hafa haft áhrif á ýmsa geira.

DDOS árásir: Stutt yfirlit

DDOS árásir: Stutt yfirlit

Ertu líka fórnarlamb DDOS árása og ruglaður með forvarnaraðferðirnar? Lestu þessa grein til að leysa spurningar þínar.

Hefur þú einhvern tíma velt því fyrir þér hvernig tölvuþrjótar græða peninga?

Hefur þú einhvern tíma velt því fyrir þér hvernig tölvuþrjótar græða peninga?

Þú gætir hafa heyrt að tölvuþrjótar græða mikið af peningum, en hefur þú einhvern tíma velt því fyrir þér hvernig þeir vinna sér inn svona peninga? við skulum ræða.

Byltingarkenndar uppfinningar frá Google sem munu auðvelda lífi þínu.

Byltingarkenndar uppfinningar frá Google sem munu auðvelda lífi þínu.

Viltu sjá byltingarkenndar uppfinningar frá Google og hvernig þessar uppfinningar breyttu lífi hvers manns í dag? Lestu síðan til að blogga til að sjá uppfinningar frá Google.

Föstudagur Nauðsynlegur: Hvað varð um gervigreindardrifna bíla?

Föstudagur Nauðsynlegur: Hvað varð um gervigreindardrifna bíla?

Hugmyndin um að sjálfkeyrandi bílar fari á göturnar með hjálp gervigreindar er draumur sem við höfum átt um tíma núna. En þrátt fyrir nokkur loforð eru þau hvergi sjáanleg. Lestu þetta blogg til að læra meira…

Tæknileg sérkenni: Fjarlæg framtíð mannlegrar siðmenningar?

Tæknileg sérkenni: Fjarlæg framtíð mannlegrar siðmenningar?

Þar sem vísindin þróast hratt og taka yfir mikið af viðleitni okkar, eykst hættan á því að verða fyrir óútskýranlegri einstæðu. Lestu, hvað sérkenni gæti þýtt fyrir okkur.

Þróun gagnageymslu – Infographic

Þróun gagnageymslu – Infographic

Geymsluaðferðir gagna hafa verið að þróast gæti verið frá fæðingu gagna. Þetta blogg fjallar um þróun gagnageymslu á grundvelli upplýsingamynda.

Virkni Big Data Reference Architecture Layers

Virkni Big Data Reference Architecture Layers

Lestu bloggið til að þekkja mismunandi lög í Big Data Architecture og virkni þeirra á einfaldasta hátt.

6 ótrúlegir kostir þess að hafa snjall heimilistæki í lífi okkar

6 ótrúlegir kostir þess að hafa snjall heimilistæki í lífi okkar

Í þessum stafræna heimi hafa snjallheimilistæki orðið afgerandi hluti af lífi. Hér eru nokkrir ótrúlegir kostir snjallheimatækja um hvernig þau gera líf okkar þess virði að lifa því og einfaldara.

macOS Catalina 10.15.4 viðbót uppfærsla veldur fleiri vandamálum en að leysa

macOS Catalina 10.15.4 viðbót uppfærsla veldur fleiri vandamálum en að leysa

Nýlega gaf Apple út macOS Catalina 10.15.4 viðbótaruppfærslu til að laga vandamál en svo virðist sem uppfærslan sé að valda fleiri vandamálum sem leiða til múrsteins á Mac vélum. Lestu þessa grein til að læra meira