Soluciona problemas de implementación de cargas de trabajo de Autopilot con privilegios


En esta página, se muestra cómo resolver problemas con las cargas de trabajo con privilegios que implementas en los clústeres de Autopilot de Google Kubernetes Engine (GKE).

Problemas de sincronización de la lista de entidades permitidas

Cuando implementas un AllowlistSynchronizer, GKE intenta instalar y sincronizar los archivos de lista de entidades permitidas que especifiques. Si esta sincronización falla, el campo status de AllowlistSynchronizer informó el error.

Obtén el estado del objeto AllowlistSynchronizer:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

El resultado es similar a este:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

Los campos conditions.message y managedAllowlistStatus.lastError proporcionan información detallada sobre el error. Usa esta información para resolver el problema.

Problemas de implementación de cargas de trabajo con privilegios

Después de instalar correctamente una lista de entidades permitidas, debes implementar la carga de trabajo con privilegios correspondiente en tu clúster. En algunos casos, GKE puede rechazar la carga de trabajo.

Prueba las siguientes opciones de resolución:

  • Asegúrate de que la versión de GKE de tu clúster cumpla con el requisito de versión de la carga de trabajo.
  • Asegúrate de que la carga de trabajo que implementes sea la a la que se aplica el archivo de lista de entidades permitidas.

Para ver por qué se rechazó una carga de trabajo con privilegios, solicita información detallada a GKE sobre los incumplimientos de la lista de entidades permitidas:

  1. Obtén una lista de las listas de entidades permitidas instaladas en el clúster:

    kubectl get workloadallowlist
    

    Busca el nombre de la lista de entidades permitidas que se debe aplicar a la carga de trabajo con privilegios.

  2. Abre el manifiesto YAML de la carga de trabajo con privilegios en un editor de texto. Si no puedes acceder a los manifiestos YAML, por ejemplo, si el proceso de implementación de la carga de trabajo usa otras herramientas, comunícate con el proveedor de la carga de trabajo para abrir un problema. Omite los pasos restantes.

  3. Agrega la siguiente etiqueta a la sección spec.metadata.labels de la especificación del Pod de la carga de trabajo privilegiada:

    labels:
      cloud.google.com/matching-allowlist: ALLOWLIST_NAME
    

    Reemplaza ALLOWLIST_NAME por el nombre de la lista de entidades permitidas que obtuviste en el paso anterior. Usa el nombre de la salida del comando kubectl get workloadallowlist, no la ruta de acceso al archivo de la lista de entidades permitidas.

  4. Guarda el manifiesto y aplica la carga de trabajo al clúster:

    kubectl apply -f WORKLOAD_MANIFEST_FILE
    

    Reemplaza WORKLOAD_MANIFEST_FILE por la ruta de acceso al archivo de manifiesto.

    El resultado proporciona información detallada sobre qué campos de la carga de trabajo no coincidieron con la lista de entidades permitidas especificada, como en el siguiente ejemplo:

    Error from server (GKE Warden constraints violations): error when creating "STDIN": admission webhook "warden-validating.common-webhooks.networking.gke.io" denied the request:
    
    ===========================================================================
    Workload Mismatches Found for Allowlist (example-allowlist-1):
    ===========================================================================
    HostNetwork Mismatch: Workload=true, Allowlist=false
    HostPID Mismatch: Workload=true, Allowlist=false
    Volume[0]: data
             - data not found in allowlist. Verify volume with matching name exists in allowlist.
    Container[0]:
    - Envs Mismatch:
            - env[0]: 'ENV_VAR1' has no matching string or regex pattern in allowlist.
            - env[1]: 'ENV_VAR2' has no matching string or regex pattern in allowlist.
    - Image Mismatch: Workload=k8s.gcr.io/diff/image, Allowlist=k8s.gcr.io/pause2. Verify that image string or regex match.
    - SecurityContext:
            - Capabilities.Add Mismatch: the following added capabilities are not permitted by the allowlist: [SYS_ADMIN SYS_PTRACE]
    - VolumeMount[0]: data
            - data not found in allowlist. Verify volumeMount with matching name exists in allowlist.
    

    En este ejemplo, se producen los siguientes incumplimientos:

    • La carga de trabajo especifica hostNetwork: true, pero la lista de entidades permitidas no especifica hostNetwork: true.
    • La carga de trabajo especifica hostPID: true, pero la lista de entidades permitidas no especifica hostPID: true.
    • La carga de trabajo especifica un volumen llamado data, pero la lista de entidades permitidas no especifica un volumen llamado data.
    • El contenedor especifica las variables de entorno ENV_VAR1 y ENV_VAR2, pero la lista de entidades permitidas no las especifica.
    • El contenedor especifica la imagen k8s.gcr.io/diff/image, pero la lista de entidades permitidas especifica k8s.gcr.io/pause2.
    • El contenedor agrega las capacidades SYS_ADMIN y SYS_PTRACE, pero la lista de entidades permitidas no permite agregarlas.
    • El contenedor especifica una activación de volumen llamada data, pero la lista de entidades permitidas no especifica una activación de volumen llamada data.

Si implementas una carga de trabajo que proporciona un proveedor externo, abre un problema con ese proveedor para resolver los incumplimientos. Proporciona el resultado del paso anterior en el problema.

Errores y solicitudes de funciones para cargas de trabajo y listas de entidades permitidas con privilegios

Los socios son responsables de crear, desarrollar y mantener sus cargas de trabajo y listas de entidades permitidas con privilegios. Si encuentras un error o tienes una solicitud de función para una carga de trabajo privilegiada o una lista de entidades permitidas, comunícate con el socio correspondiente.