Probleme bei der Google Distributed Cloud-Authentifizierung beheben

Dieses Dokument hilft bei der Behebung von Authentifizierungsproblemen in Google Distributed Cloud. Es werden allgemeine Informationen und Anleitungen zur Fehlerbehebung sowie spezifische Informationen für OpenID Connect (OIDC) und Lightweight Directory Access Protocol (LDAP) bereitgestellt.

Die OIDC- und LDAP-Authentifizierung verwendet den GKE Identity Service. Bevor Sie den GKE-Identitätsdienst mit Google Distributed Cloud verwenden können, müssen Sie einen Identitätsanbieter konfigurieren. Wenn Sie noch keinen Identitätsanbieter für den GKE-Identitätsdienst konfiguriert haben, folgen Sie der Anleitung für einen der folgenden Anbieter:

Informationen zum Aktivieren und Überprüfen von Identitätslogs und zum Testen der Konnektivität finden Sie in der Anleitung zur Fehlerbehebung beim Identitätsanbieter für den GKE-Identitätsdienst.

Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.

Allgemeine Fehlerbehebung

Die folgenden Tipps zur Fehlerbehebung können bei allgemeinen Authentifizierungs- und Autorisierungsproblemen bei Google Distributed Cloud hilfreich sein. Wenn diese Probleme nicht zutreffen oder Probleme mit OIDC oder LDAP auftreten, fahren Sie mit dem Abschnitt zur Fehlerbehebung im GKE Identity Service fort.

gcloud anthos auth auf dem neuesten Stand halten

Sie können viele häufige Probleme vermeiden, indem Sie prüfen, ob die Komponenten Ihrer gcloud anthos auth-Installation auf dem neuesten Stand sind.

Es müssen zwei Angaben bestätigt werden. Der Befehl gcloud anthos auth enthält die Logik in der Hauptkomponente der Google Cloud CLI und eine separat gepackte anthos-auth-Komponente.

  1. So aktualisieren Sie die Google Cloud CLI:

    gcloud components update
    
  2. So aktualisieren Sie die Komponente „anthos-auth“:

    gcloud components install anthos-auth
    

Ungültige Anbieterkonfiguration

Wenn die Konfiguration Ihres Identitätsanbieters ungültig ist, wird nach dem Klicken auf ANMELDEN eine Fehlermeldung Ihres Identitätsanbieters angezeigt. Folgen Sie dann der anbieterspezifischen Anleitung, um den Anbieter oder Ihren Cluster ordnungsgemäß zu konfigurieren.

Ungültige Konfiguration

Wenn die Google Cloud Console die OIDC-Konfiguration nicht aus Ihrem Cluster lesen kann, ist die Schaltfläche ANMELDEN deaktiviert. Informationen zur Fehlerbehebung bei der OIDC-Konfiguration Ihres Clusters finden Sie im folgenden Abschnitt Fehlerbehebung bei OIDC in diesem Dokument.

Ungültige Berechtigungen

Wenn Sie den Authentifizierungsvorgang abgeschlossen haben, die Details des Clusters aber noch nicht sichtbar sind, prüfen Sie, ob Sie dem mit OIDC verwendeten Konto die erforderlichen RBAC-Berechtigungen erteilt haben. Dies ist möglicherweise ein anderes Konto als das, mit dem Sie auf die Google Cloud Console zugreifen.

Aktualisierungstoken fehlt

Das folgende Problem tritt auf, wenn der Autorisierungsserver um eine Einwilligung bittet, aber der erforderliche Authentifizierungsparameter nicht bereitgestellt wurde.

Error: missing 'RefreshToken' field in 'OAuth2Token' in credentials struct

Fügen Sie in der Ressource ClientConfig in das Feld authentication.oidc.extraParams prompt=consent ein, um dieses Problem zu beheben. Erstellen Sie dann die Clientauthentifizierungsdatei noch einmal.

Aktualisierungstoken abgelaufen

Das folgende Problem tritt auf, wenn das Aktualisierungstoken in der kubeconfig-Datei abgelaufen ist:

Unable to connect to the server: Get {DISCOVERY_ENDPOINT}: x509:
    certificate signed by unknown authority

Führen Sie den Befehl gcloud anthos auth login noch einmal aus, um dieses Problem zu beheben.

Fehler bei gcloud anthos auth login mit proxyconnect tcp

Dieses Problem tritt auf, wenn die Konfiguration der Umgebungsvariablen https_proxy oder HTTPS_PROXY fehlerhaft ist. Wenn in den Umgebungsvariablen https:// angegeben ist, können die GoLang-HTTP-Clientbibliotheken fehlschlagen, wenn der Proxy für die Verarbeitung von HTTPS-Verbindungen mit anderen Protokollen konfiguriert wird, wie etwa SOCK5.

Die folgende Beispiel-Fehlermeldung könnte zurückgegeben werden:

proxyconnect tcp: tls: first record does not look like a TLS handshake

