GKE용 관리형 워크로드 아이덴티티 인증 문제 해결

이 문서에서는 일반적인 관리형 워크로드 ID 오류의 해결 방법을 설명합니다.

다음 명령어를 실행하여 포드 상태를 확인할 수 있습니다.

kubectl describe pod

포드가 인증서와 함께 배포되지 않음

Google Kubernetes Engine (GKE) 워크로드 포드가 마운트된 인증서로 배포되지 않은 경우 다음 명령어를 사용하여 포드 상태를 확인합니다.

kubectl describe pod POD_NAME -n POD_NAMESPACE

권한 관련 오류

이 섹션에서는 잘못된 권한과 관련된 오류를 설명합니다.

인증서를 발급하는 중에 권한이 거부됨: GKE Auth에서 인증서를 발급하지 못했습니다.

이 오류는 다음과 유사합니다.

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'

워크로드 ID 풀에 하위 CA 풀의 CA Service Workload Certificate Requester 역할 (roles/privateca.workloadCertificateRequester)이 없기 때문에 이 오류가 발생했습니다.

이 오류를 해결하려면 풀에 역할을 부여합니다.

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"

다음을 바꿉니다.

  • SUBORDINATE_CA_POOL_ID: 하위 CA 풀 ID
  • CA_POOL_PROJECT_ID: 루트 CA 풀의 프로젝트 ID
  • REGION: 하위 CA 리전
  • CA_POOL_PROJECT_NUMBER: CA 풀 프로젝트 번호
  • PROJECT_ID: 워크로드 아이덴티티 풀 프로젝트 ID

볼륨의 MountVolume.SetUp 실패

이 오류는 다음과 유사합니다.

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

이 오류는 워크로드 ID 풀에 하위 CA 풀의 비공개 CA 풀 리더 역할 (roles/privateca.poolReader)이 없기 때문에 발생했습니다.

이 오류를 해결하려면 풀에 역할을 부여하고 신뢰 번들이 로드될 때까지 몇 분 정도 기다립니다.

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"

다음을 바꿉니다.

  • SUBORDINATE_CA_POOL_ID: 하위 CA 풀 ID
  • REGION: 하위 CA 리전
  • PROJECT_NUMBER: 워크로드 ID 풀 프로젝트 번호
  • PROJECT_ID: 워크로드 아이덴티티 풀 프로젝트 ID

다음 명령어를 사용하여 신뢰 번들의 존재 여부를 확인할 수 있습니다.

kubectl get gkeclustertrustbundle

신뢰 번들이 로드되면 응답은 다음과 같습니다.

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

출력에서 PROJECT_ID는 신뢰 루트가 연결된 함대의 프로젝트 ID입니다.

인증서 오류

이 섹션의 오류는 인증서 구성과 관련이 있습니다.

관리형 워크로드 ID 인증서가 생성되지 않으면 여러 오류가 발생할 수 있습니다. Pod 마운트 볼륨에서 이러한 인증서가 있는지 확인하려면 다음 단계를 따르세요.

  1. pod에 연결합니다.

    # Open the pod sh interface
    kubectl exec -it $pod_name -n $pod_namespace -- sh
    
  2. 사용자 인증 정보 파일을 나열하고 검사합니다.

    # 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
    

Trusted Cloud 콘솔을 통해 `gke-metadata-server 컨테이너의 k8s_container 로그를 검사하여 포드의 인증서 프로비저닝 상태를 검사할 수도 있습니다.

인증서를 발급하는 중에 전제 조건이 실패함

Pod 설명에는 다음 메시지가 포함될 수 있습니다.

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

이 오류는 워크로드 ID 풀이 인증서 발급 구성 (CIC)으로 구성되지 않았기 때문에 발생했습니다.

이 오류를 해결하려면 CIC를 만들고 이를 사용하여 워크로드 ID 풀을 업데이트합니다.