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 ingressUna 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.
#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 --urlComo 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: 2368Para crear este objeto puedes hacerlo a través del siguiente comando:
kubectl apply -f ingress_def_file.yamlA partir de este momento ya tenemos nuestro ingress creado. Puedes comprobarlo a través del siguiente comando:
kubectl get ingressConfigurar 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.1 localhost
255.255.255.255 broadcasthost
::1 localhost
192.168.99.100 aspnetcore.sample
192.168.99.100 ghost.sampleAhora intenta acceder desde el navegador tanto a http://aspnetcore.sample/ 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!
Si quieres seguir aprendiendo sobre contenedores, tienes una lista de vídeos en mi canal de YouTube 👇🏻
¿Qué son los contenedores? Docker desde cero para principiantes
Docker CLI: Comandos esenciales que todo developer debe conocer
Domina los Dockerfiles: De lo básico a multi-stage
4 formas de crear un Dockerfile sin empezar desde cero
¿No entiendes las redes en Docker? Mira este vídeo
Cómo NO perder tus datos en Docker: Guía definitiva
Deja de configurar contenedores a mano: Aprende Docker Compose 🐙
Cómo subir tus imágenes a Docker Hub (Guía paso a paso)
Publica y automatiza tus imágenes de Docker con GitHub


Gracias muy útil tu articulo.
Hola!!
Gracias por el post. Pero como securizaríamos nuestro kubernetes, haciendo que los sites desplegados sobre ello no fueran accesibles por todo el mundo sino por quienes nosotros estimemos oportunos?
Gracias!
Buenas, el modelo planteado le falta contexto, Me pregunto: cuantos nodos tiene el cluster de k8s? la IP que atacas es la de minikube?
Me respondo a mi mismo. Es minikube