Um dieses Problem zu beheben, ändern Sie die Umgebungsvariablen https_proxy und HTTPS_PROXY so, dass das https:// prefix weggelassen wird. Wenn Sie Windows verwenden, ändern Sie die Systemumgebungsvariablen. Ändern Sie beispielsweise den Wert der Umgebungsvariablen https_proxy von https://webproxy.example.com:8000 in webproxy.example.com:8000.

Clusterzugriff schlägt fehl, wenn von gcloud anthos auth login generierte kubeconfig verwendet wird

Dieses Problem tritt auf, wenn der Kubernetes API-Server den Nutzer nicht autorisieren kann. Dies kann passieren, wenn die entsprechenden RBACs fehlen oder falsch sind oder ein Fehler in der OIDC-Konfiguration für den Cluster vorliegt. Der folgende Beispielfehler kann angezeigt werden:

Unauthorized

So beheben Sie das Problem:

  1. Kopieren Sie in der von gcloud anthos auth login generierten kubeconfig-Datei den Wert von id-token.

    kind: Config
    ...
    users:
    - name: ...
      user:
        auth-provider:
          config:
            id-token: xxxxyyyy
    
  2. Installieren Sie jwt-cli und führen Sie Folgendes aus:

    jwt ID_TOKEN
    
  3. OIDC-Konfiguration prüfen

    Die Ressource ClientConfig hat die Felder group und username. Diese Felder werden verwendet, um die Flags --oidc-group-claim und --oidc-username-claim auf dem Kubernetes API-Server festzulegen. Wenn dem API-Server das Token angezeigt wird, wird es an den GKE Identity Service weitergeleitet, der die extrahierten group-claim und username-claim an den API-Server zurückgibt. Der API-Server prüft anhand der Antwort, ob die entsprechende Gruppe oder der entsprechende Nutzer die richtigen Berechtigungen hat.

    Prüfen Sie, ob die für group und user in der Ressource ClientConfig festgelegten Anforderungen im ID-Token vorhanden sind.

  4. Prüfen Sie die angewendeten RBACs.

    Prüfen Sie, ob es eine RBAC mit den richtigen Berechtigungen für den Nutzer gibt, der in username-claim angegeben ist, oder für eine der Gruppen, die im vorherigen Schritt group-claim aufgeführt sind. Dem Namen des Nutzers oder der Gruppe in RBAC sollte das Präfix usernameprefix oder groupprefix vorangestellt werden, das in der Ressource ClientConfig angegeben wurde.

    Wenn usernameprefix leer ist und username ein anderer Wert als email ist, wird standardmäßig das Präfix issuerurl# verwendet. Wenn Sie Nutzernamenpräfixe deaktivieren möchten, legen Sie usernameprefix auf - fest.

    Weitere Informationen zu Nutzer- und Gruppenpräfixen finden Sie unter Mit OIDC authentifizieren.

    ClientConfig-Ressource:

    oidc:
      ...
      username: "unique_name"
      usernameprefix: "-"
      group: "group"
      groupprefix: "oidc:"
    

    ID-Token:

    {
      ...
      "email": "cluster-developer@example.com",
      "unique_name": "EXAMPLE\cluster-developer",
      "group": [
        "Domain Users",
        "EXAMPLE\developers"
      ],
    ...
    }
    

    Die folgenden RBAC-Bindungen gewähren dieser Gruppe und diesem Nutzer die Clusterrolle pod-reader. Beachten Sie den einzelnen Schrägstrich im Namensfeld statt des doppelten Schrägstrichs:

    ClusterRoleBinding gruppieren:

    apiVersion:
    kind: ClusterRoleBinding
    metadata:
      name: example-binding
    subjects:
    - kind: Group
      name: "oidc:EXAMPLE\developers"
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
    

    Nutzer-ClusterRoleBinding:

    apiVersion:
    kind: ClusterRoleBinding
    metadata:
      name: example-binding
    subjects:
    - kind: User
      name: "EXAMPLE\cluster-developer"
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
    
  5. Prüfen Sie die Serverlogs der Kubernetes API.

    Wenn das im Kubernetes API-Server konfigurierte OIDC-Plug-in nicht korrekt gestartet wird, gibt der API-Server bei Angabe des ID-Tokens den Fehler Unauthorized zurück. Prüfen Sie mit dem folgenden Befehl, ob Probleme mit dem OIDC-Plug-in auf dem API-Server aufgetreten sind:

    kubectl logs statefulset/kube-apiserver -n USER_CLUSTER_NAME \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • USER_CLUSTER_NAME: Der Name des Nutzerclusters, dessen Logs angezeigt werden sollen.
    • ADMIN_CLUSTER_KUBECONFIG: Die kubeconfig-Datei des Administratorclusters.

gkectl create-login-config ruft clientconfig nicht ab

Dieses Problem tritt auf, wenn die an gkectl create-login-config übergebene kubeconfig-Datei nicht für einen Nutzercluster bestimmt ist oder die Ressource ClientConfig bei der Clustererstellung nicht vorgekommen ist.

Error getting clientconfig using KUBECONFIG

Prüfen Sie zur Behebung dieses Problems, ob Sie die richtige kubeconfig-Datei für Ihren Nutzercluster haben. Prüfen Sie dann, ob sich die Ressource ClientConfig im Cluster befindet:

