Probleme mit der Authentifizierung von verwalteten Arbeitslastidentitäten für GKE beheben

In diesem Dokument werden Lösungen für häufige Fehler bei verwalteten Arbeitslastidentitäten beschrieben.

Sie können den Status eines Pods mit dem folgenden Befehl prüfen:

kubectl describe pod

Pod kann nicht mit Zertifikaten bereitgestellt werden

Wenn der GKE-Arbeitslast-Pod (Google Kubernetes Engine) nicht mit den bereitgestellten Zertifikaten bereitgestellt werden konnte, verwenden Sie den folgenden Befehl, um den Pod-Status zu prüfen:

kubectl describe pod POD_NAME -n POD_NAMESPACE

Berechtigungsfehler

In diesem Abschnitt werden Fehler im Zusammenhang mit falschen Berechtigungen beschrieben.

Berechtigung beim Ausstellen des Zertifikats verweigert: Ausstellen des Zertifikats über GKE Auth fehlgeschlagen

Dieser Fehler sieht in etwa so aus:

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'

Der Fehler ist aufgetreten, weil dem Workload Identity-Pool die Rolle CA Service Workload Certificate Requester (roles/privateca.workloadCertificateRequester) für den untergeordneten CA-Pool fehlt.

Um diesen Fehler zu beheben, gewähren Sie die Rolle dem 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"

Ersetzen Sie Folgendes:

  • SUBORDINATE_CA_POOL_ID: die ID des untergeordneten CA-Pools
  • CA_POOL_PROJECT_ID: die Projekt-ID des Stamm-CA-Pools
  • REGION: die Region der untergeordneten Zertifizierungsstelle
  • CA_POOL_PROJECT_NUMBER: die Projektnummer des CA-Pools
  • PROJECT_ID: die Projekt-ID des Workload Identity-Pools

MountVolume.SetUp ist für das Volume fehlgeschlagen

Dieser Fehler sieht in etwa so aus:

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

Dieser Fehler ist aufgetreten, weil dem Workload Identity-Pool die Rolle „Private CA Pool Reader“ (roles/privateca.poolReader) für den untergeordneten CA-Pool fehlt.

Um diesen Fehler zu beheben, gewähren Sie die Rolle dem Pool und warten Sie einige Minuten, bis die Trust Bundles geladen wurden:

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"

Ersetzen Sie Folgendes:

  • SUBORDINATE_CA_POOL_ID: die ID des untergeordneten CA-Pools
  • REGION: die Region der untergeordneten Zertifizierungsstelle
  • PROJECT_NUMBER: die Projektnummer des Workload Identity-Pools
  • PROJECT_ID: die Projekt-ID des Workload Identity-Pools

Mit dem folgenden Befehl können Sie prüfen, ob die Trust Bundles vorhanden sind:

kubectl get gkeclustertrustbundle

Wenn die Trust Bundles geladen sind, sieht die Antwort so aus:

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

In der Ausgabe ist PROJECT_ID die Projekt-ID der Flotte, mit der Ihre Trust Root verknüpft ist.

Zertifikatsfehler

Die Fehler in diesem Abschnitt beziehen sich auf die Zertifikatskonfiguration.

Wenn keine Zertifikate für verwaltete Arbeitslastidentitäten generiert werden, können mehrere Fehler auftreten. So prüfen Sie, ob diese Zertifikate auf Pod-gemounteten Volumes vorhanden sind:

  1. Stellen Sie eine Verbindung zum Pod her.

    # Open the pod sh interface
    kubectl exec -it $pod_name -n $pod_namespace -- sh
    
  2. Listen Sie die Anmeldedatendateien auf und prüfen Sie sie.

    # 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
    

Sie können den Status der Zertifizierungsbereitstellung eines Pods auch prüfen, indem Sie die k8s_container-Protokolle für den Container „gke-metadata-server“ über dieTrusted Cloud -Konsole aufrufen.

Fehlgeschlagene Voraussetzung bei der Ausstellung des Zertifikats

Die Pod-Beschreibung kann die folgende Meldung enthalten:

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

Dieser Fehler ist aufgetreten, weil der Workload Identity-Pool nicht mit einer Konfiguration für die Zertifikatausstellung konfiguriert wurde.

Um diesen Fehler zu beheben, erstellen Sie eine Cloud Identity Connect-Gruppe und aktualisieren Sie damit den Workload Identity-Pool.