์ด ๋ฌธ์์์๋ ์ผ๋ฐ์ ์ธ ๊ด๋ฆฌํ ์ํฌ๋ก๋ 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
Google 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 ํ์ ์ ๋ฐ์ดํธํฉ๋๋ค.