Sé que minikube debe usarse solo para uso local, pero me gustaría crear un entorno de prueba para mis aplicaciones.
Para hacer eso, deseo exponer mis aplicaciones que se ejecutan dentro del clúster de minikube al acceso externo (desde cualquier dispositivo en Internet público, como un teléfono inteligente 4G).
nota: ejecuto minikube con --driver=docker
servicios de obtención de kubectl
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web8080 NodePort 10.99.39.162 <none> 8080:31613/TCP 3d1hminikube ip
192.168.49.2Una forma de hacerlo es la siguiente:
firewall-cmd --add-port=8081/tcp kubectl port-forward --address 0.0.0.0 services/web8080 8081:8080entonces puedo acceder usando:
curl localhost:8081 (directly from the machine running the cluster inside a VM) curl 192.168.x.xx:8081 (from my Mac in same network - this is the private ip of the machine running the cluster inside a VM) curl 84.xxx.xxx.xxx:8081 (from a phone connected in 4G - this is the public ip exposed by my router) No quiero usar esta solución porque kubectl port-forward es débil y debe ejecutarse cada vez que el reenvío de puertos ya no está activo.
Cómo puedo conseguir esto ?
(EDITADO) - USANDO LOADBALANCER
cuando uso el tipo LoadBalancer y minikube tunnel , puedo exponer el servicio solo dentro de la máquina que ejecuta el clúster.
servicios de obtención de kubectl
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service LoadBalancer 10.111.61.218 10.111.61.218 8080:31831/TCP 3d3h curl 10.111.61.218:8080 (dentro de la máquina que ejecuta el clúster) está funcionando
pero curl 192.168.x.xx:8080 (desde mi Mac en la misma LAN) no funciona
Gracias
Minikube como herramienta de desarrollo para un clúster de Kubernetes de un solo nodo proporciona una capa de aislamiento inherente entre Kubernetes y los dispositivos externos (siendo específico el tráfico entrante a su clúster desde LAN / WAN ).
Distintos controladores permiten flexibilidad cuando se trata del lugar donde se generará su clúster de Kubernetes y cómo se comportará en cuanto a la red.
¡Una nota al margen (solución alternativa)!
Como su
minikubeya reside en unaVMy usa--driver=docker, podría intentar usar--driver=none(podrácurl VM_IP:NodePortdesde laLAN). Generará su clúster de Kubernetes directamente en laVM.Considere verificar su documentación ya que existen ciertas limitaciones/desventajas:
Como esta configuración ya se basa en la VM (con un hipervisor desconocido) y el clúster está destinado a estar expuesto fuera de su LAN , le sugiero que opte por la configuración lista para producción. Esto eliminará inherentemente los problemas de conectividad que enfrenta. El clúster de Kubernetes se aprovisionará directamente en una VM y no en el contenedor de Docker .
Explicación del uso de --driver=docker : generará un contenedor en un sistema host con Kubernetes dentro. Dentro de este contenedor, Docker se usará una vez más para generar los pods necesarios para ejecutar el clúster de Pods .
En cuanto a las herramientas para aprovisionar su clúster de Kubernetes, deberá elegir la opción que más se adapte a sus necesidades. Algunos de ellos son los siguientes:
Después de crear su clúster de Kubernetes en una VM , podría reenviar el tráfico desde su enrutador directamente a su VM .
Recursos adicionales que pueden resultarle útiles:
curl $(minikube ip):$NODE_PORT : ahora podemos probar que la aplicación está expuesta fuera del clúster usando curl, la IP del nodo y el puerto expuesto externamente.
Para ti: curl 192.168.49.2:31613
Utilice el proxy inverso nginx https://www.zepworks.com/posts/access-minikube-remotely-kvm/
instale nginx, luego en nginx.conf agregue esto
stream { server { listen 8081; proxy_pass 192.168.49.2:8080; } }reiniciar nginx