Las versiones 1.25 y posteriores de Tanzu Kubernetes admiten la controladora de admisión de seguridad de pods (Pod Security Admission, PSA). Con PSA, puede aplicar de manera uniforme la seguridad de pods mediante etiquetas de espacio de nombres.
PSA habilitada en TKR 1.25 y versiones posteriores
La controladora de admisión de seguridad de pods es una controladora de Kubernetes que permite aplicar estándares de seguridad a los pods que se ejecutan en los clústeres de TKG. De forma predeterminada, las Tanzu Kubernetes versiones 1.25 y posteriores habilitan la controladora de PSA. La controladora de PSA reemplaza a la controladora de la directiva de seguridad de pods (Pod Security Policy, PSP), que está obsoleta y se eliminó. Consulte también Configurar PSP para TKR 1.24 y versiones anteriores.
Tanzu Kubernetes v1.25 es una versión de transición con PSA configurada como advertencia. A partir de Tanzu Kubernetes v1.26, PSA entrará en vigor. Debe planificar la migración de las cargas de trabajo de pods de PSP a PSA antes de actualizar los clústeres de TKG. Para obtener instrucciones, consulte Migrar de la directiva de seguridad de pods a la controladora de admisión de seguridad de pods integrada.
Configurar PSA en todo el clúster
A partir de vSphere 8 Update 3, puede configurar PSA en todo el clúster mediante la variable ClusterClass de podSecurityStandard
que está disponible con la API v1beta1. Consulte API de clúster v1beta1.
Modos de PSA
enforce
,
audit
y
warn
. En la tabla se enumera y describe cada modo de PSA.
MODO | Descripción |
---|---|
enforce |
Las infracciones de seguridad hacen que se rechace el pod. |
audit |
Las infracciones de seguridad generan la adición de una anotación de auditoría al evento consignado en el registro de auditoría, pero por lo demás están permitidas. |
warn |
Las infracciones de seguridad activan una advertencia orientada al usuario, pero por lo demás están permitidas. |
Estándares de PSA
NIVEL | Descripción |
---|---|
privileged |
Control sin restricciones, que brinda el nivel más amplio posible de permisos. Este estándar de seguridad permite escalaciones de privilegios conocidos. |
baseline |
Control poco restrictivo que impide escalaciones de privilegios conocidos. Este estándar de seguridad permite la configuración predeterminada (mínimamente especificada) de pods. |
restricted |
Control muy restringido, que sigue las prácticas recomendadas de protección de pods. |
Etiquetas de espacio de nombres de PSA
La controladora de PSA aplica la seguridad de pods en el nivel del espacio de nombres de Kubernetes. Las etiquetas de espacio de nombres se utilizan para definir los modos y los niveles de PSA que desea utilizar para los pods en un espacio de nombres determinado.
Kubernetes proporciona un conjunto de etiquetas que pueden utilizarse para definir cuáles de los estándares se utilizarán para un espacio de nombres. La etiqueta que aplique define la acción que realiza el plano de control de Kubernetes si se detecta una posible infracción de la PSA. Para un espacio de nombres de Kubernetes dado, puede configurar algún modo o todos, o incluso establecer un nivel diferente para los distintos modos.
# MODE must be one of `enforce`, `audit`, or `warn`. # LEVEL must be one of `privileged`, `baseline`, or `restricted`. pod-security.kubernetes.io/<MODE>=<LEVEL>
También puede aplicar una etiqueta de versión por modo que se pueda utilizar para fijar el estándar de seguridad a la versión de Kubernetes. Consulte Aplicar estándares de seguridad de pods con etiquetas de espacio de nombres para obtener más información.
PSA predeterminada para clústeres de TKG
De forma predeterminada, los clústeres de TKG aprovisionados con Tanzu Kubernetes versión 1.25 tienen modos PSA warn
y audit
establecidos en restricted
para espacios de nombres que no son del sistema. Esta es una configuración sin fuerza: la controladora de PSA genera una advertencia y una notificación de auditoría si un pod infringe la seguridad, pero no se rechaza el pod.
enforce
establecido en
restricted
para espacios de nombres que no son del sistema. Si un pod infringe la seguridad, se rechaza. Debe configurar PSA en el espacio de nombres para ejecutar pods con un control menos restrictivo.
Versión de TKr | PSA predeterminada |
---|---|
TKr v1.25 | modo: advertencia | nivel: restringido modo: auditoría | nivel: restringido modo: aplicación | nivel: no establecido |
TKr v1.26 y versiones posteriores | modo: aplicación | nivel: restringido |
Configurar PSA mediante etiquetas de espacio de nombres
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
restricted
a
baseline
.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=baseline
baseline
en el espacio de nombres predeterminado:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=baseline
restricted
a
privileged
.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=privileged
privileged
en el espacio de nombres predeterminado:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged
Para Tanzu Kubernetes versiones 1.26 y posteriores, utilice los siguientes comandos de ejemplo para relajar la PSA en todos los espacios de nombres que no sean del sistema.
kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=privileged
kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=restricted
Configurar el contexto de seguridad para pods individuales
{"opType":"CREATE_POD","succeeded":false,"err":"creating pod example-pod: pods \"example-pod\" is forbidden: violates PodSecurity \"restricted:latest\": allowPrivilegeEscalation != false (container \"example-container\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"example-container\" must set securityContext.capabilities.drop=[\"ALL\"]), runAsNonRoot != true (pod or container \"example-container\" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container \"example-container\" must set securityContext.seccompProfile.type to \"RuntimeDefault\" or \"Localhost\")","events":[]}
apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - image: gcr.io/google_containers/busybox:1.24 name: example-container command: ["/bin/sh", "-c", "echo 'hello' > /mnt/volume1/index.html && chmod o+rX /mnt /mnt/volume1/index.html && while true ; do sleep 2 ; done"] securityContext: allowPrivilegeEscalation: false runAsNonRoot: true seccompProfile: type: "RuntimeDefault" capabilities: drop: [all] volumeMounts: - name: example-volume-mount mountPath: /mnt/volume1 restartPolicy: Never volumes: - name: example-volume persistentVolumeClaim: claimName: example-pvc