このドキュメントでは、マネージド ワークロード ID の一般的なエラーの解決方法について説明します。
Pod のステータスを確認するには、次のコマンドを実行します。
kubectl describe pod
証明書を使用して Pod をデプロイできない
マウントされた証明書を使用して Google Kubernetes Engine(GKE)ワークロード Pod のデプロイに失敗した場合は、次のコマンドを使用して Pod のステータスを確認します。
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'
このエラーは、Workload Identity プールに下位 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
: Workload Identity プールのプロジェクト ID
MountVolume.SetUp failed for volume
このエラーは次のようになります。
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
このエラーは、Workload Identity プールに下位 CA プールの Private CA Pool Reader ロール(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
: Workload Identity プールのプロジェクト番号PROJECT_ID
: Workload Identity プールのプロジェクト 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 の証明書のプロビジョニング ステータスを確認することもできます。
証明書の発行中に前提条件に失敗しました
Pod の説明には、次のメッセージが含まれる場合があります。
Failed precondition while issuing the certificate: failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition
このエラーは、Workload Identity プールで証明書発行構成(CIC)が構成されていないために発生しました。
このエラーを解決するには、CIC を作成し、それを使用してWorkload Identity プールを更新します。