Plataforma Educativa Informática

Bienvenidos a la página personal de José Domingo Muñoz Rodríguez

Últimas entradas

Blog

Aprende Incus con openLAB: instancias e imágenes

Aprende Incus con openLAB: instancias e imágenes

openLAB crea escenarios de prácticas a partir de un fichero YAML: contenedores y máquinas virtuales conectados por redes, con los usuarios, la red y los paquetes ya configurados. Para hacerlo no virtualiza por su cuenta, sino que se apoya en Incus. Por eso openLAB también es una buena excusa para aprender Incus: escribimos un escenario, lo creamos con una orden y después miramos con las herramientas de Incus qué ha pasado por dentro.

Esta es la primera entrada de una serie de cuatro sobre Incus y openLAB.

¿Qué es Incus?

Incus es un gestor de contenedores de sistema y máquinas virtuales de software libre. Es la continuación comunitaria de LXD y lo mantiene el proyecto Linux Containers, el mismo que desarrolla LXC.

  • Un contenedor de sistema es un Linux completo, con su systemd, sus servicios, sus usuarios y su red, que comparte el núcleo con el anfitrión. No es un contenedor de aplicación como los de Docker, que normalmente ejecutan un solo proceso, sino una máquina entera: entramos en él, instalamos paquetes y configuramos servicios. Como no arranca un núcleo propio, se pone en marcha en segundos y apenas gasta recursos.
  • Una máquina virtual, gestionada con QEMU y KVM, tiene su propio núcleo. Es más pesada, pero puede hacer cosas que un contenedor no puede.

Incus maneja los dos tipos de la misma forma, con las mismas órdenes, y por eso los llama a ambos instancias. En esta entrada trabajaremos con contenedores; las diferencias con las máquinas virtuales las veremos en la siguiente.

Incus funciona con un demonio (incusd), que es el que crea y gestiona todo, y un cliente (incus), la orden con la que le hablamos. El cliente se comunica con el demonio a través de una API REST, así que el mismo cliente puede gestionar también un Incus remoto. Podemos ver las versiones de los dos:

$ incus version
Client version: 6.0.4
Server version: 6.0.4
Seguir leyendo →
Microblog

openINIT: generador de cloud-config para cloud-init

Os presento openINIT, una aplicación web que genera y valida ficheros cloud-config, el user-data de cloud-init, desde un formulario. También genera el network-config (la network data), el segundo fichero que describe la red de la máquina. Sirve para cualquier nube —OpenStack, Incus, libvirt…— y resulta muy cómoda en clase: se elige lo que se quiere en cada pestaña, se ve el YAML generado en vivo y se copia en la plataforma sin escribir una sola línea de YAML a mano. También se puede abrir un user-data que ya tengas y comprobar si es correcto.

La he desarrollado con asistencia de inteligencia artificial, que me ha permitido convertir en una herramienta completa una idea que llevaba tiempo rondándome para mis clases.

Sus funcionalidades principales:

  • Una pestaña por bloque de cloud-init: sistema, usuarios y SSH, paquetes, ficheros, órdenes y lo que pasa al terminar. En Avanzado aparecen red, discos y «Otras claves» para cualquier otra opción en YAML.
  • También genera el network-config de la máquina (interfaces, direcciones fijas, puerta de enlace y DNS), con su propio botón para guardarlo aparte del user-data.
  • El YAML en vivo, con errores y avisos que enlazan con la documentación oficial y llevan al campo donde se corrigen, pensados para aprender.
  • Nivel Básico o Avanzado, para no abrumar al principio; solo cambia lo que se ve, nunca el YAML.
  • Para OpenStack, Incus, libvirt o cualquier nube, con avisos y ayuda adaptados a cada plataforma.
  • Un tutorial bajo el YAML que explica cada campo mientras trabajas, con una guía paso a paso desde la clave SSH hasta una web con nginx y tu index.html.
  • Ejemplos, abrir, guardar y copiar, además de ayudas para cifrar contraseñas, comprimir ficheros, cargar un Docker o usar variables de la instancia con Jinja.

La web no guarda nada en el servidor: el formulario vive en el navegador de cada uno, así que se puede publicar para toda una clase sin más. Funciona en Debian, Ubuntu y Fedora, y se instala con pipx o se levanta con Docker. Es software libre con licencia GPL-3.0.