kubectl get clientconfig default -n kube-public \
  --kubeconfig USER_CLUSTER_KUBECONFIG

Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad zur kubeconfig-Datei Ihres Nutzerclusters.

gkectl create-login-config schlägt aufgrund eines doppelten Clusternamens fehl

Dieses Problem tritt auf, wenn Sie versuchen, Anmeldekonfigurationsdaten zu schreiben, die einen Clusternamen enthalten, der bereits in der Zieldatei vorhanden ist. Jede Anmeldekonfigurationsdatei muss eindeutige Clusternamen enthalten.

error merging with file MERGE_FILE because MERGE_FILE contains a cluster with
  the same name as the one read from KUBECONFIG. Please write to a new
  output file

Verwenden Sie zum Beheben dieses Problems das Flag --output, um eine neue Zieldatei anzugeben.

Wenn Sie --output nicht angeben, werden diese Anmeldekonfigurationsdaten in eine Datei mit dem Namen kubectl-anthos-config.yaml im aktuellen Verzeichnis geschrieben.

Fehlerbehebung bei OIDC

Wenn die OIDC-Authentifizierung für Google Distributed Cloud nicht funktioniert, wurde die OIDC-Spezifikation in der ClientConfig-Ressource normalerweise nicht richtig konfiguriert. Die Ressource ClientConfig enthält eine Anleitung zum Prüfen von Logs und der OIDC-Spezifikation zur Ermittlung der Ursache eines OIDC-Problems.

Informationen zum Aktivieren und Überprüfen von Identitätslogs und zum Testen der Konnektivität finden Sie in der Anleitung zur Fehlerbehebung beim Identitätsanbieter für den GKE-Identitätsdienst. Nachdem Sie bestätigt haben, dass der GKE Identity Service wie erwartet funktioniert, oder Sie ein Problem identifiziert haben, lesen Sie die folgenden Informationen zur OIDC-Fehlerbehebung.

OIDC-Spezifikation im Cluster prüfen

Die OIDC-Informationen für Ihren Cluster werden in der Ressource ClientConfig im Namespace kube-public angegeben.

  1. Verwenden Sie kubectl get, um die OIDC-Ressource für Ihren Nutzercluster auszugeben:

    kubectl --kubeconfig KUBECONFIG -n kube-public get \
      clientconfig.authentication.gke.io default -o yaml
    

    Ersetzen Sie KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.

  2. Prüfen Sie die Feldwerte, um zu bestätigen, dass die Spezifikation für Ihren OIDC-Anbieter richtig konfiguriert ist.

  3. Wenn Sie in der Spezifikation ein Konfigurationsproblem feststellen, konfigurieren Sie OIDC neu.

  4. Wenn Sie das Problem nicht selbst diagnostizieren und lösen können, wenden Sie sich an den Google Cloud-Support.

    Der Google Cloud-Support benötigt die GKE Identity Service-Logs und die OIDC-Spezifikation, um OIDC-Probleme zu diagnostizieren und zu beheben.

Prüfen, ob die OIDC-Authentifizierung aktiviert ist

Prüfen Sie vor dem Testen der OIDC-Authentifizierung, ob die OIDC-Authentifizierung in Ihrem Cluster aktiviert ist.

  1. Sehen Sie sich die Logs des GKE Identity Service an:

    kubectl logs -l k8s-app=ais -n anthos-identity-service
    

    Die folgende Beispielausgabe zeigt, dass die OIDC-Authentifizierung korrekt aktiviert ist:

    ...
    I1011 22:14:21.684580      33 plugin_list.h:139] OIDC_AUTHENTICATION[0] started.
    ...
    

    Wenn die OIDC-Authentifizierung nicht korrekt aktiviert ist, werden Fehler wie im folgenden Beispiel angezeigt:

    Failed to start the OIDC_AUTHENTICATION[0] authentication method with error:
    

    Überprüfen Sie die gemeldeten Fehler und versuchen Sie, sie zu beheben.

OIDC-Authentifizierung testen

