Acceder a tus aplicaciones en Kubernetes a través de Ingress

Otra de las formas de acceder a tus pods desde fuera del clúster es a través de lo que se conoce como Ingress. Este recurso nos permite acceder a servicios a través de HTTP(S) y el tráfico se controla utilizando un conjunto de reglas que tú defines. Además de dar a tus aplicaciones una URL externa que permita el acceso, también se puede configurar para el balanceo de carga o terminación SSL. Resumiendo: un proxy inverso. En este artículo te voy a enseñar una de las configuraciones posibles.
Desplegar un Ingress Controller
Antes de configurar el Ingress primero necesitas tener un Ingress Controller. Si revisas la documentación oficial verás que hay de todos los colores. También puedes ver que Kubernetes mantiene dos, que son GCE y Nginx. En este artículo vamos a ver el segundo, para que entiendas el concepto y después puedas elegir el que consideres.
Este controlador no deja de ser un pod en nuestro clúster. Para este artículo vamos a usar minikube, del que ya te hablé en “Otras formas para tener un entorno con Kubernetes”. Aquí es super sencillo de instalar dicho controlador, ya que solo tienes que habilitarlo a través del siguiente comando:
minikube addons enable ingress
Una vez habilitado, podemos ver a través de kubectl get pods –all-namespaces que nginx-controller aparece entre nuestros pods.

Despliegue de un par de aplicaciones
Para comprobar cómo funciona este recurso, necesitamos algo a lo que acceder Para ello, voy a desplegar dos pods de dos aplicaciones cualesquiera, para ver cómo gestionamos el acceso a cada una de ellas. Para este ejemplo he elegido las imágenes aspnetapp y ghost.
Como ves, hemos creado los dos despliegues y luego he habilitado el acceso a través de NodePort. Para comprobar que todo funciona correctamente, puedes recuperar las URL para ambos servicios usando minikube service NOMBRE_DEL_SERVICIO –url. Deberías tener un sitio web con la plantilla de ejemplo de ASP.NET Core y otra con un blog con Ghost.
Crear el recurso Ingress
El recurso ingress es el que va a definir las reglas que se tienen que cumplir para enrutar la petición a un pod u a otro. En este caso, tenemos dos aplicaciones, aspnetcore-sample y ghost-blog, por lo que he creado un archivo con la siguiente configuración:
Para crear este objeto puedes hacerlo a través del siguiente comando:
A partir de este momento ya tenemos nuestro ingress creado. Puedes comprobarlo a través del siguiente comando:
Configurar el archivo /etc/hosts
Para poder acceder a ambos sitios, vamos a utilizar dos hostname que van a apuntar a la IP de minikube. Para conocer la misma puedes hacerlo con minikube ip. El archivo /etc/host debería quedar de la siguiente manera:
Ahora intenta acceder desde el navegador tanto a http://aspnetcore.sample/


Verás que ambos hostnames son identificados por el ingress y serás enrutado a la aplicación que toque.
¡Saludos!