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:
✅ Requisitos previos
- Docker Desktop instalado y corriendo correctamente.
- Minikube instalado y debe estar iniciado correctamente
🔧 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.
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:
- El túnel necesita crear una interfaz de red virtual en el sistema.
- Necesita asignar rutas estáticas o abrir puertos bajos (como 80 o 443).
- 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