Verwenden Sie eine Workstation mit aktivierter Benutzeroberfläche und aktiviertem Browser, um das OIDC-Feature zu nutzen. Sie können diese Schritte nicht in einer textbasierten SSH-Sitzung ausführen. Führen Sie die folgenden Schritte aus, um zu testen, ob OIDC in Ihrem Cluster ordnungsgemäß funktioniert:

  1. Laden Sie die Google Cloud CLI herunter.
  2. Führen Sie den folgenden gcloud anthos create-login-config-Befehl aus, um die Anmeldekonfigurationsdatei zu generieren:

    gcloud anthos create-login-config \
      --output user-login-config.yaml \
      --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.

  3. Führen Sie den folgenden Befehl aus, um den Nutzer zu authentifizieren:

    gcloud anthos auth login --cluster CLUSTER_NAME \
      --login-config user-login-config.yaml \
      --kubeconfig AUTH_KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME durch den Namen des Nutzerclusters, zu dem eine Verbindung hergestellt werden soll.
    • AUTH_KUBECONFIG durch die neue zu erstellende kubeconfig-Datei, die die Anmeldedaten für den Zugriff auf Ihren Cluster enthält. Weitere Informationen finden Sie unter Beim Cluster authentifizieren.
  4. Sie sollten eine Einwilligungsseite für die Anmeldeseite erhalten, die im Standardwebbrowser Ihrer lokalen Workstation geöffnet ist. Geben Sie in dieser Anmeldeaufforderung gültige Authentifizierungsinformationen für einen Nutzer an.

    Nachdem Sie den vorherigen Anmeldeschritt erfolgreich abgeschlossen haben, wird in Ihrem aktuellen Verzeichnis eine kubeconfig-Datei generiert.

  5. Listen Sie die Pods in Ihrem Nutzercluster auf, um die neue kubeconfig-Datei zu testen, die Ihre Anmeldedaten enthält:

    kubectl get pods --kubeconfig AUTH_KUBECONFIG
    

    Ersetzen Sie AUTH_KUBECONFIG durch den Pfad zu Ihrer neuen kubeconfig-Datei, die im vorherigen Schritt generiert wurde.

    Die folgende Beispielnachricht zeigt möglicherweise, dass Sie sich erfolgreich authentifizieren können, dem Konto aber keine rollenbasierten Zugriffssteuerungen (Role-Based Access Control, RBACs) zugewiesen sind:

    Error from server (Forbidden): pods is forbidden: User "XXXX" cannot list resource "pods" in API group "" at the cluster scope
    

OIDC-Authentifizierungslogs prüfen

Wenn Sie sich nicht über OIDC authentifizieren können, enthalten die GKE Identity Service-Logs die relevantesten und nützlichsten Informationen zum Debuggen des Problems.

  1. Verwenden Sie kubectl logs, um die GKE Identity Service-Logs auszugeben:

    kubectl --kubeconfig KUBECONFIG \
      -n anthos-identity-service logs \
      deployment/ais --all-containers=true
    

    Ersetzen Sie KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.

  2. Prüfen Sie die Logs auf Fehler, die Ihnen bei der Diagnose von OIDC-Problemen helfen können.

    Beispiel: Die Ressource ClientConfig enthält im Feld issuerURL möglicherweise einen Tippfehler wie htps://accounts.google.com (fehlt in https ein t). Die Logs des GKE-Identitätsdienstes enthalten dann einen Eintrag wie im folgenden Beispiel:

    OIDC (htps://accounts.google.com) - Unable to fetch JWKs needed to validate OIDC ID token.
    
  3. Wenn Sie in den Logs ein Konfigurationsproblem feststellen, konfigurieren Sie OIDC neu und beheben Sie die Konfigurationsprobleme.

  4. Wenn Sie das Problem nicht selbst diagnostizieren und beheben können, wenden Sie sich an den Google Cloud-Support. Der Google Cloud-Support benötigt die GKE Identity Service-Logs und die OIDC-Spezifikation, um OIDC-Probleme zu diagnostizieren und zu beheben.

Häufige OIDC-Probleme

Wenn Sie Probleme mit der OIDC-Authentifizierung haben, lesen Sie die folgenden häufigen Probleme. Folgen Sie der Anleitung, um das Problem zu beheben.

Keine Endpunkte für Dienst „ais“ verfügbar

Wenn Sie die Ressource ClientConfig speichern, wird die folgende Fehlermeldung zurückgegeben:

  Error from server (InternalError): Internal error occurred: failed calling webhook "clientconfigs.validation.com":
  failed to call webhook: Post "https://ais.anthos-identity-service.svc:15000/admission?timeout=10s":
  no endpoints available for service "ais"

Dieser Fehler wird durch den fehlerhaften GKE Identity Service-Endpunkt verursacht. Der GKE Identity Service-Pod kann den Validierungs-Webhook nicht bereitstellen.

  1. Führen Sie den folgenden Befehl aus, um zu prüfen, ob der GKE Identity Service-Pod fehlerhaft ist:

    kubectl get pods -n anthos-identity-service \
      --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.

    Die folgende Beispielausgabe bedeutet, dass Ihr GKE Identity Service-Pod abstürzt:

    NAME                  READY  STATUS            RESTARTS  AGE
    ais-5949d879cd-flv9w  0/1    ImagePullBackOff  0         7m14s
    
  2. Sehen Sie sich die Pod-Ereignisse an, um zu verstehen, warum der Pod ein Problem hat:

    kubectl describe pod -l k8s-app=ais \
      -n anthos-identity-service \
      --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.

    Die folgende Beispielausgabe meldet beim Abrufen des Images einen Berechtigungsfehler:

    Events:
      Type     Reason     Age                     From               Message
      ----     ------     ----                    ----               -------
      Normal   Scheduled  10m                     default-scheduler  Successfully assigned anthos-identity-service/ais-5949d879cd-flv9w to pool-1-76bbbb8798-dknz5
      Normal   Pulling    8m23s (x4 over 10m)     kubelet            Pulling image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00"
      Warning  Failed     8m21s (x4 over 10m)     kubelet            Failed to pull image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00": rpc error: code = Unknown desc = failed to pull and unpack image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00": failed to resolve reference "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00": pulling from host gcr.io failed with status code [manifests hybrid_identity_charon_20220808_2319_RC00]: 401 Unauthorized
      Warning  Failed     8m21s (x4 over 10m)     kubelet            Error: ErrImagePull
      Warning  Failed     8m10s (x6 over 9m59s)   kubelet            Error: ImagePullBackOff
      Normal   BackOff    4m49s (x21 over 9m59s)  kubelet            Back-off pulling image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00"
    
  3. Wenn die Pod-Ereignisse ein Problem melden, fahren Sie in den betroffenen Bereichen mit der Fehlerbehebung fort. Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Google Cloud-Support.

Antwortbyte konnten nicht vom Server gelesen werden

In den Logs des GKE Identity Service können die folgenden Fehler angezeigt werden:

  E0516 07:24:38.314681      65 oidc_client.cc:207] Failed fetching the Discovery URI
  "https://oidc.idp.cloud.example.com/auth/idp/k8sIdp/.well-known/openid-configuration" with error:
  Failed reading response bytes from server.

  E0516 08:24:38.446504      65 oidc_client.cc:223] Failed to fetch the JWKs URI
  "https://oidc.idp.cloud.example.com/auth/idp/k8sIdp/certs" with error:
  Failed reading response bytes from server.

