‫Entonces ese poquito de magia no era realmente mágico. Era la malla de enrutamiento. The Routing Mesh es una
‫red entrante o entrante que distribuye paquetes para nuestro servicio a las tareas para ese servicio, porque
‫podemos tener más de una tarea.
‫En realidad, abarca todos los nodos, y está utilizando primitivas Kernel que llevan Entonces no estamos hablando de un nuevo servicio elegante. Realmente estamos hablando de las características principales del Kernel
‫un tiempo llamado IPVS. de Linux. Lo que realmente hace aquí es equilibrar la carga
‫en todos los nodos y escuchar en todos los nodos el tráfico.
‫Hay un par de formas en que podemos hablar sobre cómo funciona esto.
‫El primer ejemplo es de un contenedor a otro.
‫Si nuestro sistema de back-end, como
‫por ejemplo las bases de datos, se incrementara a
‫dos réplicas, las interfaces que hablan con los backends, en realidad no hablarían directamente con su dirección IP.
‫De hecho, hablarían con algo
‫llamado VIP o Virtual IP, que Swarm pone al frente de todos los servicios.
‫Esta es una IP privada dentro de la red virtual de Swarm, y asegura que la carga se distribuya entre todas las
‫tareas de un servicio.
‫rol de trabajador en su aplicación, y tenía 10 contenedores diferentes, no tiene que poner un balanceador de carga frente a eso.
‫Entonces, si puede imaginar si tuvo un
‫Esto hace eso por ti.
‫Cuando habla de tráfico de un servicio dentro de su red virtual hablando
‫con otro servicio dentro de su red virtual.
‫Y el segundo ejemplo de cómo funciona la malla de enrutamiento es que el tráfico externo que llega a tu enjambre puede elegir golpear cualquiera
‫de los nodos en tu enjambre.
‫Cualquiera de los nodos de trabajadores tendrá abierto ese puerto publicado y escuchando el tráfico de ese contenedor, y luego
‫redirigirá ese tráfico al contenedor adecuado en función de su equilibrio de carga.
‫Lo que esto significa es que cuando estás desplegando contenedores en un enjambre, no se supone que tengas
‫que preocuparte por el servidor en el que se encuentra porque eso podría moverse, ¿no?
‫Si un contenedor falla, y la tarea es recreada por el enjambre, podría poner eso en un nodo diferente. Y ciertamente no quiere tener que cambiar su firewall o
‫su configuración de DNS para que
‫el contenedor vuelva a funcionar.
‫La malla de enrutamiento resuelve muchos de esos problemas al permitir que nuestro sitio web de Drupal en el puerto 80 sea accesible desde
‫cualquier nodo en el enjambre. Y en
‫segundo plano, está tomando esos paquetes de ese servidor y luego los enruta al contenedor. diferente, lo enrutará a través de las redes virtuales.
‫Si está en un nodo
‫Si está en el mismo nodo, simplemente lo redirigirá al puerto de ese contenedor.
‫Y no tuvimos que hacer nada para habilitar esto.
‫Esto fue todo fuera de la caja.
‫Veamos un diagrama de cómo esto podría funcionar.
‫Si creé un servicio de noticias, y le dije que tuviera tres réplicas. Y creó tres tareas, con
‫tres contenedores, en tres nodos. Dentro de esa red de superposición, en realidad
‫está creando una IP virtual que está asignada al nombre DNS del servicio, ¿verdad? DNS, es el nombre del servicio.
‫Y el servicio, por defecto, el nombre
‫En este caso, creé un servicio llamado my-web, y cualquier otro
‫contenedor que
‫tengo en mis redes superpuestas que necesitan hablar con ese servicio dentro del enjambre, solo tienen que preocuparse por usar el DNS de mi web. La IP adecuada carga correctamente rebota el tráfico entre
‫todas las tareas en ese servicio.
‫Esto no es realmente DNS Round Robin. Esa es en realidad una configuración ligeramente diferente. Podríamos habilitar
‫eso si quisiéramos. De hecho, hay una opción para usar DNS Round Robin.
‫cachés de DNS dentro de nuestras aplicaciones nos impiden distribuir correctamente la carga.
‫Los beneficios de los VIP sobre Round Robin es que muchas veces nuestros
‫En lugar de luchar con nuestros clientes de DNS en la configuración de DNS, solo confiamos en el VIP, que es algo así como lo que tendría si
‫comprara un equilibrador de carga de hardware dedicado.
‫En el segundo ejemplo, esto muestra
‫cómo sería el tráfico externo.
‫Esto es similar a lo que acabamos de hacer con Drupal, donde cuando creé esos cuadros amarillos, al crear un servicio, llamado
‫mi web,
‫creé dos tareas y las apliqué a dos nodos diferentes, cada uno de esos nodos tiene un -en el equilibrador de carga en la dirección IP externa. IP es la que DigitalOcean me dio.
‫Para mí, porque estoy usando DigitalOcean, esa dirección Cuando uso el -p y lo publico en un puerto, en este ejemplo está usando el puerto 80:80, cualquier
‫tráfico que ingrese a cualquiera de estos tres nodos
‫golpea ese equilibrador de carga en el puerto 80:80. El equilibrador de carga decide qué contenedor debe obtener
‫el tráfico y si ese tráfico está o no en el nodo local, o necesita enviar el
‫tráfico a través de la red a un nodo diferente.
‫Nuevamente, todo esto sucede en el fondo sin ningún esfuerzo especial de nuestra parte.
‫Todo bien. Veamos este enrutamiento Mesh en acción.
‫Ya vimos el ejemplo con Drupal y cómo escucha en los tres nodos.
‫Pero, ¿y si tuviéramos varias tareas para ver que el equilibrador de carga funciona?
‫Si hacemos un servicio de Docker crear, lo que
‫vamos a hacer es, vamos a utilizar un contenedor Elasticsearch. Vamos a llamarlo búsqueda y le
‫daremos tres réplicas. Y desea publicarlo en el puerto 9200, que es su puerto predeterminado.
‫En este caso, definitivamente queremos que: 2 esté allí porque es la
‫versión más fácil de implementar en este momento. Mientras eso está creando, mencionaré que Elasticsearch es
‫en realidad una base de datos de búsqueda accesible a través de
‫una API web JSON.
‫Por lo tanto, es muy fácil golpear con curl y darnos buenos ejemplos de cómo funciona esto.
‫Hago una búsqueda ps del servicio Docker, podemos ver que ha creado inteligentemente cada tarea en un nodo diferente.
‫Si hago un curl en mi servidor local, en
‫el nodo uno en el puerto 9200 porque publiqué ese puerto, obtendré la información básica de Elasticsearch. Parte de eso es que
‫realmente creará un nombre aleatorio.
‫Esa es solo una característica de Elasticsearch.
‫y
‫luego comenzará a repetirse de esa manera.
‫Si doblo esto varias veces, verás en este Patch, el servidor Patch, y luego una tercera vez, Jane Foster,
‫Esa es realmente
‫la IP virtual que actúa como equilibrador de carga y distribuye mi carga entre las tres tareas.
‫Algunas notas más sobre la malla de enrutamiento. En 17. 03, que es el lanzamiento en el que te estoy mostrando esto, la malla de enrutamiento y el balanceo de carga son actualmente un equilibrador
‫de carga sin estado.
‫Si alguna vez ha tratado con State dentro del equilibrador de
‫carga clásico de Amazon u otras tecnologías de equilibrio de carga, ya sabe de qué se trata.
‫un cliente consistente, entonces es posible que deba agregar algunas otras cosas para ayudar a resolver ese problema.
‫Básicamente, esto significa que si tiene
‫que usar cookies de sesión en su aplicación, o si espera que un contenedor consistente esté hablando con
‫De fábrica, cada vez que aciertes en un servicio con múltiples tareas, te dará potencialmente
‫un resultado diferente.
‫Además, si nos adentramos en los detalles de esto, en realidad se trata de un balanceador de carga de capa 3, y eso realmente funciona en la
‫capa de IP y puerto.
‫En realidad, no opera en la capa de DNS.
‫puerto, en el mismo servidor, esto aún no lo hará.
‫Si alguna vez ha ejecutado varios sitios web en el mismo
‫Todavía necesitarás otra pieza del rompecabezas además de eso si realmente deseas ejecutar varios sitios web en el mismo puerto, en el
‫mismo enjambre.
‫Afortunadamente, esa es una solicitud bastante común,
‫y hay varias opciones que puede hacer para resolver estos dos problemas.
‫Una de ellas es utilizar Nginx o HAProxy, que son ejemplos bastante buenos de contenedores que se colocarán al frente
‫con su malla de
‫enrutamiento, y en realidad actúan como un balanceador de carga con estado o una capa para equilibrador de carga, que también puede almacenar en caché y muchas otras cosas algunos de ellos en los recursos de esta sección.
‫Si lo necesita, es posible que desee verificar
‫También debo mencionar que si pagases por una suscripción a la edición
‫Docker Enterprise, conlleva algo llamado UCP o Docker Data Center, que es una interfaz web. Pero debería mencionar esa edición de Docker Enterprise, si
‫obtienes una suscripción a eso para tus nodos de enjambre, en realidad viene con una
‫capa incorporada para proxy web que te permite simplemente
‫arrojar nombres DNS en la configuración web de tus servicios de enjambre y todo solo funciona
‫