Estoy en Windows y usé Docker Desktop para implementar un clúster local de Kubernetes usando WSL 2. Intenté implementar un pod y exponerlo a través de un servicio NodePort para poder acceder a él fuera del clúster, pero no funciona.
Estos son los comandos para reproducir el escenario:
kubectl create deployment echoserver --image=k8s.gcr.io/echoserver:1.4 kubectl expose deployment echoserver --type=NodePort --port=8080 Intentar abrir NODE_IP:EXPOSED_PORT en el navegador o ejecutar el comando nc NODE_IP EXPOSED_PORT e intentar enviar un mensaje (desde WSL o Windows) no funciona.
NODE_IP es la IP interna del nodo Docker Desktop K8S (obtenida al ver la columna INTERNAL-IP en el comando kubectl get nodes -o wide )EXPOSED_PORT es el puerto de nodo expuesto por el servicio (obtenido al ver el campo NodePort en el comando kubectl describe service echoserver )Abrir la URL en el navegador debe encontrarse con esta página. Sin embargo, obtendrá una respuesta de error genérica que indica que el navegador no pudo acceder a la URL.
El envío de un mensaje con el comando netcat debe recibir una respuesta de solicitud incorrecta 400, ya que no será una solicitud HTTP con el formato adecuado. Sin embargo, no obtendrá ninguna respuesta o es posible que la conexión TCP ni siquiera se realice en primer lugar.
Intentar comunicarse con el servicio y/o el pod desde dentro del clúster, por ejemplo, a través de otro pod, funciona perfectamente. Usar el comando kubectl port-forward deployment/echoserver 2311:8080 para reenviar el puerto de la implementación localmente y luego acceder a localhost:2311 en el navegador o a través de netcat también funciona perfectamente (tanto en WSL como en Windows).
Si desea acceder a él sin usar localhost, debe usar su <windows_hosts's_IP:NodePort> .
Entonces, tener su implementación y servicio implementado:
$kubectl get svc,deploy NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/echoserver NodePort 10.105.169.2 <none> 8080:31570/TCP 4m12s service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m3s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/echoserver 1/1 1 1 4m19s Puede acceder a él mediante localhost:31570 o <windows_hosts's_IP:NodePort>.
En mi caso, 192.168.0.29 es la IP de mi host de Windows:
curl.exe 192.168.0.29:31570 CLIENT VALUES: client_address=192.168.65.3 command=GET real path=/ query=nil request_version=1.1 request_uri=http://192.168.0.29:8080/