Diese Netzwerkfehler können in den Protokollen auf eine der folgenden Arten angezeigt werden:

  • Wenig im Log angezeigt:Ersatzfehler sind wahrscheinlich nicht das Hauptproblem und können zeitweise Netzwerkprobleme sein.

    Das OIDC-Plug-in des GKE Identity Service hat einen Daemon-Prozess, um die OIDC-Erkennungs-URL regelmäßig alle 5 Sekunden zu synchronisieren. Wenn die Netzwerkverbindung instabil ist, schlägt die ausgehende Anfrage möglicherweise fehl. Ein gelegentlicher Fehler wirkt sich nicht auf die OIDC-Authentifizierung aus. Die im Cache gespeicherten Daten können wiederverwendet werden.

    Wenn freie Fehler in den Logs auftreten, fahren Sie mit zusätzlichen Schritten zur Fehlerbehebung fort.

  • Dauerhaft im Log enthalten oder der GKE Identity Service den bekannten Endpunkt nie erfolgreich erreicht:Diese konstanten Probleme weisen auf ein Verbindungsproblem zwischen dem GKE Identity Service und Ihrem OIDC-Identitätsanbieter hin.

    Die folgenden Schritte zur Fehlerbehebung können bei der Diagnose dieser Verbindungsprobleme helfen:

    1. Achten Sie darauf, dass die ausgehenden Anfragen des GKE Identity Service nicht von einer Firewall blockiert werden.
    2. Prüfen Sie, ob der Server des Identitätsanbieters korrekt ausgeführt wird.
    3. Prüfen Sie, ob die OIDC-Aussteller-URL in der Ressource ClientConfig korrekt konfiguriert ist.
    4. Wenn Sie das Proxyfeld in der Ressource ClientConfig aktiviert haben, prüfen Sie den Status oder das Log Ihres Proxyservers für ausgehenden Traffic.
    5. Testen Sie die Verbindung zwischen Ihrem GKE Identity Service-Pod und dem OIDC-Identitätsanbieterserver.

Sie müssen beim Server angemeldet sein (nicht autorisiert)

Wenn Sie versuchen, sich mit der OIDC-Authentifizierung anzumelden, erhalten Sie möglicherweise die folgende Fehlermeldung:

  You must be logged in to the server (Unauthorized)

Bei diesem Fehler handelt es sich um ein allgemeines Kubernetes-Authentifizierungsproblem, das keine zusätzlichen Informationen liefert. Dieser Fehler weist jedoch auf ein Konfigurationsproblem hin.

Informationen zum Ermitteln des Problems finden Sie in den vorherigen Abschnitten unter OIDC-Spezifikation im Cluster prüfen und ClientConfig-Ressource konfigurieren.

Anfrage für Webhook-Authentifizierung konnte nicht gestellt werden

In den Logs des GKE Identity Service wird möglicherweise der folgende Fehler angezeigt:

  E0810 09:58:02.820573       1 webhook.go:127] Failed to make webhook authenticator request:
  error trying to reach service: net/http: TLS handshake timeout

Dieser Fehler weist darauf hin, dass der API-Server keine Verbindung zum GKE Identity Service-Pod herstellen kann.

  1. Führen Sie den folgenden curl-Befehl aus, um zu prüfen, ob der GKE Identity Service-Endpunkt von außen erreichbar ist:

    curl -k  -s -o /dev/null -w "%{http_code}" -X POST \
      https://APISERVER_HOST/api/v1/namespaces/anthos-identity-service/services/https:ais:https/proxy/authenticate -d '{}'
    

    Ersetzen Sie APISERVER_HOST durch die Adresse Ihres API-Servers.

    Die erwartete Antwort ist der Statuscode HTTP 400. Wenn das Zeitlimit für die Anfrage überschritten wurde, starten Sie den GKE Identity Service-Pod neu. Wenn der Fehler weiterhin auftritt, kann der HTTP-Server des GKE Identity Service nicht gestartet werden. Weitere Unterstützung erhalten Sie vom Google Cloud-Support.

