Seguridad de pods

En este tema se explica cómo configurar los controladores de admisión de seguridad de pods (Pod Security Admission, PSA) para proteger los clústeres de carga de trabajo implementados por Tanzu Kubernetes Grid (TKG).

Para los clústeres o los espacios de nombres dentro de los clústeres que ejecutan Kubernetes v1.23 y versiones posteriores, TKG admite la aplicación de directivas de seguridad de pods de tipo privileged, baseline o restricted a través del controlador de admisión de seguridad de pods (Pod Security Admission, PSA).

Fondo: Controladores de PSA

Los controladores de PSA en Kubernetes le permiten configurar directivas de seguridad de carga de trabajo en dos ejes:

  • Los Perfiles (Profiles) designan los niveles de permisos en los que se puede ejecutar el pod de carga de trabajo: privileged, baseline y restricted, de menos a más restrictivo.
  • Los Modos (Modes) especifican las acciones que se activan cuando un intento de creación del pod infringe un perfil: warn genera una advertencia, audit agrega una entrada de registro de auditoría y enforce bloquea la creación del pod.

Puede configurar controladores de PSA para que funcionen a través de espacios de nombres específicos o en todo el clúster. Por ejemplo, puede configurar un clúster para que active un registro de auditoría cuando un pod baseline infrinja una directiva de seguridad y bloquee un pod de restricted si infringe la directiva.

Para obtener más información, consulte Estándares de seguridad de pods en la documentación de Kubernetes.

Migración de directivas de seguridad de pods

El sistema PSA reemplaza las directivas de seguridad de pods (Pod Security Policies, PSP), que quedaron obsoletas en Kubernetes v1.21 y se eliminaron en la versión 1.25, como se describe en las notas de la versión de Kubernetes v1.25.

Las PSP para los nodos estaban obsoletas en TKG v2.1, para reflejar su desuso en Kubernetes. Para obtener información sobre cómo migrar pods de PSP al controlador PSA, consulte Migrar de PodSecurityPolicy al controlador de admisión de PodSecurity integrado.

Configuración de PSA en TKG

La configuración de PSA predeterminada para clústeres de carga de trabajo de TKG depende de la versión de Kubernetes que se ejecuta:

  • Kubernetes v1.26, nativo para TKG v2.3:
    • Modos warn y audit: restricted
    • Modo enforce: sin ajuste
  • Kubernetes v1.25 y v1.24, nativo para TKG v2.2 y v2.1:
    • Modos warn y audit: baseline
    • Modo enforce: sin ajuste

La configuración predeterminada de PSA para los clústeres que ejecutan las versiones nativas de Kubernetes en TKG 2.3, v2.2 y v2.1 garantizan que los pods sigan ejecutándose durante la migración de PSP a PSA, incluso si generan advertencias sobre la infracción de la directiva:

A partir de TKG v2.2, todos los componentes internos de TKG cumplen con el perfil PSA restricted.

Configuración de un PSA para todo el clúster

Puede configurar un nuevo clúster con PSA en todo el clúster o cambiar el PSA de un clúster existente.

PSA en todo el clúster para un nuevo clúster

Para configurar un PSA de todo el clúster para un nuevo clúster de carga de trabajo, establezca POD_SECURITY_STANDARD_DEACTIVATED en su archivo de configuración del clúster como false y establezca las otras variables POD_SECURITY_STANDARD_* como se describe en la tabla Estándares de seguridad de pods de la Referencia de variables del archivo de configuración.

  • POD_SECURITY_STANDARD_DEACTIVATED
  • POD_SECURITY_STANDARD_AUDIT
  • POD_SECURITY_STANDARD_WARN
  • POD_SECURITY_STANDARD_ENFORCE

También puede generar el manifiesto del clúster como el paso 1 del proceso de dos pasos descrito en Crear un clúster basado en clases y, a continuación, editar los valores de la variable podSecurityStandard en la especificación Cluster como en Cambiar PSA para un clúster basado en clases existente a continuación antes de crear el clúster en el paso 2.

Cambiar PSA para un clúster basado en clases existente

Para cambiar la configuración de PSA de un clúster basado en clases existente:

  1. Abra la especificación de objeto Cluster en un editor:

    kubectl edit -namespace NAMESPACE CLUSTER
    
  2. Edite los valores en el bloque podSecurityStandard en spec.topology.variables:

    - name: podSecurityStandard
    
      value:
        deactivated: DEACTIVATED
        audit: AUDIT-PROFILE
        enforce: ENFORCE-PROFILE
        warn: WARN-PROFILE
        auditVersion: AUDIT-VERSION
        enforceVersion: ENFORCE-VERSION
        warnVersion: WARN-VERSION
        exemptions:
          namespaces: [EXEMPT-NS]
    

    Donde:

    • DEACTIVATED es false para aplicar un PSA en todo el clúster y true de lo contrario
    • AUDIT-PROFILE, ENFORCE-PROFILE y WARN-PROFILE son los perfiles de PSA para cada modo, que pueden ser "privileged", "baseline" o "restricted". El valor predeterminado es "privileged".
    • Los valores de VERSION son la versión de Kubernetes para los tres modos, por ejemplo, "v1.26".
    • EXEMPT-NS es una lista de espacios de nombres separados por comas que se excluyen del control de PSA.

    Nota: Los espacios de nombres del sistema kube-system y tkg-system siempre se excluirán del control de PSA.

  3. Después de aplicar la especificación del objeto Cluster, los cambios deben implementarse en los nodos del plano de control del clúster.

Cambiar PSA para un clúster heredado existente

Para cambiar la configuración de PSA de un clúster heredado existente:

  1. Recupere el archivo de especificación actual AdmissionConfiguraton del objeto KubeadmControlPlane y guárdelo de forma local, por ejemplo:

    kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
    
  2. Edite el archivo admission-config.yaml a la nueva configuración. Por ejemplo, el siguiente establece enforce en baseline y mantiene los modos audit y warn en restricted:

    apiVersion: apiserver.config.k8s.io/v1
    kind: AdmissionConfiguration
    plugins:
    - name: PodSecurity
    configuration:
      apiVersion: pod-security.admission.config.k8s.io/v1beta1
      kind: PodSecurityConfiguration
      defaults:
        enforce: "baseline"
        enforce-version: "v1.24"
        audit: "restricted"
        audit-version: "v1.24"
        warn: "restricted"
        warn-version: "v1.24"
      exemptions:
        usernames: []
        runtimeClasses: []
        namespaces: ["kube-system", "tkg-system"]
    
  3. Edite la especificación del objeto KubeadmControlPlane y reemplace su entrada de matriz en spec.kubeadmConfigSpec.files por nuestro nuevo archivo de configuración.

  4. Después de aplicar la especificación del objeto KubeadmControlPlane, los cambios deben implementarse en los nodos del plano de control del clúster.

Comprobar la conformidad antes de agregar o cambiar una configuración de PSA

Antes de agregar o cambiar una PSA, evite el tiempo de inactividad inesperado asegurándose de que todas las cargas de trabajo existentes en el clúster o el espacio de nombres de PSA cumplan con la nueva configuración de directiva.

Puede evaluar si los pods que se ejecutan en un espacio de nombres existente cumplen con una directiva determinada ejecutando kubectl label --overwrite --dry-run=server:

kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>

La misma información se escribe en los registros de auditoría al configurar el modo audit de admisión de seguridad de pods, o cuando se aplican recursos a un clúster y se configura el modo warn.

Hay información actualizada disponible sobre los diferentes perfiles de seguridad de pods en la documentación de Kubernetes.

check-circle-line exclamation-circle-line close-line
Scroll to top icon