5.9 KiB
VS Code Server en Kubernetes
1) Resumen ejecutivo
Hemos desplegado un servidor de Visual Studio Code (VS Code) dentro del clúster Kubernetes. Esto permite a cualquier miembro autorizado del equipo desarrollar desde el navegador, sin instalar IDEs localmente, con el código y las herramientas co‑localizadas junto a los servicios del propio clúster.
Beneficios clave
- Acceso vía web segura (HTTPS) desde cualquier lugar.
- Misma experiencia que VS Code de escritorio (extensiones, terminal, Git, depuración).
- Entorno homogéneo para todo el equipo (misma versión, mismas herramientas, mismas extensiones).
- Menos fricción en equipos con políticas corporativas estrictas o dispositivos bloqueados.
- Cercanía al clúster → menos latencia en depuración y herramientas CLI.
2) ¿Para qué sirve?
- Edición de código de repositorios alojados en nuestro Git (pull/push desde el propio IDE).
- Terminal integrada para ejecutar
kubectl,helm,make,npm, etc. - Depuración remota de servicios corriendo en el clúster.
- Formación y soporte: un entorno único para demos, pair programming y sesiones prácticas.
3) ¿Cómo se usa (alto nivel)?
- Navegar a:
https://code.<tu-dominio>(tenemos Ingress + cert-manager con TLS). - Autenticarse (usuario/contraseña o SSO si lo integramos con el proveedor corporativo).
- Abrir carpeta/proyecto:
File → Open Folder…(o clonar con Git desde la terminal). - Instalar extensiones necesarias (Kubernetes, YAML, Docker, Go, Java, Python, etc.).
- Usar la terminal integrada para comandos habituales (
kubectl,git, etc.).
Nota: La experiencia es equivalente a VS Code de escritorio, pero sin instalar nada en el equipo del usuario.
4) Arquitectura (resumen)
- Deployment (uno o varios pods) con la imagen de VS Code Server.
- Service (ClusterIP / NodePort de respaldo) + Ingress público
code.<tu-dominio>con TLS (Let’s Encrypt /ClusterIssuer). - PVC para persistir extensiones, configuración del usuario y cachés.
- ConfigMap/Secret para parámetros (password/SSO, ajustes, etc.).
Diagrama lógico (simplificado):
User (navegador HTTPS)
│
Ingress (nginx/haproxy) ──► Service ──► Pod VS Code Server
│
└── PVC (datos usuario / extensiones)
5) Despliegue
Repositorio con manifiestos Kustomize. Para (re)desplegar:
kubectl apply -k .
Estructura típica:
./
├─ namespace/
├─ deployment/
├─ service/
├─ ingress/
├─ pvc/
└─ kustomization.yaml
Variables comunes (ejemplos):
- Host:
code.<tu-dominio> - Clase de Ingress:
nginx - Certificados:
letsencrypt-prod
6) Seguridad
- TLS extremo a extremo (HTTPS) gestionado por cert-manager.
- Autenticación: contraseña fuerte por
Secreto SSO (OIDC con el IdP corporativo / Keycloak / FreeIPA, etc.). - NetworkPolicies (opcional) para limitar tráfico en el namespace.
- RBAC: acceso al namespace controlado; el pod no necesita privilegios del clúster.
- Backups del PVC (ver §9).
Buenas prácticas mínimas:
- Rotar credenciales/secrets.
- Activar HSTS en Ingress.
- Limitar tamaño de subida y tiempo de sesión si es necesario.
7) Experiencia y “maravillas” de trabajar en VS Code (en web)
- Extensiones: Marketplace completo (Kubernetes, ESLint, Prettier, GitLens, Python, Java, Go, etc.).
- DevContainers (opcional): reproducibilidad total del entorno.
- Live Share: colaboración en tiempo real.
- Remote Tunnels / SSH: conectar a otros entornos si se requiere.
- Terminal multi‑shell con historial y tareas automatizadas.
- Editor web: todo en el navegador, sin instalaciones locales.
8) Operación diaria (rápida)
- Login:
https://code.<tu-dominio>. - Abrir proyecto: clonar o abrir carpeta local del contenedor.
- Sincronizar:
git pull / git pushdesde Source Control o terminal. - Kubernetes: extensiones + contexto
kubectlya disponible en el pod. - Extensiones: instalar/actualizar según proyecto.
9) Mantenimiento y backups
- Logs:
kubectl logs -l app=vscode -f. - Reinicio:
kubectl rollout restart deployment/vscode. - Actualización de imagen: cambiar tag en el
Deploymentykubectl apply -k .. - Backup del PVC: incluir el claim en la política de copias (snapshot CSI o rsync/velero según plataforma).
10) Coste y recursos
- CPU/RAM: dimensionar requests/limits (p. ej. 500m–2 vCPU / 1–4 GB RAM por usuario).
- Almacenamiento: PVC 5–20 GB por usuario (extensiones y cachés).
- Escalado: múltiples réplicas (por usuario/grupo) o varios deployments por equipos.
11) Preguntas frecuentes
¿Puedo usarlo sin instalar nada? Sí, solo hace falta un navegador moderno.
¿Y si mi portátil está “capado” o es poco potente? No hay problema: el trabajo pesado ocurre en el clúster.
¿Se integra con nuestro Git? Sí. Puedes autenticarte con tokens/SSH y trabajar con ramas, PRs, etc.
¿Es seguro exponerlo a Internet? Con TLS, autenticación robusta y buenas prácticas, sí. Recomendado usar SSO corporativo y aplicar WAF/límites si es público.
¿Qué pasa si el pod reinicia? La configuración y extensiones persisten en el PVC.
12) Anexo — Comandos útiles
# Desplegar/actualizar
kubectl apply -k .
# Ver recursos
kubectl get all -n <namespace>
# Logs en tiempo real
kubectl logs -l app=vscode -n <namespace> -f
# Reiniciar deployment
kubectl rollout restart deployment/vscode -n <namespace>
# Describir ingress
kubectl describe ingress vscode -n <namespace>
Estado actual: Servicio desplegado y accesible por Ingress con TLS. Pendiente/En curso: integración SSO (si aplica) y política de backups del PVC.