Anmelde-URL nicht gefunden

Das folgende Problem tritt auf, wenn die Google Cloud Console den Identitätsanbieter nicht erreichen kann. Ein Anmeldeversuch wird auf eine Seite mit dem Fehler URL not found weitergeleitet.

Um dieses Problem zu beheben, führen Sie die folgenden Schritte zur Fehlerbehebung durch. Versuchen Sie nach jedem Schritt, sich noch einmal anzumelden:

  1. Wenn der Identitätsanbieter nicht über das öffentliche Internet erreichbar ist, aktivieren Sie den OIDC-HTTP-Proxy, um sich über die Google Cloud Console anzumelden. Bearbeiten Sie die benutzerdefinierte Ressource ClientConfig und legen Sie useHTTPProxy auf true fest:

    kubectl edit clientconfig default -n kube-public --kubeconfig USER_CLUSTER_KUBECONFIG
    

    Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad zur kubeconfig-Datei Ihres Nutzerclusters.

  2. Wenn der HTTP-Proxy aktiviert ist und dieser Fehler weiterhin auftritt, liegt möglicherweise ein Problem beim Start des Proxys vor. Sehen Sie sich die Logs des Proxys an:

    kubectl logs deployment/clientconfig-operator -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
    

    Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad zur kubeconfig-Datei Ihres Nutzerclusters.

    Auch wenn Ihr Identitätsanbieter eine bekannte Zertifizierungsstelle hat, müssen Sie in Ihrer benutzerdefinierten ClientConfig-Ressource einen Wert für oidc.caPath angeben, damit der HTTP-Proxy erfolgreich gestartet werden kann.

  3. Wenn der Autorisierungsserver zur Einwilligung auffordert und Sie die extraparam-prompt=consent-Parameter nicht eingefügt haben, bearbeiten Sie die benutzerdefinierte Ressource ClientConfig und fügen Sie prompt=consent den extraparams-Parametern hinzu:

    kubectl edit clientconfig default -n kube-public --kubeconfig USER_CLUSTER_KUBECONFIG
    

    Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad zur kubeconfig-Datei Ihres Nutzerclusters.

  4. Wenn die Konfigurationseinstellungen des Speicherdienstes geändert werden, müssen Sie sich möglicherweise explizit von vorhandenen Sitzungen abmelden. Rufen Sie in der Google Cloud Console die Seite mit den Clusterdetails auf und wählen Sie Abmelden aus.

Probleme mit LDAP beheben

Wenn Sie Probleme mit der LDAP-Authentifizierung haben, prüfen Sie, ob Sie Ihre Umgebung eingerichtet haben. Folgen Sie dazu einem der entsprechenden Konfigurationsdokumente:

Außerdem müssen Sie das LDAP-Dienstkonto-Secret ausfüllen und die Ressource ClientConfig so konfiguriert haben, dass die LDAP-Authentifizierung aktiviert ist.

Informationen zum Aktivieren und Überprüfen von Identitätslogs und zum Testen der Konnektivität finden Sie in der Anleitung zur Fehlerbehebung beim Identitätsanbieter für den GKE-Identitätsdienst. Nachdem Sie bestätigt haben, dass der GKE Identity Service wie erwartet funktioniert, oder Sie ein Problem identifiziert haben, lesen Sie die folgenden Informationen zur LDAP-Fehlerbehebung.

Überprüfen, ob die LDAP-Authentifizierung aktiviert ist

Prüfen Sie vor dem Testen der LDAP-Authentifizierung, ob die LDAP-Authentifizierung in Ihrem Cluster aktiviert ist.

  1. Sehen Sie sich die Logs des GKE Identity Service an:

    kubectl logs -l k8s-app=ais -n anthos-identity-service
    

    Die folgende Beispielausgabe zeigt, dass die LDAP-Authentifizierung korrekt aktiviert ist:

    ...
    I1012 00:14:11.282107      34 plugin_list.h:139] LDAP[0] started.
    ...
    

    Wenn die LDAP-Authentifizierung nicht korrekt aktiviert ist, werden Fehler ähnlich dem folgenden Beispiel angezeigt:

    Failed to start the LDAP_AUTHENTICATION[0] authentication method with error:
    

    Überprüfen Sie die gemeldeten Fehler und versuchen Sie, sie zu beheben.

LDAP-Authentifizierung testen

