Security Context
En Kubernetes, un securityContext define los privilegios y las configuraciones de control de acceso para un Pod o un Contenedor individual. Básicamente, le dice a Kubernetes quién ejecuta el proceso dentro del contenedor y qué puede hacer ese proceso en el sistema subyacente.
1. Los Dos Niveles: Pod vs. Contenedor
Esta es la regla de oro para el CKAD: el contexto de seguridad se puede definir a nivel de Pod o a nivel de Contenedor.
- A nivel de Pod (
pod.spec.securityContext): Las configuraciones se aplican a todos los contenedores dentro de ese Pod (y a los volúmenes). - A nivel de Contenedor (
pod.spec.containers[*].securityContext): Las configuraciones se aplican solo a ese contenedor específico.
Regla de herencia: Si defines una misma configuración (como el usuario) en ambos niveles, la configuración del Contenedor sobrescribe a la del Pod.
2. Campos Clave que Debes Memorizar
Para el examen, no necesitas saber todos los campos, pero estos son obligatorios:
runAsUser: Especifica el ID del usuario (UID) que ejecutará el proceso (ej.1000). Si no se especifica, suele serroot(0).runAsGroup: Especifica el ID del grupo principal.runAsNonRoot: Aceptatrueofalse. Si estrue, Kubelet validará la imagen antes de iniciarla para asegurar que no se ejecute como el usuarioroot(UID 0). Si intenta arrancar como root, el Pod fallará.allowPrivilegeEscalation: Solo a nivel de contenedor. Si estrue, el contenedor tiene casi los mismos privilegios que el nodo host (muy peligroso, pero a veces te lo piden en un escenario de troubleshooting).capabilities: Solo a nivel de contenedor. Permite agregar (add) o quitar (drop) privilegios específicos del kernel de Linux sin dar accesoprivilegedtotal (ej.NET_ADMINpara modificar redes,SYS_TIMEpara cambiar la hora).readOnlyRootFilesystem: Solo a nivel de contenedor.
3. Ejemplo de Manifiesto YAML
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
# --- SEGURIDAD A NIVEL DE POD ---
securityContext:
runAsUser: 1000 # Todos los contenedores usarán este usuario por defecto
fsGroup: 2000 # Permisos para volúmenes montados
containers:
- name: sec-ctx-container
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
# --- SEGURIDAD A NIVEL DE CONTENEDOR ---
securityContext:
runAsUser: 2000 # ¡ESTO SOBRESCRIBE EL 1000 DEL POD!
allowPrivilegeEscalation: false
capabilities:
add: ["NET_ADMIN"] # Añade un privilegio específico