Sticky Session with Docker Swarm (CE) Debian 9

Įvadas

„Docker Swarm“ paverčia jūsų atskirus serverius kompiuterių grupe; palengvinantis mastelio keitimą, aukštą prieinamumą ir apkrovos balansavimą. Swarm apkrovos balansavimo priemonė įgyvendina visapusišką apkrovos balansavimo strategiją, ir tai gali trukdyti tinkamai veikti (senoms) būseną turinčioms programoms, kurioms reikia tam tikros formos fiksuotų seansų, kad būtų galima atlikti daug pasiekiamą sąranką su keliais egzemplioriais. „Docker Enterprise Edition“ palaiko „Layer-7“ lipnią seansą, tačiau šiame vadove daugiausia dėmesio skirsime nemokama (CE) „Docker“ versijai. Norėdami įgyvendinti lipnias sesijas, naudosime Traefik.

Būtinos sąlygos

  • Bent du naujai įdiegti ir atnaujinti Debian 9 egzemplioriai tame pačiame potinklyje su įjungtu privačiu tinklu
  • Šiuose egzemplioriuose įdiegta „Docker CE“.
  • Egzemplioriai turėtų būti to paties spiečiaus dalis ir turėti galimybę bendrauti tarpusavyje privačiu tinklu
  • Išankstinės Docker ir Docker Swarm žinios
  • Ne root naudotojas, turintis sudoteises (neprivaloma, bet primygtinai patariama nenaudoti root vartotojo)

Šioje pamokoje naudosime du Vultr egzempliorius su privačiais IP adresais 192.168.0.100ir 192.168.0.101. Abu jie yra „Docker Swarm“ vadybiniai mazgai (kuris nėra idealus gamybai, bet pakankamai šiai mokymo programai).

Kas aš esu

Šioje mokymo programoje naudojamas jwilder/whoamidocker vaizdas kaip demonstracinė programa. Šis paprastas konteineris atsakys į REST skambutį su atsakančio konteinerio pavadinimu, todėl bus labai lengva patikrinti, ar veikia lipnios sesijos. Akivaizdu, kad šis vaizdas naudojamas tik demonstraciniais tikslais ir jį reikia pakeisti jūsų programos vaizdu.

Whoami paslauga sukonfigūruota taip:

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

Jei vėliau curlsusikursime whoami REST galutinį tašką http://192.168.0.100/, pamatysime, kaip veikia Docker Swarm apkrovos balansavimas:

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

Neverta tai išbandyti naudojant šiuolaikines naršykles, pvz., „Chrome“ ar „Firefox“, nes jos skirtos palaikyti ryšį, o „Docker Swarm“ apkrovos balansavimo priemonė persijungs į kitą talpyklą tik po kiekvieno naujo prisijungimo. Jei norite tai išbandyti naudodami naršyklę, prieš atnaujindami vėl turėsite palaukti bent 30 sekundžių, kol ryšys užsidarys.

„Traefik“ nustatymas

„Traefik“ iš esmės palaiko „Docker Swarm“, jis gali aptikti ir užregistruoti konteinerius arba išregistruoti juos skrydžio metu ir palaiko ryšį su jūsų programa per vidinį perdangos tinklą. „Traefik“ reikia šiek tiek informacijos apie jūsų programą, kad galėtų pradėti tvarkyti su ja susijusias užklausas. Ši informacija pateikiama Traefik pridedant etiketes prie jūsų Swarm paslaugos:

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

Toliau pateiktame sąraše aprašoma, ką reiškia kiekviena etiketė:

  • traefik.docker.network : „Docker“ perdangos tinklas, per kurį „Traefik“ susisieks su jūsų paslauga
  • traefik.port : prievadas, kuriame klausosi jūsų paslauga (tai yra viduje atskleistas prievadas, o ne paskelbtas prievadas)
  • traefik.frontend.rule: PathPrefix:/ susieja konteksto šaknį „ /“ su šia paslauga
  • traefik.backend.loadbalancer.stickiness : įgalina šios paslaugos fiksuotus seansus

Dabar, kai whoami-servicesukonfigūruotas reikiamas etiketes, prie būrio galime pridėti „Traefik“ paslaugą:

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