Detalle →
Microblog

openLAB: generador de escenarios educativos virtualizados

Os presento openLAB, una aplicación que crea escenarios de prácticas a partir de un fichero YAML: instancias (contenedores o máquinas virtuales de Incus) conectadas por redes, con la red, los usuarios y los paquetes ya configurados. Está pensada para que el profesorado prepare los laboratorios de sus prácticas de redes, sistemas y servicios, y para que el alumnado los cree en su equipo con una sola orden (openlab up). Se maneja desde la línea de órdenes o desde el navegador (openlab web), y las dos formas trabajan sobre el mismo fichero.

La he desarrollado con asistencia de inteligencia artificial, que me ha permitido convertir en una herramienta completa una idea que llevaba tiempo rondándome para mis clases.

Sus funcionalidades principales:

  • Escenarios como directorios, al estilo de Vagrant: se reparten con git, se comprueban antes de crearlos (openlab check) y se actualizan cambiando solo lo modificado.
  • Instancias Debian, Ubuntu y Fedora, como contenedores o máquinas virtuales, con tipos de recursos al estilo de los sabores de OpenStack. También Windows Server 2025 y Windows 11.
  • Usuarios, claves SSH, paquetes y cloud-init propio, para que las instancias estén listas para la práctica (o a medio configurar para que el alumno la termine).
  • Instancias con escritorio (XFCE o GNOME), accesibles por RDP o desde la web.
  • Redes muy aisladas, aisladas o con NAT, con IP fijas o DHCP, el gestor de red que se quiera (ifupdown, networkd, Netplan o NetworkManager) y rutas a medida para prácticas de routers y cortafuegos.
  • Almacenamiento: discos de bloque (para LVM y RAID), directorios compartidos y carpetas del anfitrión.
  • Una web con el escenario dibujado y el estado de cada instancia en vivo, terminales y pantalla de las instancias, formularios y editor YAML, un asistente con modelos, prácticas guiadas y un modo tutorial que explica los conceptos.

Funciona en Debian, Ubuntu y Fedora, y se instala con pipx (openlab install se encarga de instalar y preparar Incus). Es software libre con licencia GPL-3.0.

Detalle →
Microblog

git.josedomingo.org: mi nuevo gestor de repositorios con Forgejo

Estrenamos gestor de repositorios git: git.josedomingo.org.

Está montado con Forgejo, una forja de software libre, ligera y autoalojada, desarrollada por la comunidad bajo el paraguas de Codeberg. Ofrece todo lo que esperas de una plataforma tipo GitHub: repositorios Git, incidencias, pull requests, wiki, gestión de paquetes e incluso integración continua con Forgejo Actions. Todo ello en tu propio servidor y con el control total de tus datos.

En mi gestor de repositorios iré subiendo los repositorios más interesantes de mi GitHub, y también lo utilizaré para mis proyectos personales. Eso sí, no me despido de GitHub: algunos repositorios seguirán estando allí.

Te invito a pasarte y echar un vistazo: git.josedomingo.org

Detalle →
Blog

Repartir el tráfico HTTPS por nombre sin descifrarlo: el módulo stream de nginx

El módulo stream de nginx

En muchas ocasiones me he encontrado con la necesidad de configurar iptables o nftables con reglas DNAT para redirigir el tráfico web entrante a un servidor interno. Funciona bien mientras haya un único destino, pero tiene una limitación: el kernel solo ve direcciones y puertos, así que todo el tráfico al puerto 443 va a parar al mismo servidor. ¿Y si tengo varios servidores web detrás y quiero repartir las conexiones según el nombre de dominio?

La solución habitual sería instalar un proxy inverso, pero eso obliga a descifrar el tráfico TLS en esa máquina y, por lo tanto, a tener allí los certificados de todos los servicios, algo que no siempre es posible ni deseable. Para estos casos, nginx nos ofrece el módulo stream, que nos permite repartir las conexiones por nombre sin descifrarlas.

Seguir leyendo →

Licencia: Puedes copiar y modificar todos los contenidos, pero siempre respetando los términos de la licencia CC-BY-SA.