Principio del sistema operativo Linux: aislamiento de recursos del espacio de nombres

Tabla de contenido

Espacio de nombres de Linux

El espacio de nombres de Linux es una tecnología de aislamiento de recursos a nivel del sistema operativo. Puede dividir los recursos globales de Linux en recursos dentro del alcance del espacio de nombres, y los recursos entre diferentes espacios de nombres son transparentes entre sí, y los procesos en diferentes espacios de nombres no pueden percibir otros. Los procesos y recursos en el espacio de nombres.

El espacio de nombres de Linux implementa el aislamiento de 6 recursos, que básicamente cubre los elementos operativos de un sistema operativo pequeño, incluido el nombre de host, los permisos de usuario, el sistema de archivos, la red, el número de proceso y la comunicación entre procesos. El espacio de nombres de Linux es el soporte de implementación subyacente de la tecnología de virtualización del sistema operativo (por ejemplo, contenedor).

Inserte la descripción de la imagen aquí

Estos 6 aislamientos de recursos corresponden a 6 tipos de llamadas al sistema Transfiera estas llamadas al sistema a la función de clonación para crear un contenedor. Un proceso de contenedor también puede clonar un proceso de contenedor para completar el anidamiento de contenedores.

int clone(int (*child_func)(void *), void *child_stack, int flags, void *arg);

A través del archivo / proc / [pid] / ns, puede verificar en qué espacio de nombres se está ejecutando el proceso especificado:
Inserte la descripción de la imagen aquí

Como puede ver, cada espacio de nombres tiene un identificador único. Si dos procesos apuntan al mismo espacio de nombres, significa que están bajo el mismo espacio de nombres.

Tipos de espacio de nombres de Linux

  • El espacio de nombres UTS proporciona el aislamiento entre el nombre de host y el dominio, de modo que cada contenedor tiene un nombre de host y un nombre de dominio independientes, y se puede considerar como un nodo independiente en la red. El nombre del nombre de host en el contenedor no causará ningún daño al host. influencias.

  • El espacio de nombres PID completa el aislamiento del número de proceso, asegurando que el proceso de inicio del contenedor se inicie con el proceso número 1.

  • El espacio de nombres IPC se da cuenta del aislamiento de la comunicación entre procesos, incluidos varios mecanismos comunes de comunicación entre procesos, como: semáforo, cola de mensajes y memoria compartida. Sabemos que para completar la IPC, debe solicitar un identificador único global, es decir, el identificador de IPC, por lo que el aislamiento de recursos de IPC completa principalmente el aislamiento de los identificadores de IPC.

  • El espacio de nombres de montaje aísla el sistema de archivos al aislar el punto de montaje del sistema de archivos. Se garantiza que la vista del sistema de archivos que ve el contenedor es un sistema de archivos proporcionado por la imagen del contenedor, lo que significa que no puede ver otros archivos en la máquina host. Excepto por el modo de pasar el parámetro -v vinculado, se puede colocar en la máquina host. Algunos directorios y archivos lo hacen visible en el contenedor;

  • El espacio de nombres de red se da cuenta del aislamiento de los recursos de red a nivel del sistema operativo, incluidas las interfaces de dispositivos de red, pilas de protocolos IPv4 e IPv6, tablas de enrutamiento IP, firewalls, directorio / proc / net, directorio / sys / class / net, sockets y otros recursos. El mismo dispositivo de red solo se puede ubicar en un espacio de nombres de red, y los dispositivos de red en diferentes espacios de nombres se pueden puentear usando un par de pares.

  • El espacio de nombres de usuario aísla principalmente los identificadores y atributos relacionados con la seguridad, incluida la ID de usuario, la ID de grupo de usuarios, el directorio raíz, la clave y los permisos especiales.

De hecho, hay un séptimo espacio de nombres cgroup. Los primeros seis tipos se utilizan en Docker. El séptimo tipo de espacio de nombres cgroup no se utiliza en Docker, pero el espacio de nombres cgroup se implementa en la implementación de runC. Una ventaja de usar el espacio de nombres cgroup es que la vista cgroup que se ve en el contenedor se presenta en forma de raíz. De esta manera, es lo mismo que una vista del espacio de nombres cgroup que ve el proceso en el host. Otra ventaja es Es más seguro usar cgroups dentro del contenedor.

Supongo que te gusta

Origin blog.csdn.net/Jmilk/article/details/108897853
Recomendado
Clasificación