¿Qué es Kubernetes Ingress?

Publicado el 30 de abril de 2020
Una computadora portátil con pantalla rosa brillante junto a un monitor rosa grande y un mouse sobre una superficie oscura con iluminación de fondo negra.
By Ravi Saraswathi

Definición de Kubernetes Ingress

Kubernetes Ingress es un objeto API que proporciona reglas de enrutamiento para gestionar el acceso de usuarios externos a los servicios en un clúster de Kubernetes.

En este artículo, veremos cómo y por qué es posible que necesite exponer una aplicación al exterior de su clúster de Kubernetes, las diferentes opciones disponibles y las situaciones en las que Kubernetes Ingress es más útil. En este blog se supone que tiene conocimientos básicos de Kubernetes, pero si necesita más información general, consulte los siguientes recursos:

Opciones para exponer aplicaciones desplegadas en Kubernetes

Hay varias formas de exponer su aplicación al exterior de su clúster de Kubernetes, y querrá seleccionar la adecuada en función de su caso de uso específico. 

  Las cuatro opciones principales que compararemos en esta publicación son: ClusterIP, NodePort, LoadBalancer e Ingress. Cada uno proporciona una forma de exponer los servicios y es útil en diferentes situaciones. Un servicio es esencialmente una interfaz para su aplicación que redirige automáticamente el tráfico a los pods disponibles de manera distribuida uniformemente. Los servicios son una forma abstracta de exponer una aplicación que se ejecuta en un conjunto de pods como un servicio de red. Los pods son inmutables, lo que significa que cuando mueren, no resucitan. El clúster de Kubernetes crea nuevos pods en el mismo nodo o en un nuevo nodo una vez que un pod muere. 

Al igual que los pods y los despliegues, los servicios son Recursos en Kubernetes. Un servicio proporciona un único punto de acceso desde fuera del clúster y le permite acceder dinámicamente a un grupo de pods de réplica. 

Para el acceso a aplicaciones internas dentro de un clúster de Kubernetes, ClusterIP es el método preferido. Es una configuración predeterminada en Kubernetes y utiliza una dirección IP interna para acceder al servicio.

Para exponer un servicio a solicitudes de red externas, NodePort, LoadBalancer e Ingress son opciones posibles. Primero veremos Ingress y compararemos los servicios más adelante en este artículo.

¿Qué es Kubernetes Ingress y por qué es útil?

Kubernetes Ingress es un objeto API que proporciona reglas de enrutamiento para gestionar el acceso de usuarios externos a los servicios en un clúster de Kubernetes, típicamente a través de HTTPS/HTTP. Con Ingress, puede configurar fácilmente reglas para enrutar el tráfico sin crear un montón de Load Balancers o exponer cada servicio en el nodo. Esto lo convierte en la mejor opción para usar en entornos de producción. 

En entornos de producción, normalmente necesita enrutamiento basado en contenido, soporte para múltiples protocolos y autenticación. Ingress le permite configurar y administrar estas capacidades dentro del clúster.

Ingress se compone de un objeto API Ingress y el controlador Ingress. Como hemos comentado, Kubernetes Ingress es un objeto API que describe el estado deseado para exponer los servicios al exterior del clúster de Kubernetes. Un controlador de entrada es esencial porque es la implementación real de la API de entrada. Un controlador de entrada lee y procesa la información de Recursos de entrada y, por lo general, se ejecuta como pods dentro del clúster de Kubernetes.

Un Ingress proporciona lo siguiente:

  • URL accesibles externamente para aplicaciones desplegadas en clústeres de Kubernetes
  • Compatibilidad con host virtual basado en nombres y enrutamiento basado en URI
  • Reglas de equilibrio de carga y tráfico, así como terminación SSL

Para obtener una descripción general visual rápida de Kubernetes Ingress, vea el siguiente video:

¿Qué es el controlador de ingreso?

Si Kubernetes Ingress es el objeto de API que proporciona reglas de enrutamiento para gestionar el acceso externo a los servicios, Ingress Controller es la implementación real de la API de Ingress. El controlador de entrada suele ser un equilibrador de carga para enrutar el tráfico externo a su clúster de Kubernetes y es responsable de los servicios de red L4-L7. 

La capa 4 (L4) se refiere al nivel de conexión de la pila de red OSI: conexiones externas con equilibrio de carga de forma rotativa entre pods. La capa 7 (L7) se refiere al nivel de aplicación de la pila OSI: conexiones externas con carga equilibrada en los pods, en función de las solicitudes. A menudo se prefiere la capa 7, pero debe seleccionar un controlador de entrada que cumpla con sus requisitos de equilibrio de carga y enrutamiento.

El controlador de ingreso es responsable de leer la información del recurso de ingreso y procesar esos datos en consecuencia. El siguiente es un recurso de entrada de muestra:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress spec: backend: serviceName:ServiceName servicePort:<Port Number>

Como analogía, si Kubernetes Ingress es una computadora, entonces Ingress Controller es un programador que usa la computadora y toma medidas. Además, las reglas de ingreso actúan como el administrador que dirige al programador para que haga el trabajo usando la computadora. Las reglas de ingreso son un conjunto de reglas para procesar el tráfico HTTP entrante. Un Ingress sin reglas envía todo el tráfico a un único servicio de backend predeterminado. 

