Risolvere i problemi di autenticazione di Google Distributed Cloud

Questo documento aiuta a risolvere i problemi di autenticazione in Google Distributed Cloud. Vengono fornite informazioni e indicazioni generali sulla risoluzione dei problemi, nonché informazioni specifiche per OpenID Connect (OIDC) e Lightweight Directory Access Protocol (LDAP).

L'autenticazione OIDC e LDAP utilizza GKE Identity Service. Prima di poter utilizzare GKE Identity Service con Google Distributed Cloud, devi configurare un provider di identità. Se non hai configurato un provider di identità per GKE Identity Service, segui le istruzioni per uno dei seguenti provider più comuni:

Consulta la guida alla risoluzione dei problemi relativi all'identity provider di GKE Identity Service per informazioni su come attivare e esaminare i log di identità e testare la connettività.

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.

Risoluzione dei problemi generali

I seguenti suggerimenti per la risoluzione dei problemi possono essere utili per problemi generali di autenticazione e autorizzazione con Google Distributed Cloud. Se questi problemi non si applicano o se hai problemi con OIDC o LDAP, vai alla sezione sulla risoluzione dei problemi di GKE Identity Service.

Mantenere aggiornato gcloud anthos auth

Puoi evitare molti problemi comuni verificando che i componenti dell'installazione di gcloud anthos auth siano aggiornati.

Esistono due elementi che devono essere verificati. Il comando gcloud anthos auth ha una logica nel componente principale di Google Cloud CLI e un componente anthos-auth impacchettato separatamente.

  1. Per aggiornare Google Cloud CLI:

    gcloud components update
    
  2. Per aggiornare il componente anthos-auth:

    gcloud components install anthos-auth
    

Configurazione del provider non valida

Se la configurazione del provider di identità non è valida, dopo aver fatto clic su ACCEDI verrà visualizzata una schermata di errore del provider di identità. Segui le istruzioni specifiche del provider per configurare correttamente il provider o il tuo cluster.

Configurazione non valida

Se la console Google Cloud non riesce a leggere la configurazione OIDC dal tuo cluster, il pulsante ACCEDI è disattivato. Per la risoluzione dei problemi relativi alla configurazione OIDC del cluster, consulta la sezione Risoluzione dei problemi relativi a OIDC di questo documento.

Autorizzazioni non valide

Se completi il flusso di autenticazione, ma non vedi ancora i dettagli del cluster, assicurati di aver concesso le autorizzazioni RBAC corrette all'account utilizzato con OIDC. Potrebbe trattarsi di un account diverso da quello che utilizzi per accedere alla console Google Cloud.

Token di aggiornamento mancante

Il seguente problema si verifica quando il server di autorizzazione richiede il consenso, ma il parametro di autenticazione richiesto non è stato fornito.

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

Per risolvere il problema, nella risorsa ClientConfig aggiungi prompt=consent al campo authentication.oidc.extraParams. Quindi, rigenera il file di autenticazione del cliente.

Token di aggiornamento scaduto

Il seguente problema si verifica quando il token di aggiornamento nel file kubeconfig è scaduto:

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

Per risolvere il problema, esegui di nuovo il comando gcloud anthos auth login.

gcloud anthos auth login non riesce con proxyconnect tcp

Questo problema si verifica quando si verifica un errore nelle configurazioni variabile di ambiente https_proxy o HTTPS_PROXY. Se nelle variabili di ambiente è specificato https://, le librerie client HTTP di GoLang potrebbero non riuscire se il proxy è configurato per gestire le connessioni HTTPS utilizzando altri protocolli come SOCK5.

Potrebbe essere restituito il seguente messaggio di errore di esempio:

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

Per risolvere il problema, modifica le variabili di ambiente https_proxy e HTTPS_PROXY per omettere https:// prefix. Su Windows, modifica le variabili di ambiente di sistema. Ad esempio, modifica il valore della variabile di ambiente https_proxy da https://webproxy.example.com:8000 a webproxy.example.com:8000.

L'accesso al cluster non riesce quando si utilizza il file kubeconfig generato da gcloud anthos auth login

Questo problema si verifica quando il server dell'API Kubernetes non è in grado di autorizzare l'utente. Questo può accadere se i gruppi RBAC appropriati non sono presenti o sono errati oppure se nella configurazione OIDC del cluster è presente un errore. Potrebbe essere visualizzato il seguente errore di esempio:

Unauthorized

