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

5.9 KiB
Raw Permalink Blame History

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:

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

# 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.