Resolva problemas de autenticação de identidade de carga de trabalho gerida para o GKE

Este documento descreve resoluções para erros comuns de identidades de cargas de trabalho geridas.

Pode verificar o estado de um Pod executando o seguinte comando:

kubectl describe pod

A implementação do pod falha com certificados

Se o pod de carga de trabalho do Google Kubernetes Engine (GKE) não tiver sido implementado com os certificados montados, use o seguinte comando para verificar o estado do pod:

kubectl describe pod POD_NAME -n POD_NAMESPACE

Erros relacionados com autorizações

Esta secção descreve erros relacionados com autorizações incorretas.

Autorização recusada ao emitir o certificado: não foi possível emitir o certificado a partir da autenticação do GKE

Este erro é semelhante ao seguinte:

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'

O erro ocorreu porque o Workload Identity Pool não tem a função CA Service Workload Certificate Requester (roles/privateca.workloadCertificateRequester) no conjunto de CAs subordinadas.

Para resolver este erro, atribua a função ao conjunto:

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"

Substitua o seguinte:

  • SUBORDINATE_CA_POOL_ID: o ID do conjunto de ACs subordinadas
  • CA_POOL_PROJECT_ID: o ID do projeto do grupo de ACs raiz
  • REGION: a região da CA subordinada
  • CA_POOL_PROJECT_NUMBER: o número do projeto do grupo de CA
  • PROJECT_ID: o ID do projeto do Workload Identity Pool

MountVolume.SetUp falhou para o volume

Este erro é semelhante ao seguinte:

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 erro ocorreu porque o Workload Identity Pool não tem a função Private CA Pool Reader (roles/privateca.poolReader) no CA Pool subordinado.

Para resolver este erro, conceda a função ao conjunto e aguarde alguns minutos para que os pacotes de confiança sejam carregados:

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"

Substitua o seguinte:

  • SUBORDINATE_CA_POOL_ID: o ID do conjunto de ACs subordinadas
  • REGION: a região da CA subordinada
  • PROJECT_NUMBER: o número do projeto do Workload Identity Pool
  • PROJECT_ID: o ID do projeto do Workload Identity Pool

Pode usar o seguinte comando para verificar a existência dos conjuntos de confiança:

kubectl get gkeclustertrustbundle

Quando os conjuntos de confiança são carregados, a resposta tem o seguinte aspeto:

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

Na saída, PROJECT_ID é o ID do projeto da frota à qual a sua raiz de confiança está associada.

Erros de certificado

Os erros nesta secção estão relacionados com a configuração de certificados.

Podem ocorrer vários erros se os certificados de identidade de carga de trabalho geridos não forem gerados. Para verificar a existência destes certificados em volumes montados no pod, faça o seguinte:

  1. Estabeleça ligação ao pod.

    # Open the pod sh interface
    kubectl exec -it $pod_name -n $pod_namespace -- sh
    
  2. Liste e inspecione os ficheiros de credenciais.

    # 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
    

Também pode inspecionar o estado de aprovisionamento do certificado de um pod inspecionando os registos do contentor `gke-metadata-server` através da consola.k8s_containerTrusted Cloud

Falha na pré-condição ao emitir o certificado

A descrição do pod pode incluir a seguinte mensagem:

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

Este erro ocorreu porque o Workload Identity Pool não foi configurado com uma configuração de emissão de certificados (CIC).

Para resolver este erro, crie um CIC e use-o para atualizar o Workload Identity Pool.