Per risolvere il problema, svolgi i seguenti passaggi:

  1. Nel file kubeconfig generato da gcloud anthos auth login, copia il valore di id-token.

    kind: Config
    ...
    users:
    - name: ...
      user:
        auth-provider:
          config:
            id-token: xxxxyyyy
    
  2. Installa jwt-cli ed esegui:

    jwt ID_TOKEN
    
  3. Verifica la configurazione OIDC.

    La risorsa ClientConfig ha i campi group e username. Questi campi vengono utilizzati per impostare i flag --oidc-group-claim e --oidc-username-claim nel server API Kubernetes. Quando il token viene presentato al server API, lo inoltra a GKE Identity Service, che restituisce group-claim e username-claim estratti al server API. Il server dell'API utilizza la risposta per verificare che il gruppo o l'utente corrispondente abbia le autorizzazioni corrette.

    Verifica che i claim impostati per group e user nella risorsa ClientConfig siano presenti nel token ID.

  4. Controlla i sistemi RBAC applicati.

    Verifica che esista un RBAC con le autorizzazioni corrette per l'utente specificato da username-claim o per uno dei gruppi elencati group-claim del passaggio precedente. Al nome dell'utente o del gruppo nel RBAC deve essere preposto usernameprefix o groupprefix specificato nella risorsa ClientConfig.

    Se usernameprefix è vuoto e username è un valore diverso da email, il prefisso predefinito è issuerurl#. Per disattivare i prefissi dei nomi utente, imposta usernameprefix su -.

    Per ulteriori informazioni sui prefissi di utenti e gruppi, consulta Autenticazione con OIDC.

    Risorsa ClientConfig:

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

    Token ID:

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

    Le seguenti associazioni RBAC concedono a questo gruppo e utente il ruolo del cluster pod-reader. Nota la barra singola nel campo del nome anziché una barra doppia:

    Gruppo ClusterRoleBinding:

    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
    

    ClusterRoleBinding utente:

    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. Controlla i log del server dell'API Kubernetes.

    Se il plug-in OIDC configurato nel server API Kubernetes non si avvia correttamente, il server API restituisce un errore Unauthorized quando viene presentato il token ID. Per verificare se si sono verificati problemi con il plug-in OIDC nel server API, esegui:

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

    Sostituisci quanto segue:

    • USER_CLUSTER_NAME: il nome del cluster di utenti per cui visualizzare i log.
    • ADMIN_CLUSTER_KUBECONFIG: il file kubeconfig del cluster di amministrazione.

gkectl create-login-config non riesce a recuperare clientconfig

Questo problema si verifica quando il file kubeconfig passato a gkectl create-login-config non è per un cluster utente o la risorsa ClientConfig non è stata visualizzata durante la creazione del cluster.

Error getting clientconfig using KUBECONFIG

Per risolvere il problema, assicurati di avere il file kubeconfig corretto per il tuo cluster di utenti. Poi controlla se la risorsa ClientConfig è nel cluster:

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

Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di utenti.

gkectl create-login-config non riesce a causa di un nome di cluster duplicato

Questo problema si verifica se provi a scrivere dati di configurazione di accesso che contengono un nome cluster esistente nel file di destinazione. Ogni file di configurazione dell'accesso deve contenere nomi di cluster univoci.

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

Per risolvere il problema, utilizza il flag --output per specificare un nuovo file di destinazione.

Se non fornisci --output, questi dati di configurazione dell'accesso vengono scritti in un file denominato kubectl-anthos-config.yaml nella directory corrente.

Risolvere i problemi relativi a OIDC

Quando l'autenticazione OIDC non funziona per Google Distributed Cloud, in genere la specifica OIDC nella risorsa ClientConfig è stata configurata in modo errato. La risorsa ClientConfig fornisce istruzioni per esaminare i log e la specifica OIDC per aiutarti a identificare la causa di un problema OIDC.

Consulta la guida alla risoluzione dei problemi relativi all'identity provider di GKE Identity Service per informazioni su come attivare e esaminare i log di identità e testare la connettività. Dopo aver verificato che il servizio di identità GKE funzioni come previsto o se identifichi un problema, consulta le seguenti informazioni per la risoluzione dei problemi relativi a OIDC.

Controlla la specifica OIDC nel cluster

