Pregunta 4 | Estándar de Seguridad de Pods
Usar contexto: kubectl config use-context workload-prod
Hay un Deployment container-host-hacker en el Namespace team-red que monta /run/containerd como un volumen hostPath en el Nodo donde se está ejecutando. Esto significa que el Pod puede acceder a varios datos sobre otros contenedores que se ejecutan en el mismo Nodo.
Para prevenir esto, configura el Namespace team-red para aplicar el Pod Security Standard baseline. Una vez completado, elimina el Pod del Deployment mencionado anteriormente.
Verifica los eventos del ReplicaSet y escribe las líneas de evento/log que contienen la razón por la que el Pod no se recrea en /opt/course/4/logs.
Respuesta:
Hacer que los Namespaces usen Pod Security Standards funciona mediante etiquetas. Simplemente podemos editarlo:
k edit ns team-red
Ahora configuramos la etiqueta solicitada:
apiVersion: v1
kind: Namespace
metadata:
labels:
kubernetes.io/metadata.name: team-red
pod-security.kubernetes.io/enforce: baseline # agregar
name: team-red
...
Esto ya debería ser suficiente para que el Controlador de Admisión de Seguridad de Pods predeterminado detecte ese cambio. Probémoslo y eliminemos el Pod para ver si se recreará o fallará, ¡debería fallar!
➜ k -n team-red get pod
NAME READY STATUS RESTARTS AGE
container-host-hacker-dbf989777-wm8fc 1/1 Running 0 115s
➜ k -n team-red delete pod container-host-hacker-dbf989777-wm8fc
pod "container-host-hacker-dbf989777-wm8fc" deleted
➜ k -n team-red get pod
No resources found in team-red namespace.
Normalmente el ReplicaSet de un Deployment recrearía el Pod si se elimina, aquí vemos que esto no sucede. Verifiquemos por qué:
➜ k -n team-red get rs
NAME DESIRED CURRENT READY AGE
container-host-hacker-dbf989777 1 0 0 5m25s
➜ k -n team-red describe rs container-host-hacker-dbf989777
Name: container-host-hacker-dbf989777
Namespace: team-red
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
...
Warning FailedCreate 2m41s replicaset-controller Error creating: pods "container-host-hacker-dbf989777-bjwgv" is forbidden: violates PodSecurity "baseline:latest": hostPath volumes (volume "containerdata")
Warning FailedCreate 2m2s (x9 over 2m40s) replicaset-controller (combined from similar events): Error creating: pods "container-host-hacker-dbf989777-kjfpn" is forbidden: violates PodSecurity "baseline:latest": hostPath volumes (volume "containerdata")
¡Ahí está! Finalmente escribimos la razón en el archivo solicitado para que el Sr. Puntuación también esté contento.
# /opt/course/4/logs
Warning FailedCreate 2m2s (x9 over 2m40s) replicaset-controller (combined from similar events): Error creating: pods "container-host-hacker-dbf989777-kjfpn" is forbidden: violates PodSecurity "baseline:latest": hostPath volumes (volume "containerdata")
¡Los Pod Security Standards pueden proporcionar un gran nivel base de seguridad! Pero cuando uno se encuentra queriendo ajustar más profundamente los niveles como baseline o restricted... esto no es posible y se podrían considerar soluciones de terceros como OPA.