En esta página se explica cómo resolver problemas con cargas de trabajo con privilegios que despliegues en clústeres de Autopilot de Google Kubernetes Engine (GKE).
Problemas de sincronización de listas de permitidos
Cuando despliegas un AllowlistSynchronizer
, GKE intenta instalar y sincronizar los archivos de lista de permitidos que especifiques. Si esta sincronización falla, el campo status
del AllowlistSynchronizer
indica el error.
Obtén el estado del objeto AllowlistSynchronizer
:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
El resultado debería ser similar al siguiente:
...
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. Utiliza esta información para resolver el problema.
Problemas de implementación de cargas de trabajo con privilegios
Una vez que hayas instalado correctamente una lista de permitidos, implementa la carga de trabajo privilegiada 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 el requisito de versión de la carga de trabajo.
- Asegúrate de que la carga de trabajo que vas a implementar sea la carga de trabajo a la que se aplica el archivo de lista de permitidos.
Para ver por qué se ha rechazado una carga de trabajo con privilegios, solicita información detallada a GKE sobre las infracciones de la lista de permitidos:
Obtén una lista de las listas de permitidos instaladas en el clúster:
kubectl get workloadallowlist
Busca el nombre de la lista de permitidos que se debe aplicar a la carga de trabajo privilegiada.
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), ponte en contacto con el proveedor de la carga de trabajo para abrir un problema. Sáltate los pasos restantes.
Añade la siguiente etiqueta a la sección
spec.metadata.labels
de la especificación del pod de carga de trabajo con privilegios:labels: cloud.google.com/matching-allowlist: ALLOWLIST_NAME
Sustituye
ALLOWLIST_NAME
por el nombre de la lista de permitidos que has obtenido en el paso anterior. Usa el nombre de la salida del comandokubectl get workloadallowlist
, no la ruta al archivo de la lista de permitidos.Guarda el manifiesto y aplica la carga de trabajo al clúster:
kubectl apply -f WORKLOAD_MANIFEST_FILE
Sustituye
WORKLOAD_MANIFEST_FILE
por la ruta al archivo de manifiesto.El resultado proporciona información detallada sobre los campos de la carga de trabajo que no coinciden con la lista de elementos permitidos 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 las siguientes infracciones:
- La carga de trabajo especifica
hostNetwork: true
, pero la lista de permitidos no especificahostNetwork: true
. - La carga de trabajo especifica
hostPID: true
, pero la lista de permitidos no especificahostPID: true
. - La carga de trabajo especifica un volumen llamado
data
, pero la lista de permitidos no especifica ningún volumen llamadodata
. - El contenedor especifica las variables de entorno
ENV_VAR1
yENV_VAR2
, pero la lista de permitidas no las especifica. - El contenedor especifica la imagen
k8s.gcr.io/diff/image
, pero la lista de permitidas especificak8s.gcr.io/pause2
. - El contenedor añade las funciones
SYS_ADMIN
ySYS_PTRACE
, pero la lista de permitidas no permite añadir estas funciones. - El contenedor especifica un montaje de volumen llamado
data
, pero la lista de elementos permitidos no especifica ningún montaje de volumen llamadodata
.
- La carga de trabajo especifica
Si vas a implementar una carga de trabajo proporcionada por un proveedor externo, abre un problema con ese proveedor para resolver las infracciones. Proporciona el resultado del paso anterior en el problema.
Errores y solicitudes de funciones para cargas de trabajo privilegiadas y listas de permitidos
Los partners son responsables de crear, desarrollar y mantener sus cargas de trabajo privilegiadas y sus listas de permitidos. Si detectas un error o tienes una solicitud de función para una carga de trabajo privilegiada o una lista de permitidos, ponte en contacto con el partner correspondiente.
Siguientes pasos
Si no encuentras una solución a tu problema en la documentación, consulta la sección Obtener asistencia para obtener más ayuda, incluidos consejos sobre los siguientes temas:
- Abrir un caso de asistencia poniéndose en contacto con el equipo de Atención al Cliente de Cloud.
- Obtener asistencia de la comunidad haciendo preguntas en Stack Overflow
y usando la etiqueta
google-kubernetes-engine
para buscar problemas similares. También puedes unirte al#kubernetes-engine
canal de Slack para obtener más ayuda de la comunidad. - Abrir errores o solicitudes de funciones mediante el seguimiento de problemas público.