Le informazioni OIDC per il cluster sono specificate nella risorsa ClientConfig nello spazio dei nomi kube-public.

  1. Utilizza kubectl get per stampare la risorsa OIDC per il tuo cluster utente:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster utente.

  2. Controlla i valori dei campi per verificare che la specifica sia configurata correttamente per il tuo provider OIDC.

  3. Se identifichi un problema di configurazione nella specifica, riconfigura OIDC.

  4. Se non riesci a diagnosticare e risolvere il problema autonomamente, contatta Google Cloud l'assistenza.

    Google Cloud L'assistenza ha bisogno dei log di GKE Identity Service e della specifica OIDC per diagnosticare e risolvere i problemi relativi a OIDC.

Verificare che l'autenticazione OIDC sia abilitata

Prima di testare l'autenticazione OIDC, verifica che sia abilitata nel tuo cluster.

  1. Esamina i log di GKE Identity Service:

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

    L'esempio di output seguente mostra che l'autenticazione OIDC è attivata correttamente:

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

    Se l'autenticazione OIDC non è attivata correttamente, vengono visualizzati errori simili al seguente esempio:

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

    Esamina gli errori specifici segnalati e prova a correggerli.

Testa l'autenticazione OIDC

Per utilizzare la funzionalità OIDC, utilizza una workstation con l'interfaccia utente e il browser abilitati. Non puoi eseguire questi passaggi da una sessione SSH basata su testo. Per verificare che OIDC funzioni correttamente nel cluster, completa i seguenti passaggi:

  1. Scarica Google Cloud CLI.
  2. Per generare il file di configurazione di accesso, esegui il seguente gcloud anthos create-login-config comando:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster utente.

  3. Per autenticare l'utente, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • CLUSTER_NAME con il nome del cluster utente a cui collegarti.
    • AUTH_KUBECONFIG con il nuovo file kubeconfig da creare che include le credenziali per accedere al cluster. Per ulteriori informazioni, consulta Eseguire l'autenticazione nel cluster.
  4. Dovresti visualizzare una pagina di consenso per l'accesso nel browser web predefinito della tua workstation locale. Fornisci informazioni di autenticazione valide per un utente in questa richiesta di accesso.

    Dopo aver completato correttamente il passaggio di accesso precedente, viene generato un file kubeconfig nella directory corrente.

  5. Per testare il nuovo file kubeconfig che include le tue credenziali, elenca i pod nel cluster di utenti:

    kubectl get pods --kubeconfig AUTH_KUBECONFIG
    

    Sostituisci AUTH_KUBECONFIG con il percorso del nuovo file kubeconfig generato nel passaggio precedente.

    Potrebbe essere restituito il seguente messaggio di esempio che indica che puoi autenticarti correttamente, ma non sono assegnati controlli dell'accesso basati sui ruoli (RBAC) all'account:

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

Esamina i log di autenticazione OIDC

