Blog

LXC (Linux Containers) – Parte I – Conceptos básicos

En está ocasión voy a comenzar una serie de post sobre LXC (Linux Containers). En esté primer post vamos a ver unos conceptos básicos.

¿Qué es virtualización?

El concepto general que aparece en la Wikipedia es:

En Informática, virtualización es la creación -a través de software- de una versión virtual de algún recurso tecnológico, como puede ser una plataforma de hardware, un sistema operativo, un dispositivo de almacenamiento u otros recursos de red.

La virtualización nos permite ejecutar diferentes sistemas operativos a la vez, en una misma máquina física. De alguna manera, emulamos una máquina para cada sistema. Existen diferentes tipos de virtualización. Las habituales, del tipo VirtualBox, simulan una máquina completa y, en ella, instalamos el sistema operativo.

Otro concepto a tener en cuenta es el de hypervisor. No es más que un programa que permite que, múltiples sistemas operativos, compartan un único host hardware.

Otro tipo de virtualización, es la virtualización por Sistema Operativo. En este caso, es el sistema operativo quien se encarga de crear los contenedores, que alojarán los diferentes sistemas. Éste es el tipo de virtualización de los Linux Containers.

Es interesante la virtualización, desde el punto de vista de la seguridad, porque nos permite aislar diferentes aplicaciones y/o servicios, sin necesidad de utilizar diferentes máquinas reales, con lo que reducimos el impacto, en caso de una intrusión.

¿Qué es LXC?

Los Linux Containers no son una máquina virtual, son entornos virtuales, con su propio espacio de procesos y de nombres. Se basan en cgroups, que es una funcionalidad propia del kernel Linux. Esto se traduce en que, los Linux Containers, sólo alojarán sistemas operativos GNU/Linux.

Esta virtualización nos permite aislar los procesos y recursos de una manera mucho más simple que con máquinas virtuales ,y su objetivo, es que tengamos una instalación estándar de un sistema operativo, sin necesidad  de tener varias instancias del kernel. Esto hace que, el sistema operativo virtualizado, funcione a velocidad nativa, cosa que no ocurriría si hubiese que emular una máquina completa y tener varias instancias de kernels. En este sentido, podríamos considerarlos como una “vuelta de tuerca” a los clásicos chroot, permitiendo más aislamiento y más flexibilidad.

Arquitectura

El kernel nos proporciona la funcionalidad para separar el espacio de nombres y procesos. Libvirt, nos proporciona la interfaz encargada de gestionar los contenedores.

Disponemos de varias implementaciones para la gestión de los contenedores que, de alguna manera, utilizan libvirt para su gestión:

  • LXC: Son utilidades en el espacio de usuario para la gestión de contenedores. No utiliza libvirt directamente, pero es una dependencia a la hora de compilarlo.
  • Virt-Manager: Es una herramienta gráfica para la gestión de máquinas virtuales, soporta KVM, XEN y LXC. Utiliza, para el caso de los contenedores, libvirt directamente. Es necesario ejecutar el daemon libvirt, que actuará a modo de hypervisor.
  • Docker: Es un motor que nos permite empaquetar una aplicación y sus dependencias en un contenedor, que podrá ser ejecutado en cualquier servidor GNU/Linux. Es una “vuelta de tuerca” a las utilidades proporcionadas por LXC. Está todavía en desarrollo y, desde su web, no aconsejan su utilzación en entornos de producción (por ahora).
  •  Systemd: Nos proporciona una herramienta, systemd-nspawn, con la que podemos crear contenedores, que nos vendrán bien para testear. Este método no es adecuado para separar servicios en entornos de producción, por temas de seguridad. La configuración con los anteriores, nos permite crear contenedores que sí nos vendrán bien para separar servicios o aplicaciones en ambientes de producción.

Vamos a realizar una comparación con máquinas virtuales completas:

La primera diferencia es que, en cada máquina virtual, ha de existir una instancia del kernel. Esto no es necesario con los contenedores, con lo que, la velocidad de cada contenedor, es mayor.

Una ventaja de las máquinas virtuales,  es la posibilidad disponer diferentes sistemas operativos, no sólo basados en LINUX. Sin embargo, el consumo de recursos por cada máquina virtual, es mucho mayor que con contenedores. Podemos crear muchos más contenedores por host, que máquinas virtuales.

En el caso de máquinas virtuales, al ser sistemas operativos independientes, implica mayor separación y seguridad. Si un kernel falla, no queda todo el sistema inhabilitado. Pero presenta el incoveniente de la comunicación de cada máquina virtual con el resto del sistema, que será más compleja. Aunque aún no existe un aislamiento total, que proporcionaría características similares a las máquinas virtuales, la intención es llegar a ese punto, proporcionando un sistema operativo completo por contenedor.

En los siguientes artículos, veremos cómo crear y manejar los contenedores, empezando por los LXC.

¡Espero que os haya gustado! 😉

Un saludo!!

Mª José Montes – mjose@highsec.es – @MMontesDiaz

  1. David
    David02-21-2014

    Muy interesante. Esperamos los demás artículos con impaciencia…. A ver si lxc es mejor que kvm…. Cuando tienes varias máquinas linux virtualizadas.

    Saludos

  2. Alberto
    Alberto02-26-2014

    Buena introducción.
    Sería interesante mostrar ejemplos prácticos de situaciones reales de uso y su despliegue (separación de servicios tales como Bases de Datos y Web) y relación con la seguridad (mucha!) y gestión (que la puede llegar a complicar).

Leave a Reply


*

    No Twitter Messages