이 문서에서는 일반적인 관리형 워크로드 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 풀 IDCA_POOL_PROJECT_ID
: 루트 CA 풀의 프로젝트 IDREGION
: 하위 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 풀 IDREGION
: 하위 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 마운트 볼륨에서 이러한 인증서가 있는지 확인하려면 다음 단계를 따르세요.
pod에 연결합니다.
# 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
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 풀을 업데이트합니다.