K8s使用Private Image佈署

2023/01/20

 

在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

artifact-registry-grant.png

 

跨GCP專案的情況

在大量佈署服務的情況

通常Image都會集中放在一個GCP host project統一管理

而佈署則是會在不同的project中pull image

在這種情況一樣是將跨專案的SA賦予"Artifact Registry Reader" Role即可

與同專案設定方式沒有差別

 

在非GKE中的k8s cluster使用Artifact Registry的Private Image

ref

原理是建立一個k8s內的dockerconfigjson secret將docker登入的憑證存起來

並在Pod或Deployment中使用imagePullSecrets功能使用這個憑證

 

透過現有的docker credentials建立secret

ref

kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson

 

或是透過command line建立

ref

 

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佈署