📌 Contexto:
Todo comenzó con un simple experimento: tenía un contenedor de Rancher corriendo sin problemas en WSL con los puertos 80 y 443 mapeados. Quise probar otra instancia de Rancher con puertos distintos (8080:80 y 4443:443). Lo inicié, lo detuve, lo eliminé... y boom 💥, kubectl
dejó de funcionar por completo en mi WSL.
Lo que parecía un pequeño cambio terminó en una batalla de troubleshooting con errores como:
✅ "Connection refused" (localhost:8080
no responde)
✅ "x509: certificate signed by unknown authority" (error de TLS con localhost:443
)
✅ "The server has asked for the client to provide credentials" (autenticación rota)
Este artículo explica cómo se rompió mi configuración de Kubernetes en WSL, qué causó el problema, y cómo lo solucioné sin destruir mi entorno.
🚀 ¿Qué Ocurrió?
1️⃣ Tenía Rancher corriendo en un contenedor con los puertos 80 y 443:
docker run -d --restart=unless-stopped --name rancher -p 80:80 -p 443:443 --privileged rancher/rancher:latest
Todo funcionaba bien, kubectl
en WSL se conectaba sin problemas al clúster K3s dentro de Rancher.
2️⃣ Ejecuté un segundo contenedor Rancher con puertos diferentes:
docker run -d --restart=unless-stopped --name rancher2 -p 8080:80 -p 4443:443 --privileged rancher/rancher:latest
Esto creó otro Rancher en la misma máquina, pero con diferentes puertos.
3️⃣ Detuve y eliminé el segundo Rancher (rancher2
):
docker stop rancher2
docker rm rancher2
Aquí comenzó el problema.
4️⃣ Al volver a iniciar Rancher, kubectl
dejó de funcionar en WSL:
kubectl get pods
Aparecieron errores como:
Unable to connect to the server: dial tcp 127.0.0.1:8080: connect: connection refused
Luego intenté apuntarlo a localhost:443
, y obtuve:
tls: failed to verify certificate: x509: certificate signed by unknown authority
Y finalmente:
The server has asked for the client to provide credentials
🛑 ¿Qué había pasado?
Eliminé accidentalmente la configuración correcta de
kubectl
en WSL.kubectl
intentaba conectarse al API Server de Kubernetes enlocalhost:8080
, que ya no existía.Se rompió la autenticación porque WSL ya no tenía los certificados correctos de K3s dentro de Rancher.
🔧 Cómo Lo Arreglé
Después de algunas pruebas fallidas, la solución final fue:
1️⃣ Verificar Que Rancher Estaba Corriendo Correctamente
docker ps | grep rancher
Confirmé que el contenedor Rancher estaba corriendo en 80 y 443, pero que kubectl
intentaba conectarse a localhost:8080
.
2️⃣ Entrar al Contenedor Rancher y Verificar K3s
docker exec -it rancher /bin/bash
Dentro del contenedor, revisé el kubeconfig
de K3s:
cat /var/lib/rancher/k3s/server/cred/admin.kubeconfig | grep -A 5 "users:"
Confirmé que K3s estaba autenticando con certificados, no con tokens.
3️⃣ Copiar los Certificados Correctos a WSL
Para que kubectl
en WSL pudiera conectarse a K3s, copié los certificados desde el contenedor Rancher:
docker cp rancher:/var/lib/rancher/k3s/server/tls/client-admin.crt ~/.kube/client-admin.crt
docker cp rancher:/var/lib/rancher/k3s/server/tls/client-admin.key ~/.kube/client-admin.key
docker cp rancher:/var/lib/rancher/k3s/server/tls/server-ca.crt ~/.kube/server-ca.crt
Aseguré los permisos:
chmod 600 ~/.kube/client-admin.crt ~/.kube/client-admin.key ~/.kube/server-ca.crt
4️⃣ Encontrar la IP Correcta del API Server de K3s
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' rancher
172.17.0.2
Esta IP es la que kubectl
debía usar.
5️⃣ Configurar kubectl
en WSL con la IP Correcta
Edité el archivo de configuración:
vi ~/.kube/config
Modifiqué las rutas y la dirección del servidor:
apiVersion: v1
clusters:
- cluster:
server: https://172.17.0.2:6443
certificate-authority: /home/k8s/.kube/server-ca.crt
name: k3s-cluster
contexts:
- context:
cluster: k3s-cluster
user: admin
name: k3s-context
current-context: k3s-context
users:
- name: admin
user:
client-certificate: /home/k8s/.kube/client-admin.crt
client-key: /home/k8s/.kube/client-admin.key
🔹 Nota: No usar ~/.kube/
, sino rutas absolutas.
✅ Resultado Final
Después de estos cambios, kubectl
en WSL volvió a funcionar 🎉:
kubectl get nodes
kubectl get pods -A
kubectl cluster-info
NAME STATUS ROLES AGE VERSION
node-1 Ready control-plane,master 24h v1.31.1+k3s1
🎯 Lecciones Aprendidas
🔹 No lanzar múltiples instancias de Rancher en la misma máquina sin entender los efectos.
🔹 Nunca asumir que localhost:8080
seguirá funcionando después de eliminar un contenedor.
🔹 En WSL, kubectl
necesita credenciales y la IP correcta del API Server de K3s dentro del contenedor.
🔹 Los errores de x509
casi siempre son un problema de certificados faltantes o mal configurados.
Si te pasa algo similar, no te desesperes. 🚀 Sigue los pasos de esta guía y tu kubectl
volverá a funcionar sin problemas.
📌 ¿Te ha pasado algo similar? Cuéntame en los comentarios cómo lo solucionaste. 😃