Quiero proporcionar algunos ejemplos para aclarar las definiciones técnicas sobre espacios de nombres . Wikipedia tiene la siguiente definición:
Los espacios de nombres son una característica del kernel de Linux que divide los recursos del kernel de manera que un conjunto de procesos ve un conjunto de recursos y otro conjunto de procesos ve un conjunto diferente de recursos. La característica funciona al tener el mismo espacio de nombres para un grupo de recursos y procesos, pero esos espacios de nombres se refieren a recursos distintos.
Esta definición es bastante difícil de digerir para algunas personas, por lo que tal vez esta analogía ayude. Considere mi edificio de apartamentos. Técnicamente son dos edificios distintos con sus propias entradas. Sin embargo, el estacionamiento, el gimnasio, la piscina y las salas comunes son compartidos. Los edificios tienen sus propios nombres, City Place y City Place 2 . Tienen sus propias direcciones, pisos y ascensores. Sin embargo, están unidos al mismo complejo físico.
El complejo físico es la misma idea que una computadora. Dos espacios de nombres (o más) pueden residir en la misma computadora física y, al igual que el edificio de apartamentos, los espacios de nombres pueden compartir el acceso a ciertos recursos o tener acceso exclusivo.
Hay siete tipos comunes de espacios de nombres que se usan ampliamente en la actualidad. Usando el apartamento como nuestra guía, veamos un resumen de lo que hace cada tipo. A continuación se muestra una breve descripción general de cada tipo de espacio de nombres. En artículos posteriores, mostraremos cómo funciona cada espacio de nombres con un ejemplo.
Aislamiento de procesos (espacio de nombres PID)
Un PID o ID de proceso ayuda a un sistema a rastrear una tarea específica en una computadora. Cuando inicie Firefox en su computadora, tendrá un PID asociado. Para asegurarse de que la computadora interactúe con una tarea correctamente, el PID hace referencia a la tarea. Supongamos que tiene Firefox y Brave Browser abiertos al mismo tiempo. Enciende su motor de búsqueda preferido, como DuckDuckGo, en cada navegador y busca imágenes de gatos en uno y fotos de perros en el otro. Ambos navegadores están haciendo una solicitud similar al mismo sitio web. ¿Cómo se asegura la computadora de que los resultados de búsqueda correctos se devuelvan al navegador correcto? Una de las formas principales es rastrear las solicitudes que hace cada PID y luego devolver los resultados al proceso de solicitud.
"Genial, estoy perdido", dices. ¿Qué tiene esto que ver con los edificios de apartamentos y los espacios de nombres? Bueno, digamos que desea ejecutar copias idénticas de una pieza de software. Algunos programas no se escribieron para tener más de una copia abierta a la vez. Para lograr esto, es posible que deba aislar el PID para que no esté al tanto de lo que sucede fuera de sus propios procesos. Esto es lo que el aislamiento de procesos puede ayudar a resolver.
Para decirlo de otra manera, volviendo a nuestro edificio de apartamentos, los apartamentos individuales en el complejo son similares al espacio de nombres PID. Cada hogar en el complejo de apartamentos quiere encender sus televisores y ver una variedad de contenido. En un tonto universo paralelo, imagine que cuando una sola persona en el edificio de apartamentos enciende su televisor, nadie más puede ver la televisión porque, de lo contrario, el proveedor de cable no sabría qué televisor debería estar viendo "The Office" y cuál "The Aprendiz." Los espacios de nombres permitirían a la compañía de cable aislar cada hogar y proporcionar una programación distinta a cada residente porque ya no importa lo que vean otras personas en su complejo.
[ Obtenga más información sobre los espacios de nombres PID. ]
Interfaces de red (espacio de nombres de red)
Cada computadora que está conectada a una red (como Internet) requiere una dirección IP. Este es un número único que permite que las computadoras se comuniquen de manera efectiva. Cuando se accede a un tipo específico de recurso, digamos una página web, se utiliza un puerto particular para esa comunicación. Esto se debe a que una computadora podría albergar un servidor web, un servidor de juegos y quizás un servidor de correo electrónico en el mismo host. Los puertos pueden ser 80 o 443 para tráfico web, 8888 para tráfico de juegos y 25 para correo electrónico. Cuando escribo https://
En mi escenario de construcción, los edificios están unidos al mismo complejo físico y son imágenes especulares entre sí. Esto significa que hay la misma cantidad de espacios habitables en cada edificio. Además, siguen el mismo esquema de numeración de apartamentos. Esto significa que cada edificio tiene la Unidad 707, por ejemplo. En este ejemplo, la dirección IP es como la dirección de la calle de los edificios de apartamentos y el número de apartamento es el puerto. Cada complejo de apartamentos es parte del mismo edificio físico, pero tienen direcciones de calles diferentes. Dado que los edificios no están físicamente separados, sin este espacio de nombres de red una empresa que envía una factura a Steve Ovens, 123 Fake Street Unit 707 Es posible que nunca reciba una respuesta porque fue a la dirección incorrecta. Lo más probable es que la oficina de correos simplemente no intentara entregar la carta debido a la ambigüedad de la dirección. Sin embargo, los espacios de nombres de red nos permiten tener 123 Fake Street y Calle Falsa 125 en el mismo edificio físico.
[ Obtenga más información sobre los espacios de nombres de red. ]
Sistema de tiempo compartido Unix (espacio de nombres uts)
Desafortunadamente, este espacio de nombres se denomina según los estándares actuales. Se remonta a los primeros días de Unix y tiene que ver con cómo se almacenó la información para una llamada específica del sistema. Hoy en día, este detalle se ha perdido en gran medida en la historia y lo que realmente necesita saber es que el espacio de nombres UTS permite la segregación de nombres de host. A menudo, los nombres de host son simplemente una conveniencia. Como se mencionó anteriormente, con algunas excepciones, la mayor parte de la comunicación hacia y desde un host se realiza a través de la dirección IP y el número de puerto. Sin embargo, nos hace la vida mucho más fácil a los humanos cuando tenemos algún tipo de nombre adjunto a un proceso. La búsqueda a través de archivos de registro, por ejemplo, es mucho más fácil cuando se identifica un nombre de host. No menos importante porque, en un entorno dinámico, las direcciones IP pueden cambiar.
En nuestra analogía del edificio, el nombre de host es similar al nombre del edificio de apartamentos. Decirle al taxista que vivo en City Place apartamentos suele ser más eficaz que proporcionar la dirección real. Tener varios nombres de host en un solo host físico es de gran ayuda en entornos de contenedores grandes.
[ Obtenga más información sobre los espacios de nombres uts. ]
Espacio de nombres de usuario
Cada sistema informático tiene alguna forma de rastrear qué usuario posee qué archivo(s). Esto permite que el sistema restrinja el acceso a archivos confidenciales del sistema. También evita que las personas que usan la misma computadora accedan a los archivos de los demás. Para el usuario final, se muestra que los archivos pertenecen a un nombre de inicio de sesión como stratus . Para la computadora, sin embargo, esto es solo una combinación arbitraria de caracteres alfanuméricos. Para rastrear estos permisos correctamente, existe un proceso de mapeo del estrato del usuario a un número de identificación de usuario (UID) específico, como 1001. Este UID se aplica luego a los metadatos del archivo. Esto le permite cambiar su nombre de usuario a stratus1 sin que el sistema tenga que hacer una cantidad significativa de actualización de metadatos. El archivo de mapeo se actualiza para que el UID 1001 se asocie con stratus1 en lugar de estrato . La entrada se cambia en un único (o en un pequeño número) de lugares.
Piense en esto como algo similar a los buzones en el piso de mi edificio de apartamentos. Cada buzón tiene un nombre o varios nombres asociados. Cuando alguien quiere entregarme un correo, me lo pone en la casilla 707, por ejemplo. Si decido cambiar mi nombre o agregar el nombre de mi esposa al buzón, nada cambia. El correo sigue yendo a la misma ubicación, solo las personas autorizadas pueden ver estos archivos, y mi clave para abrir la casilla permanece sin cambios.
[ Obtenga más información sobre los espacios de nombres de usuario. ]
Montaje (espacio de nombres mnt)
El espacio de nombres de montaje se usa para aislar los puntos de montaje de modo que los procesos en diferentes espacios de nombres no puedan ver los archivos de los demás. Si está familiarizado con el comando chroot, funciona de manera similar.
En nuestra analogía, me voy a desviar un poco del apartamento. Supongamos que dos personas se casan. En este escenario, hay un montón de cosas que generalmente terminan siendo compartidas. Probablemente ponga su nombre en la lista de direcciones, puede tener ambos nombres en las facturas, tener ambos nombres en cualquier propiedad de automóvil y agregarlos a sus tarjetas de crédito, etc. En este sentido, está compartiendo el mismo punto de montaje con el otra persona. Sin embargo, su crédito puede estar separado, pueden pagar sus propios impuestos, etc. Su número de Seguro Social (número de Seguro Social para nuestros amigos en los EE. UU.) permanece distinto al tuyo y viceversa. Por lo tanto, si bien su pareja puede ver una visión similar de la situación financiera, no será exactamente igual. No tienen la capacidad real de ver ningún asunto financiero que sea legalmente de su exclusiva posesión.
Lo mismo es cierto para los puntos de montaje del sistema de archivos. De forma predeterminada, los diferentes espacios de nombres de montaje no pueden ver el contenido del otro. En lo que respecta al espacio de nombres, está en la raíz del sistema de archivos y no existe nada más. Sin embargo, puede montar partes de un sistema de archivos subyacente en el espacio de nombres de montaje, lo que le permite ver información adicional.
[ Obtenga más información sobre los espacios de nombres mnt. ]
Comunicación entre procesos (IPC)
Este espacio de nombres es muy técnico y complejo de entender y describir. Tanto es así que Marty Kalin tiene una serie de artículos en Opensource.com que detallan la comunicación entre procesos (IPC). Si está realmente interesado, lo referiré a la serie de Marty ya que no pude hacerle justicia a este tema. Los IPC manejan la comunicación entre procesos mediante el uso de áreas de memoria compartida, colas de mensajes y semáforos. Si todo eso te suena extraño, no te preocupes, no estás solo. La aplicación más común para este tipo de gestión es posiblemente el uso de bases de datos.
Si nos acercamos a un solo aspecto de IPC, la memoria compartida, podemos obtener una comprensión básica de la importancia. En programación, cada vez que la aplicación necesita realizar un seguimiento de alguna información temporalmente, solicita que el sistema operativo dedique una cierta cantidad de memoria de acceso aleatorio (RAM) a su proceso. Puede pensar en esto, similar a iniciar una conversación con alguien en un programa de chat. De forma predeterminada, solo hay dos destinatarios, usted y la persona del otro lado, o pensado de otra manera, el sistema operativo y la aplicación. Ambos participantes pueden ver el historial completo de la conversación, pero nadie más puede. Sin embargo, si se invita a alguien nuevo al chat, también puede leer y participar en la discusión. La memoria compartida puede actuar de manera similar, permitiendo que dos o más programas tengan acceso a la misma información. Un cambio de un programa será inmediatamente visible para el otro programa.
Cgrupos
Para una mirada en profundidad a cgroups, recomiendo leer mi serie en redhat.com. En esa serie de cuatro partes, detallo cómo funcionan los cgroups y cómo puedes ponerlos en práctica. En resumen, los cgroups son un mecanismo para controlar los recursos del sistema. Cuando un cgroup está activo, puede controlar la cantidad de CPU, RAM, bloque de E/S y algunas otras facetas que puede consumir un proceso. De forma predeterminada, los cgroups se crean en el sistema de archivos virtual /sys/fs/cgroup
. La creación de un espacio de nombres de cgroup diferente esencialmente mueve el directorio raíz del cgroup. Si el cgroup fuera, por ejemplo, /sys/fs/cgroup/mycgroup
, un nuevo cgroup de espacio de nombres podría usar esto como un directorio raíz. El host podría ver /sys/fs/cgroup/mycgroup/{group1,group2,group3}
pero crear un nuevo espacio de nombres cgroup significaría que el nuevo espacio de nombres solo vería {group1,group2,group3}
.
Quizás se pregunte por qué esto podría ser necesario. Parte de esto está relacionado con la seguridad. Si no se creó un nuevo espacio de nombres de cgroup, existe la posibilidad de que se filtre información. La página del manual lo dice mejor:
Evita fugas de información mediante las cuales las rutas del directorio de cgroup fuera de un contenedor serían visibles para los procesos en el contenedor. Tales fugas podrían, por ejemplo, revelar información sobre el marco del contenedor a las aplicaciones en contenedores.
En una jerarquía de cgroup tradicional, existe la posibilidad de que un cgroup anidado pueda acceder a su ancestro. Esto significa que un proceso en /sys/fs/cgroup/mycgroup/group1
tiene el potencial de leer y/o manipular cualquier cosa anidada bajo mycgroup
.
Finalmente, pensando específicamente en los contenedores, los espacios de nombres de cgroup permiten que los contenedores sean independientes de los cgroups ancestros. Esto es importante para algo como OpenShift, que puede migrar contenedores entre hosts. Sin el aislamiento proporcionado por los espacios de nombres, los nombres completos de las rutas de cgroup tendrían que replicarse en un nuevo host al migrar un contenedor. Dado que la ruta debe ser única, los espacios de nombres de cgroup ayudan a evitar conflictos en el nuevo sistema host.
En términos de la analogía del edificio, un cgroup es similar a los servicios públicos en cada unidad. Si bien cgroups puede limitar el uso de recursos, también puede actuar como contador. Entonces, si bien mi apartamento no me impide usar una cierta cantidad de energía o agua, definitivamente rastrea (y factura) mi uso. Ese uso es solo una pequeña parte del uso del edificio como un todo. No sé el uso total del edificio (el antepasado de mi apartamento), ni puedo saber cuánto está utilizando mi vecino. Están en un espacio de nombres de cgroup completamente diferente.
[ Obtenga este libro electrónico gratuito:Administrar sus clústeres de Kubernetes para principiantes. ]
Conclusión
Ahí tienes una breve descripción de cuáles son los siete espacios de nombres más utilizados. Con suerte, mi analogía fue útil y clara. En los siguientes artículos, exploro algunos de estos espacios de nombres y cómo se crean a mano. Esto le dará una mejor comprensión de la utilidad de los espacios de nombres. En el artículo final, lo relaciono todo, incluido el uso de cgroups para explicar cómo funcionan los contenedores "bajo el capó".