Las cargas de trabajo con privilegios en los clústeres de Autopilot de Google Kubernetes Engine (GKE) deben configurarse correctamente para evitar problemas. Las configuraciones incorrectas pueden provocar errores de sincronización con las listas de entidades permitidas o hacer que se rechace la carga de trabajo. Estos problemas pueden impedir que los agentes o servicios esenciales se ejecuten con los permisos necesarios.
Usa este documento para solucionar problemas relacionados con la implementación de cargas de trabajo con privilegios en Autopilot. Encuentra orientación para resolver errores de sincronización de la lista de entidades permitidas y diagnosticar por qué se podría rechazar una carga de trabajo privilegiada.
Esta información es importante para los administradores y operadores de la plataforma, y para los equipos de seguridad que implementan cargas de trabajo con permisos elevados en clústeres de Autopilot. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas comunes de los usuarios de GKE.
Problemas de sincronización de la lista de entidades permitidas
Cuando implementas un AllowlistSynchronizer
, GKE intenta instalar y sincronizar los archivos de la lista de entidades permitidas que especifiques. Si falla esta sincronización, el campo status
del AllowlistSynchronizer
informa 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.
Varios AllowlistSynchronizers
En los clústeres de GKE en versiones anteriores a la 1.33.4-gke.1035000, es posible que no se instale WorkloadAllowlists
si hay más de un AllowlistSynchronizer
presente.
Para resolver el problema, usa solo un objeto AllowlistSynchronizer
que contenga varios objetos allowlistPaths
.
Como alternativa, puedes actualizar tu clúster a una versión más reciente.
Problemas de implementación de cargas de trabajo privilegiadas
Después de instalar correctamente una lista de entidades permitidas, implementa la carga de trabajo privilegiada correspondiente en tu clúster. En algunos casos, GKE podría 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 implementas sea aquella a la que se aplica el archivo de la 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:
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.
Abre el manifiesto YAML de la carga de trabajo con privilegios en un editor de texto. Si no puedes acceder a los manifiestos de 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.
Agrega 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
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 comandokubectl get workloadallowlist
, no la ruta de acceso al archivo de la lista de entidades permitidas.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 lo hace.hostNetwork: true
- La carga de trabajo especifica
hostPID: true
, pero la lista de entidades permitidas no lo hace.hostPID: true
- La carga de trabajo especifica un volumen llamado
data
, pero la lista de entidades permitidas no especifica un volumen llamadodata
. - El contenedor especifica variables de entorno llamadas
ENV_VAR1
yENV_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 especificak8s.gcr.io/pause2
. - El contenedor agrega las capacidades
SYS_ADMIN
ySYS_PTRACE
, pero la lista de entidades permitidas no permite agregar estas capacidades. - El contenedor especifica una activación de volumen llamada
data
, pero la lista de entidades permitidas no especifica una activación de volumen llamadadata
.
- La carga de trabajo especifica
Si implementas una carga de trabajo proporcionada por 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 con privilegios y listas de entidades permitidas
Los socios son responsables de crear, desarrollar y mantener sus cargas de trabajo privilegiadas y listas de entidades permitidas. 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.
¿Qué sigue?
Si no encuentras una solución a tu problema en la documentación, consulta Obtener asistencia para obtener más ayuda, como asesoramiento en los siguientes temas:
- Comunicarse con Atención al cliente de Cloud para abrir un caso de asistencia.
- Hacer preguntas en StackOverflow para obtener asistencia de
la comunidad y usar la etiqueta
google-kubernetes-engine
para buscar problemas similares. También puedes unirte al canal de Slack#kubernetes-engine
para obtener más Asistencia de la comunidad. - Abrir errores o solicitudes de funciones con la herramienta de seguimiento de errores pública.