Mirando más a fondo, el Ingress Controller es una aplicación que se ejecuta en un clúster y configura un equilibrador de carga HTTP de acuerdo con los Recursos de Ingress. El equilibrador de carga puede ser un equilibrador de carga de software que se ejecute en el clúster o un equilibrador de carga de hardware o en la nube que se ejecute externamente. Los diferentes equilibradores de carga requieren diferentes implementaciones de Ingress Controller.

Hay varios controladores de entrada disponibles en el mercado, y es importante elegir el adecuado para gestionar el tráfico y la carga que llegan a su clúster de Kubernetes.

IBM DevOps

¿Qué es DevOps?

Andrea Crawford explica qué es DevOps, el valor de DevOps y cómo las prácticas y herramientas de DevOps le ayudan a mover sus aplicaciones a través de todo el delivery pipeline, desde la ideación hasta la producción. Dirigido por los principales líderes de pensamiento de IBM, el programa de estudio está diseñado para ayudar a los líderes empresariales a adquirir los conocimientos necesarios para priorizar las inversiones en IA que pueden impulsar el crecimiento.

Ingress vs. ClusterIP vs. NodePort vs. LoadBalancer

Ingress, ClusterIP, NodePort y LoadBalancer son formas de obtener tráfico externo en su clúster, y cada una lo hace de manera diferente. Echemos un vistazo a cómo funciona cada uno y dónde los usaría.

ClusterIP

ClusterIP es la opción preferida para el acceso al servicio interno y utiliza una dirección IP interna para acceder al servicio. Algunos ejemplos de dónde ClusterIP podría ser la mejor opción incluyen la depuración de servicios durante el desarrollo y las pruebas, el tráfico interno y los paneles.

ClusterIP es la opción preferida para el acceso al servicio interno y utiliza una dirección IP interna para acceder al servicio. Algunos ejemplos de dónde ClusterIP podría ser la mejor opción incluyen la depuración de servicios durante el desarrollo y las pruebas, el tráfico interno y los paneles.

NodePort

Un NodePort es una máquina virtual (VM) que se utiliza para exponer un servicio en un número de puerto estático. Se utiliza principalmente para exponer servicios en un entorno que no es de producción (de hecho, no se recomienda el uso en producción). Por ejemplo, se utilizaría un NodePort para exponer un único servicio (sin requisitos de equilibrio de carga para múltiples servicios).

Un NodePort es una máquina virtual (VM) que se utiliza para exponer un servicio en un número de puerto estático. Se utiliza principalmente para exponer servicios en un entorno que no es de producción

Equilibrio de carga

Este método utiliza un LoadBalancer externo para exponer los servicios a Internet. Puede usar LoadBalancer en un entorno de producción, pero a menudo se prefiere Ingress.

Este método utiliza un LoadBalancer externo para exponer los servicios a Internet. Puede usar LoadBalancer en un entorno de producción, pero a menudo se prefiere Ingress.

Ingress

Ingress le permite consolidar las reglas de enrutamiento del tráfico en un único recurso y se ejecuta como parte de un clúster de Kubernetes. Algunas de las razones por las que Kubernetes Ingress es la opción preferida para exponer un servicio en un entorno de producción incluyen las siguientes:

  • El enrutamiento del tráfico se controla mediante reglas definidas en el recurso de entrada.
  • Ingress forma parte del clúster de Kubernetes y se ejecuta como pod.
  • Un equilibrador de carga externo es costoso y debe administrarlo fuera del clúster de Kubernetes. Kubernetes Ingress se gestiona desde dentro del clúster.
Ingress le permite consolidar las reglas de enrutamiento del tráfico en un único recurso y se ejecuta como parte de un clúster de Kubernetes.

En entornos de producción, normalmente se utiliza Ingress para exponer aplicaciones a Internet. Se accede a una aplicación desde Internet a través del puerto 80 (HTTP) o el puerto 443 (HTTPS), e Ingress es un objeto que permite el acceso a sus Kubernetes Service desde fuera del clúster. 

Resumen

La API de Kubernetes Ingress le permite exponer sus aplicaciones desplegadas en un clúster de Kubernetes a Internet con reglas de enrutamiento en una única fuente. Para implementar Ingress, debe configurar un controlador de Ingress en su clúster: es responsable de procesar la información de recursos de Ingress y permitir el tráfico basado en las reglas de Ingress. Es importante elegir el servicio adecuado con la configuración adecuada para exponer su aplicación a Internet en función de las pautas enumeradas anteriormente. 

Autor

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Soluciones relacionadas
IBM Instana Observability

Aproveche el poder de la IA y la automatización para resolver problemas de manera proactiva en toda la pila de aplicaciones.

Explore IBM Instana Observability
Soluciones de DevOps

Utilice el software y las herramientas de DevOps para crear, desplegar y gestionar aplicaciones nativas de la nube en múltiples dispositivos y entornos.

Explore las soluciones de DevOps
Servicios de consultoría en la nube

Acelere la agilidad y el crecimiento empresarial: modernice continuamente sus aplicaciones en cualquier plataforma con nuestros servicios de consultoría en la nube.

Explore los servicios de consultoría en la nube
Dé el siguiente paso

Desde la detección proactiva de problemas con IBM Instana hasta los insights en tiempo real en toda su pila, puede mantener las aplicaciones nativas de la nube funcionando de forma confiable.

  1. Descubra IBM Instana
  2. Explore las soluciones de DevOps