Se non riesci ad autenticarti con OIDC, i log del servizio GKE Identity forniscono le informazioni più pertinenti e utili per il debug del problema.

  1. Utilizza kubectl logs per stampare i log di GKE Identity Service:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster utente.

  2. Esamina i log per rilevare errori che possono aiutarti a diagnosticare i problemi relativi a OIDC.

    Ad esempio, la risorsa ClientConfig potrebbe contenere un errore ortografico nel campo issuerURL, ad esempio htps://accounts.google.com (manca un t in https). I log di GKE Identity Service conterrebbero una voce come nell'esempio seguente:

    OIDC (htps://accounts.google.com) - Unable to fetch JWKs needed to validate OIDC ID token.
    
  3. Se identifichi un problema di configurazione nei log, riconfigura OIDC e correggi i problemi di configurazione.

  4. Se non riesci a diagnosticare e risolvere il problema autonomamente, contatta Google Cloud l'assistenza.

    L'Google Cloud assistenza richiede i log di GKE Identity Service e la specifica OIDC per diagnosticare e risolvere i problemi OIDC.

Problemi comuni relativi a OIDC

Se riscontri problemi con l'autenticazione OIDC, esamina i seguenti problemi comuni. Segui le indicazioni per risolvere il problema.

Nessun endpoint disponibile per il servizio "ais"

Quando salvi la risorsa ClientConfig, viene visualizzato il seguente messaggio di errore:

  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"

Questo errore è causato dall'endpoint GKE Identity Service non funzionante. Il pod GKE Identity Service non è in grado di pubblicare il webhook di convalida.

  1. Per verificare che il pod Identity Service di GKE non sia in stato di esecuzione, esegui il seguente comando:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster utente.

    L'esempio di output seguente indica che il pod del servizio di identità GKE sta subendo un arresto anomalo:

    NAME                  READY  STATUS            RESTARTS  AGE
    ais-5949d879cd-flv9w  0/1    ImagePullBackOff  0         7m14s
    
  2. Per capire perché il pod ha un problema, controlla gli eventi del pod:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster utente.

    L'esempio di output riportato di seguito segnala un errore di autorizzazione durante il recupero dell'immagine:

    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. Se gli eventi del pod segnalano un problema, continua la risoluzione dei problemi nelle aree interessate. Se hai bisogno di ulteriore assistenza, contatta Google Cloud l'assistenza.

Impossibile leggere i byte di risposta dal server

Nei log di GKE Identity Service potresti visualizzare i seguenti errori:

  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.

Questi errori di rete potrebbero essere visualizzati nei log in uno dei seguenti modi:

  • Appaiono sporadicamente nel log: è probabile che gli errori di riserva non siano il problema principale e potrebbero essere problemi di rete intermittenti.

    Il plug-in OIDC di GKE Identity Service ha un processo di daemon per sincronizzare periodicamente l'URL di rilevamento OIDC ogni 5 secondi. Se la connessione di rete è instabile, questa richiesta di uscita potrebbe non riuscire. I fallimenti occasionali non influiscono sull'autenticazione OIDC. I dati memorizzati nella cache esistenti possono essere riutilizzati.

    Se nei log vengono rilevati altri errori, continua con i passaggi di risoluzione dei problemi aggiuntivi.

  • Appaiono costantemente nel log o GKE Identity Service non raggiunge mai correttamente l'endpoint noto: questi problemi costanti indicano un problema di connettività tra GKE Identity Service e il tuo fornitore di servizi di identità OIDC.

    I seguenti passaggi per la risoluzione dei problemi possono aiutarti a diagnosticare questi problemi di connettività:

    1. Assicurati che un firewall non stia bloccando le richieste in uscita da GKE Identity Service.
    2. Verifica che il server del provider di identità sia in esecuzione correttamente.
    3. Verifica che l'URL dell'emittente OIDC nella risorsa ClientConfig sia configurato correttamente.
    4. Se hai attivato il campo proxy nella risorsa ClientConfig, controlla lo stato o il log del server proxy in uscita.
    5. Verifica la connettività tra il pod Identity Service di GKE e il server del provider di identità OIDC.

Devi aver eseguito l'accesso al server (non autorizzato)

Quando provi ad accedere utilizzando l'autenticazione OIDC, potresti ricevere il seguente messaggio di errore:

  You must be logged in to the server (Unauthorized)

Questo errore è un problema generale di autenticazione di Kubernetes che non fornisce informazioni aggiuntive. Tuttavia, questo errore indica un problema di configurazione.

Per determinare il problema, consulta le sezioni precedenti per controllare la specifica OIDC nel cluster e configurare la risorsa ClientConfig.

Impossibile effettuare la richiesta di authenticator webhook

Nei log di GKE Identity Service potresti visualizzare il seguente errore:

  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

Questo errore indica che il server API non riesce a stabilire la connessione con il pod del servizio di identità GKE.

  1. Per verificare se l'endpoint di Identity Service for GKE è raggiungibile dall'esterno, esegui il seguente comando curl:

    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 '{}'
    

    Sostituisci APISERVER_HOST con l'indirizzo del tuo server API.

    La risposta prevista è un codice di stato HTTP 400. Se la richiesta ha superato il tempo di attesa, riavvia il pod GKE Identity Service. Se l'errore persiste, significa che il server HTTP di GKE Identity Service non riesce ad avviarsi. Per ulteriore assistenza, contatta l'assistenza. Google Cloud

URL di accesso non trovato

Il seguente problema si verifica quando la console Google Cloud non riesce a raggiungere il provider di identity. Un tentativo di accesso viene reindirizzato a una pagina con un errore URL not found.

Per risolvere il problema, consulta i seguenti passaggi per la risoluzione dei problemi. Dopo ogni passaggio, prova a eseguire di nuovo l'accesso:

  1. Se il provider di identità non è raggiungibile tramite la rete internet pubblica, abilita il proxy HTTP OIDC per accedere utilizzando la console Google Cloud. Modifica la risorsa personalizzata ClientConfig e imposta useHTTPProxy su true:

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

    Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.

  2. Se il proxy HTTP è abilitato e continui a riscontrare questo errore, potrebbe esserci un problema con l'avvio del proxy. Visualizza i log del proxy:

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

    Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.

    Anche se il tuo provider di identità dispone di una CA ben nota, devi fornire un valore per oidc.caPath nella risorsa personalizzata ClientConfig affinché il proxy HTTP possa avviarsi correttamente.

  3. Se il server di autorizzazione richiede il consenso e non hai incluso i parametri extraparam prompt=consent, modifica la risorsa personalizzata ClientConfig e aggiungi prompt=consent ai parametri extraparams:

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

    Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.

  4. Se le impostazioni di configurazione vengono modificate nel servizio di archiviazione, potresti dover uscire esplicitamente dalle sessioni esistenti. Nella console Google Cloud, vai alla pagina dei dettagli del cluster e seleziona Uscire.

Risolvere i problemi relativi a LDAP

Se riscontri problemi con l'autenticazione LDAP, assicurati di aver configurato il tuo ambiente seguendo uno dei documenti di configurazione appropriati:

Inoltre, devi assicurarti di compilare il segreto dell'account di servizio LDAP e di aver configurato la risorsa ClientConfig per attivare l'autenticazione LDAP.

Consulta la guida alla risoluzione dei problemi relativi all'identity provider di GKE Identity Service per informazioni su come attivare e esaminare i log di identità e testare la connettività. Dopo aver verificato che il servizio di identità GKE funzioni come previsto o se hai individuato un problema, consulta le seguenti informazioni sulla risoluzione dei problemi relativi a LDAP.

Verificare che l'autenticazione LDAP sia abilitata

Prima di testare l'autenticazione LDAP, verifica che sia abilitata nel cluster.

  1. Esamina i log di GKE Identity Service:

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

    L'esempio di output seguente mostra che l'autenticazione LDAP è attivata correttamente:

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

    Se l'autenticazione LDAP non è attivata correttamente, vengono visualizzati errori simili all'esempio riportato di seguito:

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

    Esamina gli errori specifici segnalati e prova a correggerli.

Prova l'autenticazione LDAP

Per utilizzare la funzionalità LDAP, utilizza una workstation con l'interfaccia utente e il browser abilitati. Non puoi eseguire questi passaggi da una sessione SSH basata su testo. Per verificare che l'autenticazione LDAP funzioni correttamente nel cluster, completa i seguenti passaggi:

  1. Scarica Google Cloud CLI.
  2. Per generare il file di configurazione di accesso, esegui il seguente comando gcloud anthos create-login-config:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster utente.

  3. Per autenticare l'utente, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • CLUSTER_NAME con il nome del cluster utente a cui collegarti.
    • AUTH_KUBECONFIG con il nuovo file kubeconfig da creare che include le credenziali per accedere al cluster. Per ulteriori informazioni, consulta Eseguire l'autenticazione nel cluster.
  4. Dovresti visualizzare una pagina di consenso per l'accesso nel browser web predefinito della tua workstation locale. Fornisci informazioni di autenticazione valide per un utente in questa richiesta di accesso.

    Dopo aver completato correttamente il passaggio di accesso precedente, viene generato un file kubeconfig nella directory corrente.

  5. Per testare il nuovo file kubeconfig che include le tue credenziali, elenca i pod nel cluster di utenti:

    kubectl get pods --kubeconfig AUTH_KUBECONFIG
    

    Sostituisci AUTH_KUBECONFIG con il percorso del file kubeconfig del cluster dell'utente generato nel passaggio precedente.

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

Problemi comuni relativi a LDAP

Se riscontri problemi con l'autenticazione LDAP, esamina i seguenti problemi comuni. Segui le indicazioni per risolvere il problema.

Gli utenti non riescono ad autenticarsi se il CN contiene virgole

Quando utilizzi LDAP, potresti riscontrare problemi di autenticazione degli utenti se il loro CN contiene una virgola, ad esempio CN="a,b". Se attivi il log di debug per GKE Identity Service, viene visualizzato il seguente messaggio di errore:

  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.

Questo problema si verifica perché il plug-in LDAP del servizio di identità GKE esegue il doppio sfuggimento della virgola. Questo problema si verifica solo nelle versioni Google Distributed Cloud 1.13 e precedenti.

Per risolvere il problema, completa uno dei seguenti passaggi:

  1. Esegui l'upgrade del cluster a Google Distributed Cloud 1.13 o versioni successive.
  2. Scegli un altro identifierAttribute, ad esempio sAMAccountName, anziché utilizzare il CN.
  3. Rimuovi le virgole all'interno del CN nella directory LDAP.

Errore di autenticazione con Google Cloud CLI 1.4.2

Con Google Cloud CLI anthos-auth 1.4.2, potresti visualizzare il seguente messaggio di errore quando esegui il comando gcloud anthos auth login:

  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

Nel log di GKE Identity Service viene visualizzato anche il seguente errore:

  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.

Per risolvere il problema, segui questi passaggi:

  1. Verifica di utilizzare la versione 1.4.2 di Google Cloud CLI anthos-auth:

    gcloud anthos auth version
    

    L'esempio di output seguente mostra che la versione è 1.4.2:

    Current Version: v1.4.2
    
  2. Se utilizzi Google Cloud CLI anthos-auth versione 1.4.2, esegui l'upgrade alla versione 1.4.3 o successiva.

Problemi comuni

Questa sezione illustra i problemi di autenticazione più comuni e come risolverli.

Accesso alla workstation di amministrazione non disponibile a causa di un errore della chiave SSH permission denied

Quando provi a connetterti alla tua workstation di amministrazione, viene visualizzato il seguente errore e ricevi un messaggio "Permission denied" simile all'esempio seguente:

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

Questo errore si verifica a causa dell'utilizzo di una chiave privata errata o nessuna chiave quando ti connetti alla workstation di amministrazione tramite SSH.

Per risolvere il problema, trova e utilizza la chiave SSH corretta. Se non riesci a trovare la chiave SSH corretta, genera una nuova coppia di chiavi SSH per la workstation di amministrazione seguendo i passaggi che seguono:

  1. Crea una VM di recupero temporanea. Questa VM di recupero deve connettersi alla stessa rete e allo stesso datastore della VM della stazione di lavoro di amministrazione attuale.

  2. Spegni la VM workstation di amministrazione e la VM di recupero.

  3. Collega il disco di dati della VM workstation di amministrazione alla VM di recupero. Il disco di dati ha in genere una dimensione di 512 MB, a meno che non sia stata specificata una dimensione diversa nel file di configurazione della workstation amministrativa, distinto dal disco di avvio.

  4. Accendi la VM di recupero.

  5. Connettiti alla VM di recupero tramite SSH.

  6. Sul computer locale, genera una nuova coppia di chiavi SSH.

  7. Sul computer locale, copia la nuova chiave pubblica SSH nella VM di recupero utilizzando il comando ssh-copy-id:

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

    Sostituisci quanto segue:

    • NEW_SSH_KEY con il nome della nuova chiave SSH che hai creato nel passaggio precedente.
    • RESCUE_VM con l'indirizzo IP o il FQDN della VM di recupero.
  8. Monta il disco di dati sulla VM di recupero:

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

    Sostituisci DEVICE con l'identificatore univoco del tuo disco, ad esempio /dev/sdb1.

  9. Nella VM di recupero, copia la nuova chiave pubblica SSH nel file authorized_keys sul disco di dati montato dalla VM della workstation di amministrazione.

    Visualizza i contenuti del file authorized_keys sulla VM di ripristino, che include la nuova chiave pubblica SSH copiata utilizzando il comando ssh-copy-id in un passaggio precedente:

    ls ~/.ssh/authorized_keys
    

    Copia l'ultima voce della chiave pubblica SSH dal file authorized_keys, quindi chiuso il file.

  10. Modifica il file authorized_keys sul disco di dati montato dalla VM della workstation di amministrazione:

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

    Incolla i contenuti della chiave pubblica SSH dal file authorized_keys della VM di recupero.

  11. Salva e chiudi il file authorized_keys sul disco di dati montato dalla VM della stazione di lavoro dell'amministratore.

  12. Verifica che ai file in /mnt/ext-disk/.ssh/ siano applicate le autorizzazioni corrette:

    chown -R ubuntu /mnt/ext-disk/.ssh/*
    chmod -R 600 /mnt/ext-disk/.ssh/*
    
  13. Esci dalla connessione SSH alla VM di recupero.

  14. Arresta la VM di recupero.

  15. Scollega il disco dati dalla VM di recupero e ricollegalo alla VM della stazione di lavoro dell'amministratore.

  16. Accendi la workstation di amministrazione.

  17. Dopo aver eseguito la VM, connettiti alla workstation di amministrazione utilizzando SSH e la nuova coppia di chiavi SSH.

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

    Sostituisci quanto segue:

    • NEW_SSH_KEY con il nome della nuova chiave SSH che hai creato in un passaggio precedente e copiato nella VM della workstation di amministrazione.
    • RESCUE_VM con l'indirizzo IP o il FQDN della VM della postazione di amministrazione.

    Verifica di poterti connettere correttamente tramite SSH.

  18. Elimina la VM di recupero.

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.