Configurar Minikube tunnel con Docker


En este post aprenderás a Configurar Minikube tunnel con Docker para exponer un servicio de un pod

oscar Escrito por oscar 04 August 2025 65 0

En este post aprenderás a Configurar Minikube tunnel con Docker para exponer un servicio de un pod

🔁 ¿Qué es minikube tunnel?

Minikube corre tu clúster Kubernetes dentro de una máquina virtual o contenedor Docker. Esto significa que, por defecto, los servicios LoadBalancer no se exponen automáticamente a tu red local, como sí lo harían en un entorno real (como GKE o EKS).

Entonces, minikube tunnel:

🔗 Crea una conexión (túnel) entre tu host local (Windows/macOS/Linux) y la red interna del clúster de Minikube, permitiendo exponer los servicios LoadBalancer a tu máquina.

✅ Requisitos previos

🔧 Paso a paso para configurar Minikube con Docker

1️⃣ Seleccionar el driver docker

Minikube puede usar Docker como proveedor de máquinas virtuales. Para establecer Docker como driver por defecto:

minikube config set driver docker

O también puedes iniciarlo directamente con el driver:

minikube start --driver=docker

✔️ Esto crea un clúster de Kubernetes dentro de un contenedor Docker.

2️⃣ Verifica que el clúster funciona

kubectl get nodes

Deberías ver un nodo con estado Ready.

🚇 ¿Cómo usar minikube tunnel?

minikube tunnel se usa para exponer los servicios LoadBalancer en tu máquina local, redireccionando los puertos del clúster a tu host.

❗ Importante: minikube tunnel requiere privilegios de administrador. En Windows debes ejecutar una terminal como administrador para que minikube tunnel funcione correctamente.

🧱 ¿Por qué se necesita ejecutar como administrador?

Porque:

  1. El túnel necesita crear una interfaz de red virtual en el sistema.
  2. Necesita asignar rutas estáticas o abrir puertos bajos (como 80 o 443).
  3. Estos cambios requieren permisos elevados.

Ejecuta el túnel

Abre una nueva terminal como administrador y corre:

minikube tunnel

Esto creará rutas y puertos necesarios para exponer los servicios LoadBalancer.

🧩 ¿Qué pasa cuando creas un servicio LoadBalancer?

1️⃣ Creas un Deployment y un Servicio

Creamos un deployment de una imagen nginx, para mas detalle en el post deployment en kubernetes

kubectl create deployment nginx --image=nginx

Luego creamos un servicio como lo explico en service en kubernetes

kubectl expose deployment nginx --type=LoadBalancer --port=80

Este servicio solicita una IP externa (como haría en la nube), pero como estás en local… Kubernetes queda esperando que un LoadBalancer real le asigne esa IP.

2️⃣ Entra minikube tunnel al rescate

Cuando ejecutas:

minikube tunnel

Suceden varias cosas:

🧠 Internamente:

  • Intercepta la solicitud de IP externa del servicio LoadBalancer.
  • Crea una interfaz de red virtual en tu sistema operativo.
  • Redirecciona las peticiones desde tu host hacia la IP del servicio dentro del contenedor/VM.
  • Asigna una IP local a ese servicio, que es accesible desde tu navegador u otras apps.

3️⃣ El resultado

Cuando haces:

kubectl get svc nginx

Verás algo como:

NAME    TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
nginx   LoadBalancer   10.96.128.70   192.168.49.2   80:32444/TCP   5m

✅ El EXTERNAL-IP (por ejemplo 192.168.49.2) es una IP generada por el túnel de Minikube.

Si visitas http://192.168.49.2, llegarás directamente al contenedor de Nginx que está corriendo dentro del clúster, gracias al túnel.

📡 ¿Cómo enruta exactamente el tráfico?

Supón esto:

  • Tu navegador en Windows envía una petición a 192.168.49.2:80
  • Windows la enruta a través de la interfaz de red creada por minikube tunnel
  • Minikube enruta esa solicitud al servicio nginx
  • El servicio pasa la solicitud al Pod correspondiente
  • El Pod responde → el túnel transporta la respuesta → tu navegador muestra la página

Comentario

Debe aceptar antes de enviar