Risolvere i problemi relativi all'autenticazione delle identità per i carichi di lavoro gestiti per GKE

Questo documento descrive le soluzioni per gli errori comuni relativi alle identità dei carichi di lavoro gestiti.

Per controllare lo stato di un pod, esegui il seguente comando:

kubectl describe pod

Il deployment del pod con i certificati non riesce

Se non è stato possibile eseguire il deployment del pod del carico di lavoro Google Kubernetes Engine (GKE) con i certificati montati, utilizza il seguente comando per controllare lo stato del pod:

kubectl describe pod POD_NAME -n POD_NAMESPACE

Errori relativi alle autorizzazioni

Questa sezione descrive gli errori relativi alle autorizzazioni errate.

Autorizzazione negata durante l'emissione del certificato: impossibile emettere il certificato da GKE Auth

Questo errore è simile al seguente:

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'

L'errore si è verificato perché nel pool di identità del carico di lavoro manca il ruolo CA Service Workload Certificate Requester (roles/privateca.workloadCertificateRequester) nel pool di CA secondarie.

Per risolvere questo errore, concedi il ruolo al pool:

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"

Sostituisci quanto segue:

  • SUBORDINATE_CA_POOL_ID: l'ID del pool di CA subordinato
  • CA_POOL_PROJECT_ID: l'ID progetto del pool di CA radice
  • REGION: la regione della CA subordinata
  • CA_POOL_PROJECT_NUMBER: il numero del progetto del pool di CA
  • PROJECT_ID: l'ID progetto del pool di identità del workload

MountVolume.SetUp non riuscito per il volume

Questo errore è simile al seguente:

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

Questo errore si è verificato perché nel pool di identità di lavoro manca il ruolo Lettore pool di CA privato (roles/privateca.poolReader) nel pool di CA secondario.

Per risolvere questo errore, concedi il ruolo al pool e attendi qualche minuto per il caricamento dei bundle di attendibilità:

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"

Sostituisci quanto segue:

  • SUBORDINATE_CA_POOL_ID: l'ID del pool di CA subordinato
  • REGION: la regione della CA subordinata
  • PROJECT_NUMBER: il numero del progetto del pool di identità del workload
  • PROJECT_ID: l'ID progetto del pool di identità del workload

Puoi utilizzare il seguente comando per verificare l'esistenza dei pacchetti di attendibilità:

kubectl get gkeclustertrustbundle

Quando i bundle di attendibilità vengono caricati, la risposta è la seguente:

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

Nell'output, PROJECT_ID è l'ID progetto del parco a cui è associato il tuo albero di attendibilità.

Errori del certificato

Gli errori in questa sezione sono relativi alla configurazione dei certificati.

Se i certificati delle identità di carico di lavoro gestite non vengono generati, possono verificarsi diversi errori. Per verificare l'esistenza di questi certificati sui volumi montati su pod:

  1. Connettiti al pod.

    # Open the pod sh interface
    kubectl exec -it $pod_name -n $pod_namespace -- sh
    
  2. Elenca e ispeziona i file delle credenziali.

    # 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
    

Puoi anche controllare lo stato del provisioning dei certificati di un pod esaminando i log k8s_container del contenitore "gke-metadata-server" tramite la console Trusted Cloud .

Precondizione non riuscita durante l'emissione del certificato

La descrizione del pod può includere il seguente messaggio:

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

Questo errore si è verificato perché il pool di identità del workload non è stato configurato con una configurazione di emissione dei certificati (CIC).

Per risolvere questo errore, crea un CIC e utilizzalo per aggiornare il pool Workload Identity.