añadido vscode

This commit is contained in:
2025-08-20 01:31:47 +02:00
parent 3bb0fdc23b
commit 9c1f0b975a
7 changed files with 263 additions and 0 deletions

174
vscode/readme.md Normal file
View File

@@ -0,0 +1,174 @@
# 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.