이 문서에서는 일반적인 관리형 워크로드 아이덴티티 오류의 해결 방법을 설명합니다.
다음 명령어를 실행하여 포드 상태를 확인할 수 있습니다.
kubectl describe pod
인증서로 포드를 배포할 수 없음
마운트된 인증서로 Google Kubernetes Engine(GKE) 워크로드 포드를 배포할 수 없으면 다음 명령어를 사용하여 포드 상태를 확인합니다.
kubectl describe pod POD_NAME -n POD_NAMESPACE
권한 관련 오류
이 섹션에서는 잘못된 권한과 관련된 오류를 설명합니다.
인증서를 발급하는 중에 권한이 거부됨: GKE 인증에서 인증서를 발급할 수 없음
이 오류는 다음과 같이 표시됩니다.
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'
워크로드 아이덴티티 풀에서 하위 인증 기관 풀에 대한 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: 하위 인증 기관 풀 IDCA_POOL_PROJECT_ID: 루트 인증 기관 풀의 프로젝트 IDREGION: 하위 인증 기관 리전CA_POOL_PROJECT_NUMBER: 인증 기관 풀 프로젝트 번호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
이 오류는 워크로드 아이덴티티 풀에서 하위 인증 기관 풀에 대한 비공개 인증 기관 풀 리더 역할(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: 하위 인증 기관 풀 IDREGION: 하위 인증 기관 리전PROJECT_NUMBER: 워크로드 아이덴티티 풀 프로젝트 번호PROJECT_ID: 워크로드 아이덴티티 풀 프로젝트 ID
다음 명령어를 사용하여 신뢰할 수 있는 번들 존재 여부를 확인할 수 있습니다.
kubectl get gkeclustertrustbundle
신뢰할 수 있는 번들이 로드되면 응답은 다음과 같습니다.
NAME AGE
svc.id.goog-PROJECT_ID.svc.id.goog 5m35s
출력에서 PROJECT_ID는 신뢰할 수 있는 루트가 연결된 Fleet의 프로젝트 ID입니다.
인증서 오류
이 섹션의 오류는 인증서 구성과 관련이 있습니다.
관리형 워크로드 아이덴티티 인증서가 생성되지 않으면 여러 가지 오류가 발생할 수 있습니다. 포드에 마운트된 볼륨에 이러한 인증서가 있는지 확인하려면 다음을 수행합니다.
포드에 연결합니다.
# Open the pod sh interface kubectl exec -it $pod_name -n $pod_namespace -- sh사용자 인증 정보 파일을 나열하고 검사합니다.
# 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
Google Cloud 콘솔을 통해 `gke-metadata-server` 컨테이너의 k8s_container 로그를 검사하여 포드의 인증서 프로비저닝 상태를 검사할 수도 있습니다.
인증서를 발급하는 동안 전제 조건이 충족되지 않음
포드 설명에 다음 메시지가 포함될 수 있습니다.
Failed precondition while issuing the certificate: failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition
이 오류는 워크로드 아이덴티티 풀이 인증서 발급 구성(CIC)으로 구성되지 않았기 때문에 발생했습니다.
이 오류를 해결하려면 CIC를 만들고 이를 사용하여 워크로드 아이덴티티 풀을 업데이트합니다.