¿Qué es Kubernetes Ingress?

Publicado el 30 de abril de 2020
Un ordenador portátil con la pantalla de color rosa brillante junto a un monitor grande de color rosa y un ratón 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 de un clúster Kubernetes.

En este artículo, veremos cómo y por qué puede necesitar exponer una aplicación al exterior de su clúster Kubernetes, las diferentes opciones disponibles y las situaciones en las que Kubernetes Ingress resulta más útil. Este blog asume que usted tiene un conocimiento básico de Kubernetes, pero si necesita más información de fondo, consulte los siguientes recursos:

Opciones para exponer aplicaciones implementadas en Kubernetes

Hay varias formas de exponer su aplicación al exterior de su clúster de Kubernetes, y deberá seleccionar la más 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 una de ellas proporciona una forma de exponer servicios y resulta útil en diferentes situaciones. Un servicio es esencialmente un frontend para su aplicación que redirige automáticamente el tráfico a los pods disponibles de forma distribuida e uniforme. 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 uno nuevo una vez que un pod muere. 

Al igual que los pods y las implementaciones, los servicios son recursos en Kubernetes. Un servicio proporciona un único punto de acceso desde fuera del clúster de Kubernetes y le permite acceder de forma dinámica 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 de un clúster de Kubernetes, normalmente a través de HTTPS/HTTP. Con Ingress, puede configurar fácilmente reglas para enrutar el tráfico sin tener que crear un montón de equilibradores de carga ni exponer cada servicio en el nodo. Esto lo convierte en la mejor opción para utilizar en entornos de producción. 

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

Ingress se compone de un objeto API Ingress y Del 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 Ingress es esencial porque es la implementación real de la API Ingress. Un controlador Ingress lee y procesa la información del recurso Ingress y, por lo general, se ejecuta como pods dentro del clúster de Kubernetes.

Un Ingress proporciona lo siguiente:

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

Para obtener una breve visión general de Kubernetes Ingress, vea el siguiente vídeo:

¿Qué es el controlador Ingress?

Si Kubernetes Ingress es el objeto API que proporciona reglas de enrutamiento para gestionar el acceso externo a los servicios, el controlador Ingress es la implementación real de la API Ingress. El controlador Ingress 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 en modo round-robin a través de los pods. La capa 7 (L7) se refiere al nivel de aplicación de la pila OSI: conexiones externas con equilibrio de carga entre pods, en función de las solicitudes. A menudo se prefiere la capa 7, pero debe seleccionar un controlador Ingress que cumpla con sus requisitos de equilibrio de carga y enrutamiento.

El controlador Ingress es responsable de leer la información del recurso Ingress y procesar esos datos según corresponda. A continuación se muestra un ejemplo de recurso de Ingress:

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

A modo de analogía, si Kubernetes Ingress es un ordenador, entonces el controlador Ingress es un programador que utiliza el ordenador y realiza acciones. Además, las reglas Ingress actúan como el gestor que dirige al programador para que realice el trabajo utilizando el ordenador. Las reglas Ingress 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 backend predeterminado. 

Si lo analizamos con mayor detenimiento, el controlador Ingress es una aplicación que se ejecuta en un clúster de Kubernetes y configura un equilibrador de carga HTTP según los recursos Ingress. El equilibrador de carga puede ser un equilibrador de carga de software que se ejecuta en el clúster o un equilibrador de carga de hardware o en la nube que se ejecuta externamente. Los diferentes equilibradores de carga requieren diferentes implementaciones del controlador Ingress.

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

IBM DevOps

¿Qué es DevOps?

Andrea Crawford explica qué es DevOps, su valor y cómo las prácticas y herramientas de DevOps ayudan a desarrollar las aplicaciones a lo largo de todo el proceso de entrega de software, desde la ideación hasta la producción. El plan de estudios, dirigido por los principales líderes de opinión de IBM, 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 dirigir el tráfico externo a su clúster, y cada una de ellas lo hace de manera diferente. Veamos cómo funciona cada una y en qué casos se utilizarían.

ClusterIP

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

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

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 su uso en entornos de producción). Por ejemplo, un NodePort se utilizaría 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

Equilibrador de carga

Este método utiliza un equilibrador de carga externo para exponer los servicios a internet. Puede utilizar el equilibrador de carga en un entorno de producción, pero a menudo se prefiere Ingress.

Este método utiliza un equilibrador de carga externo para exponer los servicios a internet. Puede utilizar el equilibrador de carga 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 son las siguientes:

  • El enrutamiento del tráfico se controla mediante reglas definidas en el recurso Ingress.
  • Ingress forma parte del clúster de Kubernetes y se ejecuta como pods.
  • Un equilibrador de carga externo es caro y debe gestionarse 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 servicios de Kubernetes desde fuera del clúster de Kubernetes. 

Resumen

La API Ingress de Kubernetes le permite exponer sus aplicaciones implementadas en un clúster de Kubernetes a internet con reglas de enrutamiento en una única fuente. Para implementar Ingress, debe configurar un controlador Ingress en su clúster, que se encarga de procesar la información de los recursos Ingress y permitir el tráfico según las reglas Ingress. Es importante elegir el servicio adecuado con la configuración apropiada para exponer su aplicación a internet según las directrices enumeradas anteriormente. 

Autor

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Soluciones relacionadas
IBM Instana Observability

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

Explore IBM Instana Observability
Soluciones DevOps

Utilice el software y las herramientas de DevOps para crear, implementar y gestionar aplicaciones nativas de la nube en varios dispositivos y entornos.

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

Acelere la agilidad y el crecimiento empresarial: modernice continuamente sus aplicaciones en cualquier plataforma utilizando 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 conocimientos en tiempo real en toda su pila, puede mantener las aplicaciones nativas de la nube funcionando de forma fiable.

  1. Descubra IBM Instana
  2. Explore las soluciones DevOps