175 lines
5.9 KiB
Markdown
175 lines
5.9 KiB
Markdown
# 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.<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 (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.<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** 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 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 <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.
|