Verwenden Sie zur Verwendung der LDAP-Funktion eine Workstation, auf der die Benutzeroberfläche und der Browser aktiviert sind. Sie können diese Schritte nicht in einer textbasierten SSH-Sitzung ausführen. Führen Sie die folgenden Schritte aus, um zu testen, ob die LDAP-Authentifizierung in Ihrem Cluster ordnungsgemäß funktioniert:

  1. Laden Sie die Google Cloud CLI herunter.
  2. Führen Sie den folgenden Befehl gcloud anthos create-login-config aus, um die Anmeldekonfigurationsdatei zu generieren:

    gcloud anthos create-login-config \
      --output user-login-config.yaml \
      --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.

  3. Führen Sie den folgenden Befehl aus, um den Nutzer zu authentifizieren:

    gcloud anthos auth login --cluster CLUSTER_NAME \
      --login-config user-login-config.yaml \
      --kubeconfig AUTH_KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME durch den Namen des Nutzerclusters, zu dem eine Verbindung hergestellt werden soll.
    • AUTH_KUBECONFIG durch die neue kubeconfig-Datei, die die Anmeldedaten für den Zugriff auf Ihren Cluster enthält. Weitere Informationen finden Sie unter Beim Cluster authentifizieren.
  4. Sie sollten eine Einwilligungsseite für die Anmeldeseite erhalten, die im Standardwebbrowser Ihrer lokalen Workstation geöffnet ist. Geben Sie in dieser Anmeldeaufforderung gültige Authentifizierungsinformationen für einen Nutzer an.

    Nachdem Sie den vorherigen Anmeldeschritt erfolgreich abgeschlossen haben, wird in Ihrem aktuellen Verzeichnis eine kubeconfig-Datei generiert.

  5. Listen Sie die Pods in Ihrem Nutzercluster auf, um die neue kubeconfig-Datei zu testen, die Ihre Anmeldedaten enthält:

    kubectl get pods --kubeconfig AUTH_KUBECONFIG
    

    Ersetzen Sie AUTH_KUBECONFIG durch den Pfad zu Ihrer kubeconfig-Datei des Nutzerclusters, die im vorherigen Schritt generiert wurde.

    Error from server (Forbidden): pods is forbidden: User "XXXX" cannot list resource "pods" in API group "" at the cluster scope
    

Häufige LDAP-Probleme

Sehen Sie sich die folgenden häufigen Probleme an, wenn Sie Probleme mit der LDAP-Authentifizierung haben. Folgen Sie der Anleitung, um das Problem zu beheben.

Nutzer können sich in ihrem CN nicht mit Kommas authentifizieren

Wenn Sie LDAP verwenden, können Probleme auftreten, bei denen sich Nutzer nicht authentifizieren können, wenn ihr CN ein Komma wie CN="a,b" enthält. Wenn Sie das Debugging-Log für den GKE Identity Service aktivieren, wird die folgende Fehlermeldung gemeldet:

  I0207 20:41:32.670377 30 authentication_plugin.cc:977] Unable to query groups from the LDAP server directory.example.com:636, using the LDAP service account
  'CN=svc.anthos_dev,OU=ServiceAccount,DC=directory,DC=example,DC=com'.
  Encountered the following error: Empty entries.

Dieses Problem tritt auf, weil das LDAP-Plug-in des GKE Identity Service das Komma doppelt maskiert. Dieses Problem tritt nur in den Versionen Google Distributed Cloud 1.13 und früher auf.

Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

  1. Führen Sie ein Upgrade Ihres Clusters auf Google Distributed Cloud 1.13 oder höher durch.
  2. Wähle ein anderes identifierAttribute wie sAMAccountName aus, statt das CN zu verwenden.
  3. Entfernen Sie die Kommas aus dem CN in Ihrem LDAP-Verzeichnis.

Authentifizierungsfehler mit Google Cloud CLI 1.4.2

Mit der Google Cloud CLI anthos-auth 1.4.2 wird möglicherweise die folgende Fehlermeldung angezeigt, wenn Sie den Befehl gcloud anthos auth login ausführen:

  Error: LDAP login failed: could not obtain an STS token: Post "https://127.0.0.1:15001/sts/v1beta/token":
  failed to obtain an endpoint for deployment anthos-identity-service/ais: Unauthorized
  ERROR: Configuring Anthos authentication failed

Im Log des GKE-Identitätsdienstes wird außerdem der folgende Fehler angezeigt:

  I0728 12:43:01.980012      26 authentication_plugin.cc:79] Stopping STS   authentication, unable to decrypt the STS token:
  Decryption failed, no keys in the current key set could decrypt the payload.

So beheben Sie diesen Fehler:

  1. Prüfen Sie, ob Sie die anthos-auth-Version 1.4.2 der Google Cloud CLI verwenden:

    gcloud anthos auth version
    

    Die folgende Beispielausgabe zeigt, dass die Version 1.4.2 ist:

    Current Version: v1.4.2
    
  2. Wenn Sie die anthos-auth-Version 1.4.2 der Google Cloud CLI ausführen, führen Sie ein Upgrade auf Version 1.4.3 oder höher durch.

Allgemeine Probleme

In diesem Abschnitt werden häufige Authentifizierungsprobleme und ihre Behebung beschrieben.

Zugriff auf Administratorworkstation aufgrund des SSH-Schlüsselfehlers permission denied verloren

Der folgende Fehler tritt auf, wenn Sie versuchen, eine Verbindung zur Administratorworkstation herzustellen und eine "Permission denied"-Nachricht ähnlich dem folgenden Beispiel erhalten:

Authorized users only. All activity may be monitored and reported.
TARGET_MACHINE: Permission denied (publickey).

