Solucionar problemas de autenticación de Workload Identity gestionado en GKE

En este documento se describen las soluciones a los errores habituales de las identidades de carga de trabajo gestionadas.

Para comprobar el estado de un pod, ejecuta el siguiente comando:

kubectl describe pod

No se puede desplegar el pod con certificados

Si no se ha podido desplegar el pod de la carga de trabajo de Google Kubernetes Engine (GKE) con los certificados montados, usa el siguiente comando para comprobar el estado del pod:

kubectl describe pod POD_NAME -n POD_NAMESPACE

Errores relacionados con los permisos

En esta sección se describen los errores relacionados con permisos incorrectos.

Se ha denegado el permiso al emitir el certificado: no se ha podido emitir el certificado desde la autenticación de GKE

Este error tiene un aspecto similar al siguiente:

Permission denied while issuing the certificate: failed to issue the certificate from the GKE Auth: rpc error: code = PermissionDenied desc = Permission 'privateca.certificates.createForSelf' denied on 'projects/PROJECT_NUMBER/locations/REGION/caPools/ CA_POOL_ID'

El error se ha producido porque falta el rol CA Service Workload Certificate Requester (roles/privateca.workloadCertificateRequester) en el grupo de la AC subordinada.

Para resolver este error, asigna el rol al grupo:

gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
   --project=CA_POOL_PROJECT_ID \
   --location=REGION \
   --role=roles/privateca.workloadCertificateRequester \
   --member="principal://iam.googleapis.com/projects/CA_POOL_PROJECT_NUMBER/name/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog"

Haz los cambios siguientes:

  • SUBORDINATE_CA_POOL_ID: el ID del grupo de ACs subordinadas
  • CA_POOL_PROJECT_ID: el ID de proyecto del grupo de ACs raíz
  • REGION: la región de la AC subordinada
  • CA_POOL_PROJECT_NUMBER: número de proyecto del grupo de autoridades de certificación
  • PROJECT_ID: el ID del proyecto del grupo de identidades de carga de trabajo

No se ha podido completar MountVolume.SetUp para el volumen

Este error tiene un aspecto similar al siguiente:

MountVolume.SetUp failed for volume "fleet-spiffe-credentials" : rpc error: code = Internal desc = unable to mount volume: while creating volume: while loading trust bundles: rpc error: code = Internal desc = while getting trust map from the trustBundleWatcher: rpc error: code = Internal desc = no GKEClusterTrustBundle objects found with fleet WIP nickname fleet-project/svc.id.goog

Este error se ha producido porque falta el rol Lector del grupo de AC privadas (roles/privateca.poolReader) en el grupo de AC subordinada del grupo de identidades de carga de trabajo.

Para resolver este error, asigna el rol al grupo y espera unos minutos a que se carguen los paquetes de confianza:

gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
 --location=REGION \
 --role=roles/privateca.poolReader \
 --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog"

Haz los cambios siguientes:

  • SUBORDINATE_CA_POOL_ID: el ID del grupo de ACs subordinadas
  • REGION: la región de la AC subordinada
  • PROJECT_NUMBER: el número del proyecto del grupo de identidades de carga de trabajo
  • PROJECT_ID: el ID del proyecto del grupo de identidades de carga de trabajo

Puedes usar el siguiente comando para comprobar si existen los paquetes de confianza:

kubectl get gkeclustertrustbundle

Cuando se cargan los paquetes de confianza, la respuesta tiene el siguiente aspecto:

NAME                                         AGE
svc.id.goog-PROJECT_ID.svc.id.goog   5m35s

En el resultado, PROJECT_ID es el ID del proyecto de la flota al que está asociado tu raíz de confianza.

Errores de certificado

Los errores de esta sección están relacionados con la configuración de los certificados.

Pueden producirse varios errores si no se generan certificados de identidad de carga de trabajo gestionada. Para comprobar si estos certificados existen en volúmenes montados en pods, haz lo siguiente:

  1. Conéctate al pod.

    # Open the pod sh interface
    kubectl exec -it $pod_name -n $pod_namespace -- sh
    
  2. Lista e inspecciona los archivos de credenciales.

    # Look up the volume contents:
    ls -la /var/run/secrets/workload-spiffe-credentials
    cat /var/run/secrets/workload-spiffe-credentials/certificates.pem
    cat /var/run/secrets/workload-spiffe-credentials/ca_certificates.pem
    cat /var/run/secrets/workload-spiffe-credentials/private_key.pem
    cat /var/run/secrets/workload-spiffe-credentials/trust_bundles.json
    

También puedes inspeccionar el estado de aprovisionamiento del certificado de un pod consultando los registros de k8s_containerdel contenedor `gke-metadata-server` a través de la consola.Trusted Cloud

No se cumple la condición previa al emitir el certificado

La descripción del pod puede incluir el siguiente mensaje:

Failed precondition while issuing the certificate: failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition

Este error se ha producido porque el grupo de identidades de carga de trabajo no se ha configurado con una configuración de emisión de certificados (CIC).

Para solucionar este error, crea un CIC y úsalo para actualizar el grupo de identidades de carga de trabajo.