4 tecnologías centrales de Linux para contenedores

En artículos anteriores he escrito sobre contenedores e imágenes en tiempo de ejecución. En este artículo, veré cómo los contenedores son posibles gracias a la base de algunas tecnologías especiales de Linux, incluidos los espacios de nombres y los grupos de control.

Las tecnologías de Linux forman la base para crear y ejecutar un proceso de contenedor en el sistema. Las tecnologías incluyen:

  1. Espacios de nombres
  2. Grupos de control (cgroups)
  3. sec
  4. SELinux
Índice

Espacios de nombres

Espacios de nombres proporcione una capa de aislamiento para los contenedores dándole al contenedor una vista de lo que parece ser su sistema de archivos Linux. Esto limita lo que un proceso puede ver y, por lo tanto, limita los recursos a su disposición.

Hay varios espacios de nombres en el kernel de Linux que utilizan Docker o Podman y otros al crear un contenedor:

$ docker container run alpine ping 8.8.8.8
$ sudo lsns -p 29413
        NS TYPE   NPROCS PID USER COMMAND
4026531835 cgroup   299   1  root /usr/lib/systemd/systemd --
switched...
4026533105 mnt 1 29413 root ping 8.8.8.8
4026533106 uts 1 29413 root ping 8.8.8.8
4026533105 ipc 1 29413 root ping 8.8.8.8
[...]

Usuario

El espacio de nombres de usuario aísla usuarios y grupos dentro de un contenedor. Esto se hace al permitir que los contenedores tengan una visualización diferente de los rangos de UID y GID que el sistema host. El espacio de nombres de usuario permite que el software se ejecute dentro del contenedor como usuario raíz. Si un intruso ataca el contenedor y luego escapa a el ordenador host, está limitado a una identidad no raíz solamente.

Monte

El espacio de nombres mnt permite que los contenedores tengan su propia vista de la jerarquía del sistema de archivos del sistema. Puede encontrar puntos de montaje para cada proceso de contenedor en /proceso// montar ubicación en su sistema Linux.

UTS

El espacio de nombres Unix Timesharing System (UTS) permite que los contenedores tengan un nombre de host y un nombre de dominio únicos. Cuando se ejecuta un contenedor, se usa una ID aleatoria como nombre de host incluso cuando se usa el archivo — name etiqueta. Puedes usar el unshare comando para tener una idea de cómo funciona.

$ docker container run -it --name nived alpine sh
/ # hostname
9c9a5edabdd6
/ #
$ sudo unshare -u sh
# hostname isolated.hostname
# hostname
# exit
$ hostname
homelab.redhat.com

CIP

El espacio de nombres de comunicación entre procesos (IPC) permite que varios procesos de contenedor se comuniquen accediendo a un rango de memoria compartida o utilizando una cola de mensajes compartida.

# ipcmk -M 10M
Shared memory id: 0
# ipcmk -M 20M
Shared memory id: 1
# ipcs
---- Message Queues ----
key  msqid  owner  perms  used-bytes  messages

---- Shared Memory Segments
key        shmid owner perms bytes    nattch status
0xd1df416a 0     root  644   10485760 0
0xbd487a9d 1     root  644   20971520 0
[...]

PID

El espacio de nombres de ID de proceso (PID) garantiza que los procesos que se ejecutan dentro de un contenedor estén aislados del mundo exterior. cuando corres a ps comando dentro de un contenedor, solo verá los procesos que se ejecutan dentro del contenedor y no en la máquina host debido a este espacio de nombres.

Red

El espacio de nombres de red permite que el contenedor tenga su propia vista de la interfaz de red, las direcciones IP, las tablas de enrutamiento, los números de puerto, etc. ¿Cómo funciona un contenedor que puede comunicarse con el mundo exterior? Todos los contenedores que crea están conectados a una interfaz de red virtual especial para la comunicación.

Grupos de control (cgroups)

Los Cgroups son bloques de construcción fundamentales para crear un contenedor. Un cgroup asigna y limita recursos como CPU, memoria, E/S de red utilizados por contenedores. El motor del contenedor crea automáticamente un sistema de archivos cgroup de cada tipo y establece valores para cada contenedor cuando se ejecuta el contenedor.

SECCOMP

Seccomp básicamente significa informática segura. Es una función de Linux utilizada para limitar el conjunto de llamadas al sistema que puede realizar una aplicación. El perfil seccomp predeterminado para Docker, por ejemplo, deshabilita aproximadamente 44 llamadas al sistema (hay más de 300 disponibles).

La idea aquí es dar a los contenedores acceso solo a los recursos que el contenedor pueda necesitar. Por ejemplo, si no necesita el contenedor para cambiar la hora en su ordenador host, probablemente no tenga ningún uso para clock_adjtime Y establecer_reloj syscalls y tiene sentido bloquearlas. Del mismo modo, no desea que los contenedores cambien los módulos del kernel, por lo que no necesitan crear_módulo, eliminar_módulo llamada al sistema.

SELinux

SELinux significa Linux con seguridad avanzada. Si está ejecutando una distribución de Red Hat en sus hosts, SELinux está habilitado de manera predeterminada. SELinux le permite restringir una aplicación para que solo tenga acceso a sus propios archivos y evitar que cualquier otro proceso acceda a ellos. Por lo tanto, si una aplicación se ve comprometida, limitaría la cantidad de archivos que puede afectar o controlar. Lo hace estableciendo contextos para archivos y procesos y definiendo políticas que dictarían lo que un proceso puede ver y hacer cambios.

Las políticas de SELinux para contenedores están definidas por container-selinux paquete. De forma predeterminada, los contenedores se ejecutan con container_t etiqueta y se les permite leer (r) y ejecutar (x) bajo el / usuario directorio y leer la mayor parte del contenido de /etc directorio. La etiqueta contenedor_var_lib_t es común para archivos relacionados con contenedores.

Envoltura

Los contenedores son una parte fundamental de la infraestructura de TI actual y también una tecnología bastante interesante. Si bien su función no implica directamente la creación de contenedores, comprender algunos conceptos y enfoques fundamentales sobre los contenedores le permite apreciar cómo pueden ayudar a su organización. ¡El hecho de que los contenedores estén construidos sobre tecnologías Linux de código abierto los hace aún mejores!


Este artículo está basado en un tecnológicamente artículo y ha sido adaptado con permiso.

Artículos de interés

Subir