Files
kubernetes/vscode/readme.md
2025-08-20 01:31:47 +02:00

175 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 **colocalizadas 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.<tu-dominio>` (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.<tu-dominio>` con TLS (Lets 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.<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 `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** multishell 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 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. 500m2 vCPU / 14 GB RAM por usuario).
* **Almacenamiento**: PVC 520 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 <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.