Ši komanda vienu metu atlieka gana daug dalykų, kaip parodyta šiame sąraše:

  • --name traefik : Mūsų naujoji „Docker“ paslauga vadinasi „Traefik“.
  • -p8080:80: Mes skelbiame Traefik prievadą 80prie uosto, 8080nes prievadą 80jau naudoja mūsų whoami paslauga
  • -p9090:8080 : Mes skelbiame „Traefik“ žiniatinklio sąsają prie prievado 9090
  • --mount ... : Sumontuojame „Docker Socket“ į konteinerį, kad „Traefik“ galėtų pasiekti pagrindinio kompiuterio „Docker“ vykdymo laiką
  • --global : Mes norime, kad „Traefik“ konteineriai būtų kiekviename valdytojo mazge dėl didelio prieinamumo priežasčių
  • --constraint 'node.role == manager': Norime, kad „Traefik“ veiktų tik vadovo mazguose, nes darbuotojų mazgai negali suteikti „Traefik“ reikalingos informacijos. Pavyzdžiui, docker service lsdarbuotojo mazgas neveikia, todėl Traefik net negalėtų sužinoti, kokios paslaugos veikia
  • --network whoaminet: Prijunkite Traefik prie to paties tinklo kaip ir mūsų whoami-service, kitaip jis negalės prie jo prisijungti. Anksčiau liepėme „Traefik“ prisijungti prie mūsų paslaugos per šį tinklą su traefik.docker.networketikete
  • traefik : nurodykite dokeriui, kad šiai paslaugai naudotų naujausią „Traefik Docker“ vaizdą
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Komandinės eilutės argumentai perduodami tiesiogiai „Traefik“, kad jis veiktų „Docker“ spiečiaus režimu. DEBUGčia neprivalomas, bet įdomus sąrankos metu ir šiai mokymo programai

Viskas, ką reikia padaryti, tai atidaryti reikiamus prievadus Debiano užkardoje:

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

Kaip tai veikia

Kai tik Traefik paleidžiamas, žurnaluose matote, kad Traefik aptinka du whoamikonteinerius. Jis taip pat išveda slapuko pavadinimą, kurį naudos tvarkydamas priklijuotą seansą:

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"

Jei pasilenksime, http://192.168.0.100:8080pamatysime, kad _a49bcbuvo nustatytas naujas slapukas :

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

Jei vėliau skambindami išsiųsime šį slapuką „Traefik“, visada būsime nukreipti į tą patį konteinerį:

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

Slapuke yra ne kas kita, kaip vidinis konteinerio IP adresas, į kurį „Traefik“ turėtų siųsti užklausą. Jei pakeisite slapuko vertę į http://10.0.0.4:8000, užklausa bus iš esmės persiųsta į kitą sudėtinį rodinį. Jei slapukas niekada nebūtų iš naujo siunčiamas „Traefik“, lipni seansas neveiks ir užklausos bus subalansuotos tarp programos konteinerių ir „Traefik“ konteinerių.

Tai viskas, ko reikia norint nustatyti „Layer 7 Sticky Sessions“ „Docker CE“ sistemoje „Debian 9“.

Palikti komentarą

Mašinų augimas: AI pritaikymas realiame pasaulyje

Mašinų augimas: AI pritaikymas realiame pasaulyje

Dirbtinis intelektas nėra ateityje, jis čia, dabartyje Šiame tinklaraštyje Skaitykite, kaip dirbtinio intelekto programos paveikė įvairius sektorius.

DDOS atakos: trumpa apžvalga

DDOS atakos: trumpa apžvalga

Ar taip pat esate DDOS atakų auka ir esate sumišęs dėl prevencijos metodų? Perskaitykite šį straipsnį, kad išspręstumėte savo užklausas.

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Galbūt girdėjote, kad įsilaužėliai uždirba daug pinigų, bet ar kada susimąstėte, kaip jie uždirba tokius pinigus? padiskutuokime.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Ar norite pamatyti revoliucinius „Google“ išradimus ir kaip šie išradimai pakeitė kiekvieno žmogaus gyvenimą šiandien? Tada skaitykite tinklaraštį, kad pamatytumėte „Google“ išradimus.

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Savavaledžių automobilių koncepcija, kuri išvažiuotų į kelius su dirbtinio intelekto pagalba, yra svajonė, kurią jau kurį laiką svajojame. Tačiau nepaisant kelių pažadų, jų niekur nematyti. Skaitykite šį tinklaraštį, kad sužinotumėte daugiau…

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Kadangi mokslas sparčiai vystosi, perimdamas daug mūsų pastangų, taip pat didėja rizika, kad pateksime į nepaaiškinamą singuliarumą. Skaitykite, ką mums gali reikšti išskirtinumas.

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Skaitykite tinklaraštį, kad paprasčiausiai sužinotumėte apie skirtingus didžiųjų duomenų architektūros sluoksnius ir jų funkcijas.

Duomenų saugojimo raida – infografika

Duomenų saugojimo raida – infografika

Duomenų saugojimo metodai gali būti tobulinami nuo pat Duomenų gimimo. Šiame tinklaraštyje, remiantis infografika, aprašoma duomenų saugojimo raida.

6 nuostabūs išmaniųjų namų įrenginių privalumai

6 nuostabūs išmaniųjų namų įrenginių privalumai

Šiame skaitmeniniu būdu pagrįstame pasaulyje išmanieji namų įrenginiai tapo svarbia gyvenimo dalimi. Štai keletas nuostabių išmaniųjų namų įrenginių privalumų, kaip jie daro mūsų gyvenimą vertą gyventi ir paprastesnį.

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

Neseniai „Apple“ išleido „macOS Catalina 10.15.4“ priedą, skirtą problemoms išspręsti, tačiau atrodo, kad dėl atnaujinimo kyla daugiau problemų, dėl kurių „Mac“ įrenginiai blokuojami. Norėdami sužinoti daugiau, perskaitykite šį straipsnį