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

Gisela Torres
Computación en la nube
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

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.

nginx-ingress-controller ejecutándose
nginx-ingress-controller ejecutándose

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.

  
#Deploy a couple of apps
kubectl run aspnetcore-sample --image=mcr.microsoft.com/dotnet/core/samples:aspnetapp --port=80
kubectl expose deployment aspnetcore-sample --target-port=80 --type=NodePort
minikube service aspnetcore-sample --url

kubectl run ghost-blog --image=ghost --port=2368
kubectl expose deployment ghost-blog --target-port=2368 --type=NodePort
minikube service ghost-blog --url
 

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:

  
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: aspnetcore.sample
    http:
      paths:
      - path: /
        backend:
          serviceName: aspnetcore-sample
          servicePort: 80
  - host: ghost.sample
    http:
      paths:
      - path: /
        backend:
          serviceName: ghost-blog
          servicePort: 2368
 

Para crear este objeto puedes hacerlo a través del siguiente comando:

  
kubectl apply -f ingress_def_file.yaml
 

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:

  
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1localhost
255.255.255.255broadcasthost
::1             localhost
192.168.99.100   aspnetcore.sample
192.168.99.100   ghost.sample
 

Ahora intenta acceder desde el navegador tanto a http://aspnetcore.sample/

Acceso al pod aspnetcore-sample a través del Ingress
como a http://ghost.sample/

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

¡Saludos!

Gisela Torres

Gisela Torres trabaja en Microsoft como Cloud Solution Architect. Se trata de un puesto técnico cuya misión es apoyar y asesorar sobre soluciones y arquitecturas cloud utilizando Microsoft Azure como plataforma. Antes de eso trabajo como arquitecta de software y desarrolladora de aplicaciones en varias empresas. Durante esos años recibio varios premios por ejemplo Most Valuable Professional en Microsoft Azure. Le encanta programar y la tecnología en general.

Más artículos de Gisela en su blog - https://www.returngis.net/

Related Posts

Únete a nuestra Newsletter

Lidera la Conversación en la Nube