Flashcards: 352.1 - Conceptos De Contenedores
39 tarjetas de repaso. Usa el sistema de repeticion espaciada para memorizar.
P: ¿Qué namespace de Linux aísla los árboles de procesos, permitiendo que un contenedor tenga su propio PID 1?
R: c) pid. El namespace PID aísla el árbol de procesos. Dentro del contenedor, el proceso principal tiene PID 1, aunque en el host tiene un PID diferente. Esto permite que cada contenedor tenga su propia vista independiente de los procesos.
P: ¿Cuál es la diferencia fundamental entre contenedores y máquinas virtuales?
R: b) Los contenedores comparten el kernel del host, las VMs tienen kernel propio. Los contenedores comparten el kernel del sistema operativo host y usan namespaces y cgroups para el aislamiento. Las VMs tienen su propio kernel y SO completo ejecutándose sobre un hipervisor. Esto hace a los contenedores más ligeros pero potencialmente menos aislados.
P: ¿Qué mecanismo del kernel Linux limita el uso de CPU, memoria y E/S por grupos de procesos?
R: b) Cgroups. Los Control Groups (cgroups) limitan, contabilizan y aíslan el uso de recursos del sistema (CPU, memoria, E/S de disco, PIDs) por grupos de procesos. Los namespaces proporcionan aislamiento de visibilidad, no de recursos.
P: ¿Cuál es la principal diferencia entre cgroups v1 y cgroups v2?
R: c) v2 usa una jerarquía única unificada, v1 usa múltiples jerarquías independientes. En cgroups v1, cada controlador (cpu, memory, blkio, etc.) tiene su propia jerarquía independiente. En v2, hay una única jerarquía unificada donde todos los controladores se gestionan de forma coherente.
P: ¿Qué sistema de archivos por capas es el storage driver predeterminado en Docker moderno?
R: c) OverlayFS (overlay2). OverlayFS (driver overlay2) es el storage driver predeterminado en Docker moderno. Combina capas lower (solo lectura) con una capa upper (lectura-escritura) en una vista merged. AUFS fue usado anteriormente pero no está en el kernel mainline.
P: ¿Qué especificación OCI define el formato de las imágenes de contenedor?
R: b) Image Specification. La OCI Image Specification define el formato estándar de las imágenes de contenedor: manifest (referencia a configuración y capas), configuration (metadatos) y layers (capas del filesystem como tarballs). La Runtime Spec define cómo ejecutar contenedores.
P: ¿Qué mecanismo de seguridad filtra las llamadas al sistema (syscalls) que un contenedor puede realizar?
R: c) Seccomp. Seccomp (Secure Computing Mode) filtra las syscalls que un proceso puede realizar. Docker aplica un perfil seccomp por defecto que bloquea syscalls peligrosas. Las capabilities dividen los privilegios de root en unidades, pero no filtran syscalls específicas.
P: ¿Qué namespace es fundamental para ejecutar contenedores rootless?
R: c) user. El namespace user permite mapear UID 0 (root) dentro del contenedor a un UID sin privilegios en el host. Esto es la base de los contenedores rootless: el proceso parece ser root dentro del contenedor pero no tiene privilegios reales en el host.
P: ¿Cuál es la función de runc en la arquitectura de contenedores?
R: b) Es un runtime OCI de bajo nivel que crea y ejecuta contenedores. runc es la implementación de referencia del runtime OCI. Se encarga de crear los namespaces, configurar cgroups y ejecutar el proceso del contenedor. Herramientas de alto nivel como Docker y containerd usan runc internamente.
P: ¿Qué archivos del sistema deben estar configurados para que funcionen los contenedores rootless con user namespaces?
R: b) /etc/subuid y /etc/subgid. /etc/subuid y /etc/subgid definen los rangos de UIDs y GIDs subordinados que cada usuario puede usar en user namespaces. Ejemplo: usuario:100000:65536 asigna 65536 UIDs empezando en 100000 al usuario indicado.
P: ¿Qué namespace de Linux aísla el hostname y el domainname del sistema?
R: c) uts. El namespace UTS (Unix Time Sharing) aísla los identificadores de hostname y domainname del sistema. Esto permite que cada contenedor tenga su propio hostname independiente sin afectar al host ni a otros contenedores. Se crea con el flag CLONE_NEWUTS.
P: ¿Qué runtime OCI de bajo nivel, escrito en C, es una alternativa más ligera y rápida que runc?
R: c) crun. crun es un runtime OCI de bajo nivel escrito en C que ofrece menor consumo de memoria y tiempos de arranque más rápidos que runc (escrito en Go). Es compatible con la especificación OCI y puede sustituir a runc en Docker, Podman y Kubernetes.
P: ¿Qué capa de OverlayFS almacena los cambios realizados por el contenedor en ejecución?
R: c) Upper Layer. OverlayFS utiliza capas lower (solo lectura, provenientes de la imagen) y una capa upper (lectura-escritura) donde se almacenan todos los cambios realizados por el contenedor. La vista merged combina ambas capas en una visión unificada que es lo que ve el contenedor.
P: En cgroups v2, ¿qué archivo se utiliza para establecer el límite máximo de memoria de un grupo de procesos?
R: b) memory.max. En cgroups v2, memory.max define el límite estricto de memoria para un cgroup. Si los procesos exceden este límite, el OOM killer entrará en acción. memory.limit_in_bytes es el equivalente en cgroups v1. memory.high en v2 es un límite suave que activa la presión de memoria.
P: ¿Qué capability de Linux permite a un proceso vincular puertos privilegiados (menores a 1024)?
R: c) CAP_NET_BIND_SERVICE. CAP_NET_BIND_SERVICE permite vincular sockets a puertos privilegiados (por debajo de 1024) sin necesidad de privilegios de root completos. Es una capability comúnmente asignada a contenedores que ejecutan servidores web en los puertos 80 o 443.
P: ¿Qué acción por defecto define un perfil seccomp cuando una syscall no está explícitamente permitida?
R: b) SCMP_ACT_ERRNO. En los perfiles seccomp, defaultAction define qué ocurre con syscalls no listadas. SCMP_ACT_ERRNO devuelve un error al proceso que intenta la syscall. SCMP_ACT_KILL terminaría el proceso. El perfil por defecto de Docker usa SCMP_ACT_ERRNO como acción predeterminada.
P: ¿Qué herramienta permite copiar imágenes de contenedores entre registros sin necesidad de un daemon Docker?
R: c) skopeo. skopeo es una herramienta de línea de comandos para trabajar con imágenes de contenedores remotas. Permite copiar imágenes entre registros (skopeo copy), inspeccionar imágenes remotas (skopeo inspect) y firmar imágenes, todo sin necesidad de un daemon Docker local.
P: ¿Qué componente de la especificación OCI Runtime define la configuración de un contenedor, incluyendo namespaces, mounts y el proceso a ejecutar?
R: c) config.json. En la OCI Runtime Specification, un “bundle” de contenedor se compone de un directorio rootfs/ (sistema de archivos raíz) y un archivo config.json que describe la configuración completa del contenedor: namespaces, cgroups, mounts, proceso a ejecutar, variables de entorno y restricciones de seguridad.
P: ¿Qué controlador de cgroups permite asignar procesos a CPUs y nodos NUMA específicos?
R: c) cpuset. El controlador cpuset permite asignar un grupo de procesos a un conjunto específico de CPUs y nodos NUMA. Esto es útil para aislar cargas de trabajo que requieren rendimiento predecible o para garantizar la afinidad de CPU en entornos de contenedores.
P: ¿Cuál es el runtime de alto nivel que utiliza Docker internamente para gestionar el ciclo de vida de los contenedores?
R: b) containerd. containerd es el runtime de alto nivel que Docker utiliza internamente. Se encarga de gestionar las imágenes, la ejecución de contenedores, el almacenamiento y la red. A su vez, containerd delega la creación del contenedor al runtime de bajo nivel (runc por defecto). containerd también es utilizado directamente por Kubernetes.
P: Escribe el comando para listar todos los namespaces del sistema Linux.
R: lsns. lsns lista todos los namespaces existentes en el sistema, mostrando el tipo de namespace, el número de procesos, el PID propietario, el usuario y el comando. Se puede filtrar por tipo con -t (por ejemplo, lsns -t net) o por PID con -p.
P: Escribe el comando para entrar en los namespaces de red, PID y montaje de un proceso con PID 1234.
R: nsenter -t 1234 -n -p -m. nsenter permite entrar en los namespaces de un proceso existente. -t especifica el PID del proceso objetivo, -n entra en el namespace de red, -p en el de PID y -m en el de montaje. Es fundamental para depurar contenedores desde el host.
P: Escribe el comando para crear un nuevo namespace de red aislado ejecutando una shell bash.
R: unshare —net bash. unshare crea nuevos namespaces y ejecuta un programa dentro de ellos. --net (o -n) crea un nuevo namespace de red, aislando completamente las interfaces de red, rutas y reglas de firewall. El proceso hijo solo verá la interfaz loopback.
P: Escribe el comando para ver los controladores de cgroups v2 disponibles en el sistema.
R: cat /sys/fs/cgroup/cgroup.controllers. El archivo /sys/fs/cgroup/cgroup.controllers en cgroups v2 lista los controladores disponibles en el sistema (cpu, memory, io, pids, cpuset, etc.). Para habilitar controladores en un subcgroup, se escriben en cgroup.subtree_control.
P: Escribe el comando para ejecutar un contenedor Docker eliminando todas las capabilities y añadiendo solo NET_BIND_SERVICE.
R: docker run —cap-drop=ALL —cap-add=NET_BIND_SERVICE nginx. --cap-drop=ALL elimina todas las capabilities del contenedor, y --cap-add=NET_BIND_SERVICE añade solo la capability necesaria para vincular puertos privilegiados. Esta práctica de mínimo privilegio es esencial para la seguridad de contenedores en producción.
P: Tip de examen: Los contenedores comparten el kernel del host. Esto los hace más ligeros pero po…
R: Los contenedores comparten el kernel del host. Esto los hace más ligeros pero potencialmente menos seguros que las VMs. Un exploit en el kernel afecta a todos los contenedores.
P: Tip de examen: El namespace user es fundamental para contenedores rootless. Permite mapear el…
R: El namespace user es fundamental para contenedores rootless. Permite mapear el UID 0 dentro del contenedor a un UID sin privilegios en el host.
P: Tip de examen: OverlayFS es el storage driver predeterminado en Docker moderno. AUFS fue usado …
R: OverlayFS es el storage driver predeterminado en Docker moderno. AUFS fue usado en versiones antiguas pero no está en el kernel mainline.
P: Tip de examen: OCI asegura la interoperabilidad entre diferentes herramientas de contenedores. …
R: OCI asegura la interoperabilidad entre diferentes herramientas de contenedores. Una imagen construida con Docker puede ejecutarse con Podman, y viceversa.
P: Tip de examen: Por defecto, los contenedores Docker se ejecutan con un subconjunto limitado de …
R: Por defecto, los contenedores Docker se ejecutan con un subconjunto limitado de capabilities. Nunca deben ejecutarse con --privileged en producción.
P: Que hace el comando CLONE_NEWPID?
R: Árbol de procesos (PID 1 propio)
P: Que es/son Introducción?
R: Los contenedores son una forma de virtualización a nivel de sistema operativo que permite ejecutar múltiples instancias aisladas sobre un mismo kernel. A diferencia de las máquinas virtuales, no requie
P: Que es/son Namespaces del Kernel Linux?
R: Los namespaces proporcionan aislamiento de recursos del sistema. Cada contenedor tiene su propio conjunto de namespaces:
P: Que es/son Cgroups (Control Groups)?
R: Los cgroups limitan, contabilizan y aíslan el uso de recursos del sistema por grupos de procesos.
P: Que es/son Especificación OCI?
R: La Open Container Initiative define tres especificaciones estándar:
P: Que es/son Seccomp (Secure Computing Mode)?
R: Filtra las llamadas al sistema (syscalls) que un proceso puede realizar:
P: Que es/son Linux Capabilities?
R: Las capabilities dividen los privilegios de root en unidades individuales:
P: Que es/son Contenedores Rootless?
R: Ejecutan el container engine y los contenedores sin privilegios de root en el host:
P: Que es/son Trampas del examen?
R: > Errores comunes y distinciones criticas que LPI suele evaluar en este subtema: