Sessió enganxosa amb Docker Swarm (CE) a Debian 9

Introducció

Docker Swarm converteix els vostres servidors individuals en un clúster d'ordinadors; facilitant l'escalat, l'alta disponibilitat i l'equilibri de càrrega. L'equilibrador de càrrega Swarm implementa una estratègia d'equilibri de càrrega circular, i això pot interferir en el funcionament correcte de les aplicacions amb estat (heretats) que requereixen algun tipus de sessions enganxades per permetre una configuració d'alta disponibilitat amb múltiples instàncies. Docker Enterprise Edition admet la sessió adhesiva de capa 7, però en aquesta guia ens centrarem en la versió gratuïta (CE) de Docker. Per implementar sessions adhesives farem servir Traefik.

Requisits previs

  • Almenys dues instàncies de Debian 9 recentment implementades i actualitzades a la mateixa subxarxa amb la xarxa privada activada
  • Docker CE instal·lat en aquestes instàncies
  • Les instàncies haurien de formar part del mateix Swarm i haurien de poder comunicar-se entre elles a través de la xarxa privada
  • Coneixements previs de Docker i Docker Swarm
  • Un usuari que no sigui root amb sudodrets (opcional, però és molt recomanable no utilitzar l'usuari root)

En aquest tutorial farem servir dues instàncies de Vultr amb adreces IP privades 192.168.0.100i 192.168.0.101. Tots dos són nodes gestors de Docker Swarm (que no és ideal per a la producció, però suficient per a aquest tutorial).

Qui sóc

Aquest tutorial utilitza la jwilder/whoamiimatge de Docker com a aplicació de demostració. Aquest senzill contenidor respondrà a una trucada REST amb el nom del contenidor que respon, de manera que és molt fàcil provar si les sessions enganxades funcionen. Evidentment, aquesta imatge només s'utilitza amb finalitats de demostració i s'ha de substituir per la imatge de la vostra aplicació.

El servei whoami està configurat de la següent manera:

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 posteriorment fem curlel punt final de REST whoami a http://192.168.0.100/, podem veure l'equilibri de càrrega de Docker Swarm en funcionament:

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

No serveix de res provar-ho amb navegadors moderns com Chrome o Firefox perquè estan dissenyats per mantenir les connexions vives, i l'equilibrador de càrrega Docker Swarm només canviarà a l'altre contenidor amb cada connexió nova . Si voleu provar-ho amb un navegador, haureu d'esperar almenys 30 segons perquè la connexió es tanqui abans de tornar a actualitzar.

Configuració de Traefik

Traefik admet de manera nativa Docker Swarm, pot detectar i registrar o cancel·lar el registre de contenidors sobre la marxa i es comunica amb la vostra aplicació a través de la xarxa interna de superposició. Traefik necessita informació sobre la vostra aplicació abans que pugui començar a gestionar-ne les sol·licituds. Aquesta informació es proporciona a Traefik afegint etiquetes al vostre servei 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 llista següent descriu el significat de cada etiqueta:

  • traefik.docker.network : La xarxa de superposició de Docker, a través de la qual Traefik es comunicarà amb el vostre servei
  • traefik.port : el port on està escoltant el vostre servei (és el port exposat internament, no el port publicat)
  • traefik.frontend.rule: PathPrefix:/ enllaça l'arrel de context ' /' a aquest servei
  • traefik.backend.loadbalancer.stickiness : activa sessions enganxades per a aquest servei

Ara que whoami-services'ha configurat amb les etiquetes necessàries, podem afegir el servei Traefik a l'eixam:

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

Aquesta ordre fa moltes coses alhora, com es mostra a la llista següent:

  • --name traefik : El nom del nostre nou servei Docker és Traefik
  • -p8080:80: publiquem el port 80a port de Traefik 8080perquè 80el nostre servei whoami ja està en ús
  • -p9090:8080 : publiquem la interfície web pròpia de Traefik al port 9090
  • --mount ... : Muntem el Socket Docker al contenidor perquè Traefik pugui accedir al temps d'execució de Docker de l'amfitrió
  • --global : Volem contenidors Traefik a cada node gestor per motius d'alta disponibilitat
  • --constraint 'node.role == manager': només volem que Traefik s'executi en nodes de gestor perquè els nodes de treball no poden proporcionar a Traefik la informació que necessita. Per exemple, docker service lsen un node de treball no funciona, de manera que Traefik ni tan sols podria descobrir quins serveis s'estan executant
  • --network whoaminet: Connecteu Traefik a la mateixa xarxa que la nostra whoami-service, en cas contrari no s'hi podrà connectar. Abans li vam dir a Traefik que es connectés al nostre servei a través d'aquesta xarxa amb l' traefik.docker.networketiqueta
  • traefik : Digueu a Docker que utilitzi la darrera imatge de Docker de Traefik per a aquest servei
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: els arguments de la línia d'ordres s'han passat directament a Traefik per permetre que s'executi en mode eixam Docker. DEBUGés opcional aquí, però interessant durant la configuració i per a aquest tutorial

Tot el que queda per fer és obrir els ports necessaris al tallafoc de Debian:

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

Com funciona

Tan bon punt en Traefik s'engega, podeu veure als registres que Traefik descobreix els dos whoamicontenidors. També mostra el nom de la galeta que utilitzarà per gestionar la sessió enganxosa:

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 ens enrosquem http://192.168.0.100:8080podem veure que _a49bcs'ha establert una nova galeta, ,:

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, en trucades posteriors, enviem aquesta galeta a Traefik, sempre serem reenviats al mateix contenidor:

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

La galeta no conté més que l'adreça IP interna del contenidor al qual Traefik hauria d'enviar per sol·licitar. Si canvieu el valor de la galeta a http://10.0.0.4:8000, la sol·licitud es reenviarà efectivament a l'altre contenidor. Si la galeta no s'hagués de tornar a enviar mai a Traefik, la sessió enganxosa no funcionarà i les sol·licituds s'equilibraran entre els contenidors de l'aplicació i els contenidors de Traefik.

Això és tot el que es necessita per configurar les sessions adhesives de la capa 7 a Docker CE a Debian 9.


A continuació, es mostra com comprovar els contenidors Hyper-V a Windows 10 Insider

A continuació, es mostra com comprovar els contenidors Hyper-V a Windows 10 Insider

Microsoft ha explicat en una nova publicació al bloc com els Windows Insiders poden provar contenidors Hyper-V a Windows 10, una nova solució de virtualització per permetre que les aplicacions s'executin sense afectar la resta del vostre sistema operatiu.

Com instal·lar Harbour a CentOS 7

Com instal·lar Harbour a CentOS 7

Harbour és un servidor de registre de codi obert de classe empresarial que emmagatzema i distribueix imatges de Docker. Harbour amplia la distribució Docker de codi obert b

Instal·leu Rancher OS mitjançant iPXE

Instal·leu Rancher OS mitjançant iPXE

Rancher OS és una distribució Linux molt lleugera construïda al voltant de Docker. El sistema operatiu en si pesa uns 20 MB. Aquest tutorial us posarà en funcionament

A CoreOS, configureu el vostre propi registre Docker

A CoreOS, configureu el vostre propi registre Docker

Tots coneixem i estimem Docker, una plataforma per crear, gestionar i distribuir contenidors d'aplicacions a diverses màquines. Docker Inc. ofereix un servei t

Instal·lació de docker-compose a CoreOS

Instal·lació de docker-compose a CoreOS

Aquest article explica com instal·lar docker-compose a CoreOS. A CoreOS, la carpeta /usr/ és immutable, de manera que la ruta estàndard /usr/local/bin no està disponible per

Instal·leu Rancher a CentOS 7

Instal·leu Rancher a CentOS 7

Utilitzeu un sistema diferent? Introducció Rancher és una plataforma de codi obert per executar contenidors i crear un servei privat de contenidors. El rancher és la base

Instal·leu Docker CE a Ubuntu 18.04

Instal·leu Docker CE a Ubuntu 18.04

Introducció Docker és una aplicació que ens permet desplegar programes que s'executen com a contenidors. Va ser escrit en el popular llenguatge de programació Go

Creeu un Docker Swarm a Alpine Linux 3.9.0

Creeu un Docker Swarm a Alpine Linux 3.9.0

Introducció Aquesta guia us mostrarà com crear i configurar un eixam Docker utilitzant diversos servidors Alpine Linux 3.9.0 i Portainer. Si us plau, tingueu en compte que

Desplegueu una aplicació PHP amb Docker-compose

Desplegueu una aplicació PHP amb Docker-compose

Les aplicacions PHP solen estar compostes per un servidor web, un sistema de bases de dades relacionals i el propi intèrpret de llenguatge. En aquest tutorial farem palanca

Balanç de càrrega amb Docker

Balanç de càrrega amb Docker

Quan executeu una aplicació web, normalment voleu treure el màxim profit dels vostres recursos sense haver de convertir el vostre programari per utilitzar multithreading o

Desplegueu una aplicació Node.js mitjançant Docker

Desplegueu una aplicació Node.js mitjançant Docker

Aquest article us mostrarà com implementar la vostra aplicació Node dins d'un contenidor Docker. Nota: aquest tutorial suposa que teniu Docker instal·lat i llegit

Instal·lació de Docker CE a CentOS 7

Instal·lació de Docker CE a CentOS 7

La tecnologia de contenidors Docker us permet executar aplicacions en un entorn específic i aïllat. Docker Community Edition (CE) és el nou nom del fre

Desplegueu Kubernetes amb Kubeadm a CentOS 7

Desplegueu Kubernetes amb Kubeadm a CentOS 7

Visió general Aquest article està pensat per ajudar-vos a posar en funcionament un clúster de Kubernetes amb kubeadm en molt poc temps. Aquesta guia desplegarà dos servidors activats

Instal·lació de Docker a CentOS 7

Instal·lació de Docker a CentOS 7

Utilitzeu un sistema diferent? Docker és una aplicació que permet el desplegament de programari dins de contenidors virtuals. Va ser escrit al programa Go

Instal·lació de Docker CE a Debian 9

Instal·lació de Docker CE a Debian 9

Utilitzeu un sistema diferent? Introducció Docker és una aplicació que permet el desplegament de programari dins de contenidors virtuals. Va ser escrit en G

Comenceu amb SQL Server 2017 (MS-SQL) a CentOS 7 amb Docker

Comenceu amb SQL Server 2017 (MS-SQL) a CentOS 7 amb Docker

Requisits previs del motor Docker 1.8+. Mínim de 4 GB d'espai en disc. Mínim de 4 GB de RAM. Pas 1. Instal·leu Docker Per instal·lar SQL-Server, Docker mus

Sessió enganxosa amb Docker Swarm (CE) a Debian 9

Sessió enganxosa amb Docker Swarm (CE) a Debian 9

Utilitzeu un sistema diferent? Introducció Docker Swarm converteix els vostres servidors individuals en un clúster d'ordinadors; facilitant l'escalat, alta disponibilitat an

Dues eines de gestió gràfica de Docker: DockerUI i Shipyard

Dues eines de gestió gràfica de Docker: DockerUI i Shipyard

Amb l'ajuda de l'aplicació Vultr Docker, podeu implementar fàcilment Docker a la vostra instància del servidor Vultr. Mentrestant, podeu facilitar la tasca de gestió de Docker

Instal·leu Rancher Server a RancherOS

Instal·leu Rancher Server a RancherOS

Visió general RancherOS és un sistema operatiu increïblement lleuger (només uns 60 MB) que executa un dimoni Docker del sistema com a PID 0 per executar serveis del sistema

Com començar amb Kubernetes a CentOS 7

Com començar amb Kubernetes a CentOS 7

Kubernetes és una plataforma de codi obert desenvolupada per Google per gestionar aplicacions en contenidors en un clúster de servidors. Es basa en una dècada i

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

La Intel·ligència Artificial no està en el futur, és aquí mateix en el present. En aquest bloc Llegiu com les aplicacions d'Intel·ligència Artificial han afectat diversos sectors.

Atacs DDOS: una breu visió general

Atacs DDOS: una breu visió general

També ets víctima d'atacs DDOS i estàs confós sobre els mètodes de prevenció? Llegiu aquest article per resoldre les vostres consultes.

Us heu preguntat mai com guanyen diners els pirates informàtics?

Us heu preguntat mai com guanyen diners els pirates informàtics?

Potser haureu sentit que els pirates informàtics guanyen molts diners, però us heu preguntat mai com guanyen aquest tipus de diners? anem a discutir.

Invents revolucionaris de Google que us facilitaran la vida.

Invents revolucionaris de Google que us facilitaran la vida.

Vols veure els invents revolucionaris de Google i com aquests invents van canviar la vida de tots els éssers humans actuals? A continuació, llegiu al bloc per veure els invents de Google.

Divendres essencial: què va passar amb els cotxes impulsats per IA?

Divendres essencial: què va passar amb els cotxes impulsats per IA?

El concepte de cotxes autònoms per sortir a les carreteres amb l'ajuda de la intel·ligència artificial és un somni que tenim des de fa temps. Però malgrat les diverses promeses, no es veuen enlloc. Llegeix aquest blog per saber-ne més...

Singularitat tecnològica: un futur llunyà de la civilització humana?

Singularitat tecnològica: un futur llunyà de la civilització humana?

A mesura que la ciència evoluciona a un ritme ràpid, fent-se càrrec de molts dels nostres esforços, també augmenten els riscos de sotmetre'ns a una singularitat inexplicable. Llegeix, què pot significar per a nosaltres la singularitat.

Evolució de lemmagatzematge de dades – Infografia

Evolució de lemmagatzematge de dades – Infografia

Els mètodes d'emmagatzematge de les dades que han anat evolucionant poden ser des del naixement de les dades. Aquest bloc tracta l'evolució de l'emmagatzematge de dades a partir d'una infografia.

Funcionalitats de les capes darquitectura de referència de Big Data

Funcionalitats de les capes darquitectura de referència de Big Data

Llegeix el blog per conèixer de la manera més senzilla les diferents capes de l'Arquitectura Big Data i les seves funcionalitats.

6 avantatges sorprenents de tenir dispositius domèstics intel·ligents a les nostres vides

6 avantatges sorprenents de tenir dispositius domèstics intel·ligents a les nostres vides

En aquest món digital, els dispositius domèstics intel·ligents s'han convertit en una part crucial de les vides. A continuació, es mostren alguns avantatges sorprenents dels dispositius domèstics intel·ligents sobre com fan que la nostra vida valgui la pena i sigui més senzilla.

Lactualització del suplement de macOS Catalina 10.15.4 està causant més problemes que no pas solucions

Lactualització del suplement de macOS Catalina 10.15.4 està causant més problemes que no pas solucions

Recentment, Apple va llançar macOS Catalina 10.15.4, una actualització de suplements per solucionar problemes, però sembla que l'actualització està causant més problemes que provoquen el bloqueig de les màquines Mac. Llegiu aquest article per obtenir més informació