Dieser Fehler tritt auf, wenn Sie beim Herstellen einer Verbindung zur Administratorworkstation über SSH einen falschen privaten Schlüssel oder keinen Schlüssel verwenden.

Suchen und verwenden Sie den richtigen SSH-Schlüssel, um dieses Problem zu beheben. Wenn Sie den richtigen SSH-Schlüssel nicht finden, generieren Sie mit den folgenden Schritten ein neues SSH-Schlüsselpaar für die Administratorworkstation:

  1. Erstellen Sie eine temporäre VM für den Notfall. Diese Rettungs-VM muss mit demselben Netzwerk und demselben Datenspeicher wie die aktuelle Administrator-Workstation-VM verbunden sein.

  2. Schalten Sie die Administratorworkstation-VM und die Rettungs-VM aus.

  3. Hängen Sie das Datenlaufwerk der Administrator-Workstation-VM an die Rettungs-VM an. Das Datenlaufwerk ist in der Regel 512 MB groß, es sei denn, Sie haben in der Konfigurationsdatei für die Administratorworkstation eine andere Laufwerkgröße angegeben, die sich vom Bootlaufwerk unterscheidet.

  4. Schalten Sie die Rettungs-VM ein.

  5. Stellen Sie über SSH eine Verbindung zur Rettungs-VM her.

  6. Generieren Sie auf Ihrem lokalen Computer ein neues SSH-Schlüsselpaar.

  7. Kopieren Sie auf dem lokalen Computer den neuen öffentlichen SSH-Schlüssel mit dem Befehl ssh-copy-id in die Rettungs-VM:

    ssh-copy-id -i ~/.ssh/NEW_SSH_KEY ubuntu@RESCUE_VM
    

    Ersetzen Sie Folgendes:

    • NEW_SSH_KEY durch den Namen des neuen SSH-Schlüssels, den Sie im vorherigen Schritt erstellt haben.
    • RESCUE_VM durch die IP-Adresse oder den FQDN Ihrer Rettungs-VM.
  8. Stellen Sie auf der Rettungs-VM das Datenlaufwerk auf der Rettungs-VM bereit:

    sudo mkdir -p /mnt/ext-disk
    sudo mount DEVICE /mnt/ext-disk
    

    Ersetzen Sie DEVICE durch die eindeutige Kennzeichnung Ihres Laufwerks, z. B. /dev/sdb1.

  9. Kopieren Sie auf der Rettungs-VM den neuen öffentlichen SSH-Schlüssel von der VM Ihrer Administrator-Workstation in die Datei authorized_keys auf dem bereitgestellten Datenlaufwerk.

    Sehen Sie sich den Inhalt der Datei authorized_keys auf der Rettungs-VM an, die den neuen öffentlichen SSH-Schlüssel enthält, den Sie in einem vorherigen Schritt mit dem Befehl ssh-copy-id kopiert haben:

    ls ~/.ssh/authorized_keys
    

    Kopieren Sie den letzten öffentlichen SSH-Schlüsseleintrag aus der Datei authorized_keys und schließen Sie dann die Datei.

  10. Bearbeiten Sie die Datei authorized_keys auf dem bereitgestellten Datenlaufwerk von der VM Ihrer Administratorworkstation aus:

    vi /mnt/ext-disk/.ssh/authorized_keys
    

    Fügen Sie den Inhalt des öffentlichen SSH-Schlüssels aus der Datei authorized_keys der Rettungs-VM ein.

  11. Speichern und schließen Sie die Datei authorized_keys auf dem bereitgestellten Datenlaufwerk von der VM Ihrer Administratorworkstation aus.

  12. Prüfen Sie, ob auf die Dateien in /mnt/ext-disk/.ssh/ die richtigen Berechtigungen angewendet werden:

    chown -R ubuntu /mnt/ext-disk/.ssh/*
    chmod -R 600 /mnt/ext-disk/.ssh/*
    
  13. Beenden Sie die SSH-Verbindung zur Rettungs-VM.

  14. Fahren Sie die Rettungs-VM herunter.

  15. Trennen Sie das Datenlaufwerk von der Rettungs-VM und hängen Sie das Laufwerk wieder an die VM der Administratorworkstation an.

  16. Schalten Sie die Administrator-Workstation ein.

  17. Wenn die VM erfolgreich ausgeführt wird, stellen Sie mit SSH und dem neuen SSH-Schlüsselpaar eine Verbindung zur Administrator-Workstation her.

    ssh -i ~/.ssh/NEW_SSH_KEY ubuntu@ADMIN_VM
    

    Ersetzen Sie Folgendes:

    • NEW_SSH_KEY durch den Namen des neuen SSH-Schlüssels, den Sie in einem vorherigen Schritt erstellt und auf die VM der Administratorworkstation kopiert haben.
    • RESCUE_VM durch die IP-Adresse oder den FQDN Ihrer Administrator-Workstation-VM.

    Prüfen Sie, ob Sie eine Verbindung über SSH herstellen können.

  18. Löschen Sie die Rettungs-VM.

Nächste Schritte

Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.