[筆記] 設定 google container registry 轉址到 google artifact registry

" Container Registry will be phased out, starting May 15, 2024

Link: https://cloud.google.com/container-registry/docs/release-notes#May_15_2023

Google Cloud 即將要停止 google container registry 服務而改用 google artifact registry。但兩者的網域並不相同,例如:

  • google container registry: gcr.io
  • google artifact registry: us-docker.pkg.dev

現在可以透過轉址設定將現有 grc.io 的請求從 google container registry 轉導至 google artifact registry。 減少搜尋取代現有設定的工作量。本文是操作步驟的筆記,並假設操作者為 Project Owner

官方文件連結:https://cloud.google.com/artifact-registry/docs/transition/setup-gcr-repo

設定環境變數


我們可以於 Google Cloud Console 頁面,切換至欲設定的專案,並啟動 Cloud Shell

執行指令設定環境變數,方便後續使用

PROJECT_ID=$(gcloud config get-value core/project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

確認啟用需要的 Cloud API


gcloud services enable \
    cloudresourcemanager.googleapis.com \
    artifactregistry.googleapis.com

建立 Repository


因為我是使用 gcr.io,所以 location 要選擇 us,如果是使用其他 hostname,則需要對照表格:

Container Registry hostnameArtifact Registry repository name
gcr.iogcr.io
asia.gcr.ioasia.gcr.io
eu.gcr.ioeu.gcr.io
us.gcr.ious.gcr.io
gcloud artifacts repositories create gcr.io \
    --repository-format=docker \
    --location=us

建立之後於 Cloud Console 上,於 Artifact Repository 新增權限給原本使用 container registry 的帳號

  • 對應原來 Role:Storage Admin
  • 新增 Role:Artifact Repository Administrator

Artifact Repository permission

搬移 Container Images


在啟用轉址前,我們需要先搬移 Container Images 到 Artifacts Repository。

設定權限

新增權限給 Artifact Repository Service Account。

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com" \
    --role='roles/storage.objectViewer'

搬移

下載 gcrane https://github.com/google/go-containerregistry/releases/tag/v0.16.1

執行指令搬移全部 Container Images(不同 location 需要個別執行指令)。執行之前建議先清理不再需要的 Container Images,不然可能會需要執行很久;或是指定要搬移的 Repository。

./gcrane cp -r gcr.io/$PROJECT_ID us-docker.pkg.dev/$PROJECT_ID/gcr.io

移除權限

當搬移完成後,就可以把 Artifact Repository Service Account 的權限移除。

gcloud projects remove-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com" \
    --role='roles/storage.objectViewer'

驗證設定


使用 dry-run 在啟用轉址前來檢查設定。

gcloud beta artifacts settings enable-upgrade-redirection \
    --project=$PROJECT_ID --dry-run

啟用轉址


gcloud beta artifacts settings enable-upgrade-redirection \
    --project=$PROJECT_ID

停用轉址


gcloud beta artifacts settings disable-upgrade-redirection \
    --project=$PROJECT_ID

其他


原先的 GitLab 上的 docker config 可能會有權限錯誤,先在其他機器上執行以下指令,再把 ~/.docker/config.json 的內容放到 GitLab 的 CI 變數上。

cat key.json | docker login -u _json_key --password-stdin https://gcr.io

參考資料



如果覺得這篇文章對您有所幫助,歡迎贊助我一杯咖啡 ☕️

祝您有美好的一天 ❤️