GNU/Linux >> Tutoriales Linux >  >> Linux

4 tecnologías Linux fundamentales para los contenedores

En artículos anteriores, he escrito sobre imágenes de contenedores y tiempos de ejecución. En este artículo, analizo 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.

Contenedores Linux

  • ¿Qué son los contenedores de Linux?
  • Una introducción a la terminología de contenedores
  • Descargar:Introducción a los contenedores
  • Operadores de Kubernetes:automatización de la plataforma de orquestación de contenedores
  • eBook:Patrones de Kubernetes para diseñar aplicaciones nativas de la nube
  • ¿Qué es Kubernetes?

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

  1. Espacios de nombres
  2. Grupos de control (cgroups)
  3. Seccomp
  4. SELinux

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 propio sistema de archivos de Linux. Esto limita lo que puede ver un proceso y, por lo tanto, restringe los recursos disponibles.

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 vista diferente de los rangos de UID y GID en comparación con 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 la máquina host, se limita a una identidad no raíz.

Menta

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 los puntos de montaje para cada proceso de contenedor en /proc//mounts 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 ejecuta un contenedor, se usa una ID aleatoria como nombre de host incluso cuando se usa el — name etiqueta. Puedes usar el unshare comando para tener una idea de cómo funciona esto.

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

IPC

El espacio de nombres de comunicación entre procesos (IPC) permite que diferentes procesos de contenedor se comuniquen accediendo a un rango compartido de memoria o usando 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 ejecutas un 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 logra un contenedor comunicarse con el mundo exterior? Todos los contenedores que crea se conectan a una interfaz de red virtual especial para la comunicación.

Grupos de control (cgroups)

Los Cgroups son bloques fundamentales para hacer un contenedor. Un cgroup asigna y limita recursos como CPU, memoria, E/S de red que utilizan los contenedores. El motor de contenedores 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 computación segura . Es una característica de Linux utilizada para restringir el conjunto de llamadas al sistema que una aplicación puede realizar. El perfil seccomp predeterminado para Docker, por ejemplo, deshabilita alrededor de 44 llamadas al sistema (hay más de 300 disponibles).

La idea aquí es proporcionar a los contenedores acceso solo a aquellos recursos que el contenedor pueda necesitar. Por ejemplo, si no necesita el contenedor para cambiar la hora del reloj en su máquina host, probablemente no tenga uso para el clock_adjtime y clock_settime syscalls, y tiene sentido bloquearlas. Del mismo modo, no desea que los contenedores cambien los módulos del kernel, por lo que no es necesario que hagan create_module, delete_module llamadas al sistema.

SELinux

SELinux significa Linux con seguridad mejorada . Si está ejecutando una distribución de Red Hat en sus hosts, entonces SELinux está habilitado de forma predeterminada. SELinux le permite limitar una aplicación para que tenga acceso solo a sus propios archivos y evitar que otros procesos accedan a ellos. Entonces, si una aplicación se ve comprometida, limitaría la cantidad de archivos que puede afectar o controlar. Lo hace configurando contextos para archivos y procesos y definiendo políticas que harían cumplir 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 /usr directorio y leer la mayor parte del contenido de /etc directorio. La etiqueta container_var_lib_t es común para archivos relacionados con contenedores.

Resumir

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


Este artículo se basa en un artículo techbeatly y se ha adaptado con permiso.


Linux
  1. Cree su propio contenedor en Linux

  2. ¿Siguen siendo importantes las distribuciones de Linux con los contenedores?

  3. Simplemente diga no a la raíz (en contenedores)

  4. Cómo administrar los registros de contenedores de Linux

  5. ¿Qué hace que un servidor Kernel Linux sea fundamental?

Introducción a la gestión de contenedores de Linux

¿Qué es Docker (y los contenedores de Linux?)

Cómo gestionar contenedores Docker

Cómo crear y lanzar contenedores LXC Linux con comandos LXC

¿Se pueden alojar los contenedores de Windows en Linux?

Entorno Linux ligero y aislado