Kubernetes

Entrada de Kubernetes

Entrada de Kubernetes
Kubernetes tiene muchas partes móviles. Esto es de esperar de cualquier modelo destinado a la informática distribuida. Para explorar lo que Kubernetes Ingress nos ayuda a lograr, primero recapitulemos algunos detalles relevantes sobre un clúster de Kubernetes típico:

  1. Una aplicación implementada en un clúster de Kubernetes se ejecuta como pods de recopilación.
  2. Los pods son esencialmente contenedores que se programan en varios nodos.
  3. Los nodos pueden ser servidores físicos o VM ofrecidos por su proveedor de alojamiento. Obviamente, también puede Kubernetes en un servidor local, si así lo desea.
  4. Cada pod tiene una dirección IP única.
  5. Su aplicación se divide en muchos subcomponentes, a menudo denominados microservicios.
  6. Para cada microservicio de su aplicación, tiene un Servicio correspondiente en Kubernetes.
  7. En el contexto de Kubernetes, un Servicio expone una colección de pods al resto del clúster como una única abstracción. Una única IP virtual.
  8. Esto ayuda a que un servicio de su aplicación se comunique con otro servicio. Es una abstracción que le permite abordar una colección de pods, en lugar de especificar la dirección IP de un pod, cada vez que quiera hablar con él.
  9. Un servicio de Kubernetes también actúa como un equilibrador de carga para todos los pods que representa. El tráfico se distribuye uniformemente en todos los nodos.

Hasta aquí todo bien. Cada servicio puede hablar con otro servicio. Esta comunicación es posible en todo el clúster de Kubernetes

Servicios de exposición

"Si un árbol cae en un bosque y no hay nadie cerca para escucharlo, ¿emite algún sonido??"

En una nota similar, si su aplicación no tiene un propósito fuera del clúster de Kubernetes, ¿realmente importa si su clúster está bien construido o no?? Probablemente no.

Para darle un ejemplo concreto, digamos que tenemos una aplicación web clásica compuesta por un frontend escrito en Nodejs y un backend escrito en Python que usa una base de datos MySQL. Implementa dos servicios correspondientes en su clúster de Kubernetes.

Usted crea un Dockerfile que especifica cómo empaquetar el software frontend en un contenedor y, de manera similar, empaqueta su backend. A continuación, en su clúster de Kubernetes, implementará dos servicios, cada uno con un conjunto de pods detrás. El servicio web puede comunicarse con el clúster de la base de datos y viceversa.

Sin embargo, Kubernetes no expone ninguno de estos servicios (que son puntos finales HTTP esenciales) al resto del mundo. Como se indica en los documentos oficiales:

"Se supone que los servicios tienen direcciones IP virtuales que solo se pueden enrutar dentro de la red del clúster"

Esto es perfectamente razonable desde el punto de vista de la seguridad, sus servicios pueden comunicarse entre sí, pero el clúster no permitirá que las entidades externas se comuniquen con los servicios directamente. Por ejemplo, solo su interfaz web puede comunicarse con el servicio de la base de datos y nadie más puede enviar solicitudes al servicio de la base de datos.

El problema surge cuando miramos el caso de uso de un servicio frontend. Debe estar expuesto al resto del público para que los usuarios finales puedan usar su aplicación. Exponemos dichos Servicios utilizando Kubernetes Ingress.

Entrada de Kubernetes

Ingress expone rutas HTTP y HTTPS desde fuera del clúster a servicios dentro del clúster. Puede controlar las reglas de enrutamiento definiendo el recurso Kubernetes Ingress. Pero hace mucho más que eso. La exposición de un solo servicio se puede lograr utilizando varias otras alternativas como NodePort o Load Balancers, pero estas instalaciones no tienen características que sean lo suficientemente sofisticadas para una aplicación web moderna.

Funciones como exponer múltiples aplicaciones en una sola IP, definir rutas, etc.

Entonces, entendamos estas características para el resto del artículo:

Entrada de servicio único

Esta es la versión más simple de exponer un solo servicio como una interfaz web con una IP (o un nombre de dominio) y puertos HTTP y HTTPS predeterminados (i.e, 80 y 443).

Fanout único

Esta es una configuración de ingreso que le permite permitir el tráfico entrante a una sola IP y enrutarlo a múltiples servicios.

Consiste en:

El fanout único es el caso en el que se utiliza una única IP para varios servicios. Los servicios pueden estar en diferentes rutas en el URI como foo.bar.com / admin puede ser un servicio para administradores y foo.bar.com / home puede ser el servicio que genera la página de inicio de cada usuario.

El puerto de entrada siempre será 80 o 443, pero el puerto donde se ejecutan los servicios (dentro del clúster) puede diferir bastante.

Este tipo de ingreso nos ayuda a minimizar la cantidad de balanceadores de carga en el clúster, ya que esencialmente actúa como uno.

Alojamiento virtual basado en nombre

Las direcciones IP públicas son finitas. También son bastante caros. La idea del alojamiento virtual basado en nombres es más antigua que Kubernetes. La esencia es que apuntas los registros DNS para diferentes sitios web como ww1.ejemplo.com y ww2.ejemplo.com a la misma dirección IP. El servidor que se ejecuta en esa dirección IP verá la solicitud entrante y si el nombre de host mencionado en la solicitud es para ww1.ejemplo.com, entonces le servirá ese sitio web, y si ww2.ejemplo.com se solicita, luego se sirve.

En el contexto de Kubernetes, podemos ejecutar dos servicios que se ejecutan en, digamos, el puerto 80 y exponerlos a ambos en una sola dirección IP utilizando una entrada también del puerto 80. En el punto de entrada el tráfico de ww1.ejemplo.com se separará del tráfico durante la segunda guerra mundial.ejemplo.com. De ahí el término hosting virtual basado en nombres.

Conclusión

Ingress en Kubernetes es bastante sofisticado para cubrirse en una sola publicación. Hay una variedad de casos de uso y una variedad de controladores de Ingress que agregarán la funcionalidad de Ingress a su clúster. Recomendaría comenzar con Nginx Ingress Controller.

Para obtener más detalles y especificaciones, también puede seguir la documentación oficial.

WinMouse le permite personalizar y mejorar el movimiento del puntero del mouse en una PC con Windows
Si desea mejorar las funciones predeterminadas del puntero del mouse, use el software gratuito WinMouse. Agrega más funciones para ayudarlo a aprovech...
El botón de clic izquierdo del mouse no funciona en Windows 10
Si está utilizando un mouse dedicado con su computadora portátil o computadora de escritorio, pero el el botón izquierdo del mouse no funciona en Wind...
El cursor salta o se mueve aleatoriamente mientras escribe en Windows 10
Si descubre que el cursor del mouse salta o se mueve por sí solo, automáticamente, de manera aleatoria mientras escribe en una computadora portátil o ...