# 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)? 1. Navegar a: `https://code.` (tenemos Ingress + cert-manager con TLS). 2. **Autenticarse** (usuario/contraseña o SSO si lo integramos con el proveedor corporativo). 3. Abrir carpeta/proyecto: `File → Open Folder…` (o clonar con Git desde la terminal). 4. Instalar extensiones necesarias (Kubernetes, YAML, Docker, Go, Java, Python, etc.). 5. 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.` 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: ```bash kubectl apply -k . ``` Estructura típica: ``` ./ ├─ namespace/ ├─ deployment/ ├─ service/ ├─ ingress/ ├─ pvc/ └─ kustomization.yaml ``` Variables comunes (ejemplos): * Host: `code.` * Clase de Ingress: `nginx` * Certificados: `letsencrypt-prod` --- ## 6) Seguridad * **TLS** extremo a extremo (HTTPS) gestionado por cert-manager. * **Autenticación**: contraseña fuerte por `Secret` o **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.`. * **Abrir proyecto**: clonar o abrir carpeta local del contenedor. * **Sincronizar**: `git pull / git push` desde Source Control o terminal. * **Kubernetes**: extensiones + contexto `kubectl` ya 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 `Deployment` y `kubectl 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 ```bash # Desplegar/actualizar kubectl apply -k . # Ver recursos kubectl get all -n # Logs en tiempo real kubectl logs -l app=vscode -n -f # Reiniciar deployment kubectl rollout restart deployment/vscode -n # Describir ingress kubectl describe ingress vscode -n ``` --- > **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.