Jails: virtualización light
Gabriel Astudi!o Muñoz
Encuentro Linux 2009
1
Resumen
Contexto de la charla.
Descripción del problema.
Soluciones existentes.
Jails.
Descripción, uso y configuración.
Demostración práctica.
2
Contexto
...
Sistema Operativo
3
Contexto
...
Sistema Operativo
4
5
Mi motivación:
“Toda herramienta existe
porque soluciona un
problema”
6
¿Cuál es el problema?
Un posible escenario es el siguiente:
IP_1
IP_2
IP_N
HW "1"
HW "2"
HW "N"
+ Conjuntos de Paquetes A
+ Conjuntos de Paquetes B
+ Conjuntos de Paquetes N
7
Obviamente, los
conjuntos de paquetes
son incompatibles entre sí
¿Cuál es el problema?
Un posible escenario es el siguiente:
IP_1
IP_2
IP_N
HW "1"
HW "2"
HW "N"
+ Conjuntos de Paquetes A
+ Conjuntos de Paquetes B
+ Conjuntos de Paquetes N
Cada máquina tiene
un costo asociado
8
¿Cuál es el problema?
Un posible escenario es el siguiente:
Y el dinero no
cae del cielo
IP_1
IP_2
IP_N
HW "1"
HW "2"
HW "N"
+ Conjuntos de Paquetes A
+ Conjuntos de Paquetes B
+ Conjuntos de Paquetes N
9
¿Cómo solucionarlo?
Una solución podría ser:
IP_1
IP_2
IP_N
HW "1"
HW "2"
HW "N"
+ Conjuntos de Paquetes A
Hardware
+ Conjuntos de Paquetes B
Virtualización
Máq. 1
Máq. N
+ Conjuntos de Paquetes N
Red LAN
10
¿Cómo solucionarlo?
IP_1
IP_2
IP_N
HW "1"
HW "2"
HW "N"
+ Conjuntos de Paquetes A
+ Conjuntos de Paquetes B
+ Conjuntos de Paquetes N
Virtualización
Hardware
Máq. 1
Máq. N
Red LAN
Nivel de SO
Paravirtualización
Solaris Containers
Virtuozzo
Linux-Vserver
Jails FreeBSD
Xen
User Mode Linux
Emulación
HW
VMware
QEMU
VirtualBox
11
Jails
(FreeBSD)
12
Jails
Herramiento nativa de FreeBSD
Virtualización a nivel de SO
Desde FreeBSD 4.0 (año 2000)
Son réplicas del sistema principal:
Independientes entre sí (Memoria, FS y Red)
Cada jaula se identifica por su:
Jail ID (JID)
IP
nombre
Ubicación dentro del FS del host
13
Estructura: Acceso a la red
Cada jaula tiene
asignada una IP.
Son IP virtuales de la
interfaz de red del
Servidor.
Servidor
FreeBSD
Jail 1
Jail N
Red LAN
14
Estructura: Acceso a la red
Cada jaula tiene
asignada una IP.
Son IP virtuales de la
interfaz de red del
Servidor.
También se pueden
asociar a interfaces
reales.
Servidor
FreeBSD
Jail 1
Jail N
Red LAN
15
Estructura: Sistema de archivos
Las jaulas son copias en
miniatura del sistema
base.
El procedimiento de
creación es similar a
actualizar el sistema
operativo.
Parecido a realizar un
“chroot” a cada jaula.
bin/
etc/
dev/
usr/
bin/
jails/
jail1/
jailN/
16
bin/
etc/
dev/
usr/
bin/
10.0.2.20/24
bin/
etc/
dev/
usr/
bin/
10.0.2.21/24
10.0.2.10/24
R
e
d
L
A
N
Limitaciones
jail 1
Procesos
jail
make buildkernel
jail
# mount ...
jail 2
Procesos
jail
# ifconfig em0 ...
# route add -net ...
jail
# tcpdump ...
jail
# hostname ...
17
¿y cómo se usan?
Por omisión, están los siguientes comandos:
jail
jls
jexec
“enjaula” un proceso y todos sus hijos.
# jail <ruta_jail> <nombre> <ip> <cmds>
18
¿y cómo se usan?
Por omisión, están los siguientes comandos:
jail
jls
jexec
Muestra un lista de las jaulas activas
19
¿y cómo se usan?
Por omisión, están los siguientes comandos:
jail
jls
jexec
determinada jaula
Permite ejecutar un comando dentro de una
#jexec [-u user |-U user] jid cmd
Servidor
FreeBSD
Jail 1
Jail N
Red LAN
20
Creación
Inicialización
Configuración
21
Método de creación
Manual de FreeBSD:
mkdir /usr/jails/jaula1
cd /usr/src
make buildworld
make installworld DESTDIR=/usr/jails/jaula1
make distribution DESTDIR=/usr/jails/jaula1
22
Método de creación
Manual de FreeBSD:
Directorio de la Jaula
mkdir /usr/jails/jaula1
cd /usr/src
make buildworld
make installworld DESTDIR=/usr/jails/jaula1
make distribution DESTDIR=/usr/jails/jaula1
23
Método de creación
Manual de FreeBSD:
Es necesario tener instalada las
fuentes del sistema (~500[MiB])
mkdir /usr/jails/jaula1
cd /usr/src
make buildworld
make installworld DESTDIR=/usr/jails/jaula1
make distribution DESTDIR=/usr/jails/jaula1
24
Método de creación
Manual de FreeBSD:
mkdir /usr/jails/jail1
cd /usr/src
make buildworld
make installworld DESTDIR=/usr/jails/jail1
make distribution DESTDIR=/usr/jails/jail1
Aprox. 2[horas]
Aprox. 5[min]
Aprox. 30[seg]
25
Método de creación
Jaula 1
bin/
bin/
/
etc/
etc/
Manual de FreeBSD:
dev/
dev/
usr/
bin/
jails/
proc/
jail1/
bin/
usr/
IP Alias
mkdir /usr/jails/jail1
cd /usr/src
make buildworld
make installworld DESTDIR=/usr/jails/jail1
make distribution DESTDIR=/usr/jails/jail1
26
Iniciar una jaula:
pasos previos
Antes de iniciar una
jaula, es necesario:
1) configurar una IP adicional
ifconfig em0 alias 192.168.56.20/24
2) Verificar que los servicios del
host escuchen en la IP principal.
27
Iniciar una jaula:
pasos previos
Antes de iniciar una jaula, es
necesario:
/
Jaula 1
bin/
etc/
bin/
etc/
dev/
usr/
bin/
jails/
jail1/
3) montar el FS dev y proc en el
directorio respectivo dentro de
la jaula
mount -t devfs devfs /usr/jails/jail1/dev
dev/
proc/
usr/
bin/
mount -t procfs procfs /usr/jails/jail1/proc
IP Alias
28
Iniciar una jaula
Iniciar por primera vez la jaula, según la sintaxis:
jail <ruta_jaula> <nombre_jaula> <ip_alias> <cmd>
jail /usr/jails/jail1 jaula_1 192.168.56.20 /bin/csh
/
Jaula 1
bin/
etc/
dev/
usr/
bin/
IP Alias
bin/
etc/
dev/
usr/
bin/
jails/
jail1/
29
Iniciar una jaula
Una vez iniciada, “jugar” un rato.
Después, hacer algo más o menos importante, como cambiar
la contraseña de root y crear una cuenta de administración.
Finalizar la jaula (logout, CTRL+D, etc)
30
Funcionará????
31
Antes de seguir
¿Qué es lo que se ha hecho?
Crear el sistema de arhivos
para la jaula, el cual va estar
“bajo chroot”.
Crear una conexión desde la
jaula hacia la red.
Modificar y crear las cuentas
de administración del nuevo
sistema.
32
Antes de seguir
¿Qué es lo que se ha hecho?
El devfs debe tener ciertas
restricciones para las jaulas.
Si son muchas jaulas, el método
de inicio mostrado no escala.
Lo relativo al devfs y al inicio de
la jaula (vía jail(8)) se puede
delegar al SO vía script de
inicio.
33
Antes de seguir
¿Qué falta?
Tener un sistema independiente
Que se inicie en tiempo de
boot, con las herramientas del
SO.
Que tenga los servicios básicos
de conectividad.
Aplicar reglas de seguridad al
devfs.
34
Pasos finales:
Modificación de /etc/rc.conf
Permitir inicio de las jaulas en el boot del sistema:
jail_enable="YES"
jail_list="jaula1”
jail_devfs_ruleset=”reglas_jaulas”
ifconfig_em0_alias0="inet 192.168.56.20 netmask 255.255.255.0"
jail_jaula1_rootdir="/user/jails/jaula1"
jail_jaula1_hostname="proteus"
jail_jaula1_ip="192.168.56.20"
jail_jaula1_devfs_enable="YES"
jail_jaula1_procfs_enable="YES"
Jaula 1
bin/
bin/
etc/
/
etc/
dev/
usr/
bin/
jails/
jail1/
dev/
usr/
bin/
IP Alias
35
Pasos finales:
Modificación de /etc/rc.conf
Permitir inicio de las jaulas en el boot del sistema:
jail_enable="YES"
jail_list="jaula1”
jail_devfs_ruleset=”reglas_jaulas”
Identificadores de
las Jaulas que se
inician en el boot.
ifconfig_em0_alias0="inet 192.168.56.20 netmask 255.255.255.0"
jail_jaula1_rootdir="/user/jails/jaula1"
jail_jaula1_hostname="proteus"
jail_jaula1_ip="10.0.2.20"
jail_jaula1_devfs_enable="YES"
jail_jaula1_procfs_enable="YES"
36
Pasos finales:
Modificación de /etc/rc.conf
Permitir inicio de las jaulas en el boot del sistema:
jail_enable="YES"
jail_list="jaula1”
jail_devfs_ruleset=”reglas_jaulas”
ifconfig_em0_alias0="inet 192.168.56.20 netmask 255.255.255.0"
jail_jaula1_rootdir="/user/jails/jaula1"
jail_jaula1_hostname="proteus"
jail_jaula1_ip="10.0.2.20"
jail_jaula1_devfs_enable="YES"
jail_jaula1_procfs_enable="YES"
Configuración de una
jaula
37
Pasos finales:
Modificación de /etc/rc.conf
Iniciar SSHD cuando la jaula se inicie:
sshd_enable="YES"
/
Jaula 1
bin/
etc/
dev/
usr/
bin/
IP Alias
bin/
etc/
dev/
usr/
bin/
jails/
jail1/
38
Por último, iniciar la jaula
Finalmente, iniciar la(s)
jaula(s) vía script de inicio
/etc/rc.d/jail start|stop [id1 id2 ...]
Comprobar que efectivamente la jaula esté “arriba”:
39
Funcionará????
40
Tareas posteriores
Hacer más jaulas...
Opción 1
make installworld DESTDIR=/usr/jails/otra_jaula
make distribution DESTDIR=/usr/jails/otra_jaula
Jaula totalmente nueva, tiempo aprox ~5[min]
Opción 2:
“Clonar” otra existente. tiempo aprox: “DEPENDE”
mkdir /jaula/destino
cd /jaula/origen && tar -cpf - . |tar -C /jaula/destino -xpf -
41
Tareas posteriores
Demostración práctica “clonación”
Copiar la estructura de una jaula.
Crear otro IP “alias”.
Modificar archivo /etc/rc.conf en el host principal.
Iniciar la nueva jaula.
42
Conclusiones
Jails es otra opción de virtualización.
Beneficios:
No requiere instalar softwares adicionales
Si sabe como administrar FreeBSD, sabe administrar jaulas.
Es simple y rápido. Facilita la delegación de administración.
Contras:
todo lo demás :)
43
Dónde buscar
http://www.freebsd.org
Ejemplos de uso:
ACM SIGCOMM Computer Communications Review,
Volume 33, Nº 3, Julio 2003
Departamento de Computación, UV. Contacto: Marco
Aravena (
[email protected])
Departamento de Electrónica, USM. Contacto: Yo
(
[email protected])
44
Gracias por su atención.
45
Comentarios de: Jails: virtualización light (0)
No hay comentarios