K8s使用Private Image佈署
在GKE中使用Artifact Registry的Private Image
首先要了解cluster的service account
建立cluster預設都是使用專案的compute service account(格式為: <PROJECT_NUMBER>-compute@developer.gserviceaccount.com)
除非建立cluster的時候有指定service account(ref)
因此需要在Artifact Registry的Image Repostory設定resource-level的存取權
提供該service account "Artifact Registry Reader"Role
跨GCP專案的情況
在大量佈署服務的情況
通常Image都會集中放在一個GCP host project統一管理
而佈署則是會在不同的project中pull image
在這種情況一樣是將跨專案的SA賦予"Artifact Registry Reader" Role即可
與同專案設定方式沒有差別
在非GKE中的k8s cluster使用Artifact Registry的Private Image
原理是建立一個k8s內的dockerconfigjson secret將docker登入的憑證存起來
並在Pod或Deployment中使用imagePullSecrets功能使用這個憑證
透過現有的docker credentials建立secret
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
或是透過command line建立
docker-server
如果是Artifact Registry格式為https://-docker.pkg.dev
如果是Container Registry格式為https://gcr.io
docker-password
需要設定為SA key json的值
docker-email
設定為SA的email
kubectl create secret docker-registry regcred \
--docker-server=<docker-server> \
--docker-username=_json_key \
--docker-password="$(cat /path/to/gcp-sa/key.json)" \
--docker-email=<gcp-sa-email>
設定deployment
在deployment內的template.spec.imagePullSecrets設定
使用前面建立的secret name即可
imagePullSecrets:
- name: regcred
Done!
到這邊就整個設定完成
可以開始進行container佈署