存取儲存器登錄
IBM Cloud® Code Engine 使用的影像通常儲存在一個註冊表中,該註冊表可供公眾存取(公開註冊表),也可設定為只限一小群使用者存取(私人註冊表)。
儲存器登錄或登錄是儲存儲存器映像檔的服務。 例如,IBM Cloud Container Registry 和 Docker Hub 是儲存器登錄。 容器登錄可以是公用或專用。 公用儲存器登錄不需要認證即可存取。 相反地,存取專用登錄則需要認證。
Code Engine 需要存取儲存器登錄才能完成下列動作:
- 擷取 (或「取回」) 容器映像檔以執行應用程式或工作
- 將新建立的容器映像檔儲存為映像檔建置的輸出
- 當從本端來源執行建置時,儲存及擷取本端檔案
Code Engine 會處理系統與登錄之間互動的許多基礎詳細資料。
若要從登錄取回映像檔,Code Engine 會使用特殊類型的 Kubernetes 密鑰 (稱為 imagePullSecret)。 此映像檔取回密碼會儲存用來存取容器登錄的認證。 當您使用 Code Engine 來新增儲存器登錄的存取權以取回映像檔時,您正在建立映像檔取回密鑰。 如需映像檔取回密碼的相關資訊,請參閱 Kubernetes 文件。
映像檔登錄類型
映像檔通常會儲存在登錄中,而該登錄可供公開存取(公用登錄)或已設定一小組使用者的有限存取(專用登錄)。
公用登錄 (例如公用 Docker Hub) 可用來開始使用 Docker 及 Code Engine,以建立您的第一個應用程式或工作。 但當涉及企業工作負載時,請使用私人註冊表,例如 IBM Cloud Container Registry 中提供的註冊表,以保護您的影像不被未經授權的使用者使用。 對於專用登錄,請使用登錄密鑰來確保認證可用來取得專用登錄的存取權。
| 登錄 | 說明 |
|---|---|
| IBM Cloud Container Registry | 使用這種類型的登錄,您可以在 IBM Cloud Container Registry 中設定您自己的安全映像檔儲存庫,您可以在其中安全地儲存並在使用者之間共用映像檔。 使用 IBM Cloud Container Registry,您可以 -管理帳戶中映像檔的存取權。 -使用 IBM 提供的映像檔及範例應用程式 (例如 IBM Liberty) 作為基本映像檔,並將您自己的應用程式碼新增至其中。 |
| 任何其他專用登錄 |
透過新增存取權,將任何現有專用登錄連接至 Code Engine。 新增存取權可安全地將您的註冊表 URL 及憑證儲存於 Kubernetes 秘書中。
|
| 公用 Docker Hub |
使用這種類型的註冊表直接在您的Code Engine應用程式或作業中從Docker Hub 提取現有公共映像。 重要的:
使用公共Docker Hub,您可以:
|
登錄密鑰類型
若要存取登錄中的映像檔,Code Engine 會使用下列其中一種登錄密鑰類型。
- Code Engine 受管理密鑰-如果您的登錄使用帳戶中的 IBM Cloud Container Registry 名稱空間,則可以讓 Code Engine 為您建立並管理登錄密鑰。 在主控台中,這個自動建立的登錄密鑰稱為
Code Engine managed secret。 在 CLI 中,自動建立的登錄密鑰名稱格式為ce-auto-icr-private-<region>。 - 使用者管理的密鑰-這是您建立及管理的密鑰。 您可以 使用 API 金鑰從帳戶存取映像檔,或使用您選擇之容器登錄的存取記號; 例如,Docker Hub。 在此情況下,主控台中列出的登錄密鑰是登錄密鑰的名稱。
如果您的登錄是公用且不需要認證; 例如,icr.io/codeengine 或 Docker Hub 公用中的 Code Engine 範例映像檔,則您不需要登錄密鑰。 在此情況下,主控台中列出的登錄密鑰為 None。
從公用帳戶存取映像檔
如果您的映像檔儲存在公用儲存庫 (例如公用 Docker Hub) 中,則在部署應用程式或執行工作時,您可以直接參照映像檔。 請注意,在公用登錄中儲存映像檔對於開始使用應用程式及工作而言是很適合的,請將您的企業映像檔儲存在專用登錄中。
從主控台存取您自己帳戶中的映像檔
如果您從您擁有或管理的帳戶存取 Code Engine,則當您從主控台建立或更新應用程式、工作或建置時,Code Engine 可以自動將映像檔推送至帳戶中的 IBM Cloud Container Registry 名稱空間,並從中取回映像檔。當您推送映像檔時,Code Engine 甚至可以為您建立名稱空間。 如需相關資訊,請參閱下列主題。
使用 API 金鑰從帳戶存取映像檔
如果您要使用 CLI 存取 Code Engine,則必須先建立 IAM API 金鑰,然後在 Code Engine中 將 IAM API 金鑰儲存為登錄存取權。
以下步驟會建立一個 API 金鑰,儲存使用者 ID 的憑證。 與其使用使用者 ID,您可能想要為服務 ID 建立 API 金鑰,該服務 ID 的 IBM Cloud IAM 服務存取政策為 IBM Cloud Container Registry。 如果您選擇鑑別使用者 ID,請確定使用者是功能 ID 或計劃使用者離開的情況,以便 Code Engine 仍可以存取登錄。
從控制台建立 API 金鑰
若要從主控台建立 IBM Cloud IAM API 金鑰,
-
啟動 存取權(IAM)概觀。
-
選取 API 金鑰。
-
按一下建立 IBM Cloud API 金鑰。
-
輸入 API 金鑰的名稱和可選描述,然後按一下建立。
-
複製 API 金鑰,或按下載以儲存它。
您將無法再次看到此 API 金鑰,因此請務必將它記錄在安全的地方。
既然您已建立 API 金鑰,請 將它儲存為登錄存取權。
使用 CLI 建立 API 金鑰
若要使用 CLI 建立IBM Cloud IAM API 金鑰,請執行 iam api-key-create 指令。 例如,要建立一個名為 cliapikey 且描述為 My CLI API key 的 API 金鑰並將其儲存到名為 key_file 的檔案中,請執行以下命令:
ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
如果您選擇不將金鑰儲存至檔案,則必須記錄建立金鑰時所顯示的 API 金鑰。 此後無法擷取它。
既然您已建立 API 金鑰,請 將它儲存為登錄存取權。
存取不同帳戶中的映像檔
您可以為使用者或服務 ID 指定 IBM Cloud IAM 存取政策,以限制特定登錄影像命名空間或動作 (例如推送或拉取) 的權限。 然後,建立 API 金鑰並將這些登錄認證儲存在 Code Engine中。
例如,若要存取其他 IBM Cloud 帳戶中的影像,請 建立 API 金鑰,以儲存該帳戶中使用者或服務 ID 的 IBM Cloud Container Registry 認證。 然後,在 Code Engine中,使用該金鑰在您的帳戶中 建立存取權。
存取專用 Docker Hub 帳戶中的映像檔
若要存取專用 Docker Hub 帳戶中的映像檔,請提供密碼或存取記號來建立登錄存取權。 透過使用存取記號,您可以更輕鬆地授與及撤銷 Docker Hub 帳戶的存取權,而不需要變更密碼。 如需存取權限和 Docker Hub 的詳細資訊,請參閱 建立和管理存取權限。
決定是直接使用密碼還是建立存取記號之後,請 建立登錄存取權。
新增 Code Engine 的登錄存取權
若要設定不同 IBM Cloud 帳戶中 IBM Cloud Container Registry 的存取權,從專用 Docker Hub 帳戶取回映像檔,或使用 Code Engine CLI 取回或推送映像檔,您可以使用 IBM API 金鑰 或 Docker Hub 密碼或存取記號,透過 Code Engine 來建立登錄存取權,以儲存您的鑑別金鑰或記號。
從主控台新增登錄存取權
開始之前,請 建立專案。
- 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
- 從「元件」頁面中,按一下 密鑰及配置對映。
- 從「密鑰及配置對映」頁面中,按一下 建立 以建立密鑰。
- 從「建立密鑰或 configmap」頁面中,完成下列步驟:
- 選取 登錄密碼,然後按 下一步。
- 提供名稱; 例如
mysecret-registry。 - 指定此密鑰的目標登錄,例如 IBM Cloud Container Registry 或 Docker Hub。
- 指定登錄的位置。
- 指定使用者名稱。 如果此密鑰適用於 IBM Cloud Container Registry,則使用者名稱為
iamapikey。 如果此密鑰適用於 Docker Hub,則它是您的 Docker ID。 - 輸入使用者名稱的認證。 對於 IBM Cloud Container Registry,請使用 IAM API 金鑰。 若為 Docker Hub,您可以使用 Docker Hub 密碼或 存取記號。 若為其他目標登錄,請指定使用者名稱的密碼或 API 金鑰。
- 按一下建立以建立秘密。
既然已從主控台建立密鑰,請移至「密鑰及配置對映」頁面,以檢視已定義密鑰及配置對映的清單。 您可以套用過濾器來自訂清單以符合您的需求。
您可以在建立應用程式或工作時,或在建置映像檔時,新增儲存器登錄的存取權。 按一下 配置映像檔,並指定要執行的容器映像檔,包括儲存映像檔的登錄,以及用來擷取映像檔的 登錄存取權。
使用 CLI 新增登錄存取權
從 CLI 版本 1.42.0 開始,在 CLI 中定義秘密和處理秘密的工作統一在 secret 命令群組下。 請參閱 ibmcloud ce secret 指令。 使用 --format 選項指定秘密的類別,例如
basic_auth, generic, hmac, ssh, tls,或 registry。 雖然您可以繼續使用 registry 命令群組的同時,利用統一的 secret 命令群組的優勢。 若要建立存取容器註冊表的密碼,請使用
ibmcloud ce secret create --format registry 命令。 若要瞭解在 Code Engine 中處理機密的更多資訊,請參閱處理 機密。
若要使用 CLI 新增 IBM Cloud Container Registry 或 Docker Hub 存取權,請使用 secret create --format registry 指令。 此指令需要註冊密碼的名稱、註冊伺服器的 URL,以及存取註冊伺服器的使用者名稱和密碼資訊,也允許其他可選參數。 如需選項的完整清單,請參閱 ibmcloud ce secret create 指令。
例如,下列指令會建立對 us.icr.io 登錄伺服器上稱為 myregistry 的 IBM Cloud Container Registry 實例的登錄存取權:
ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY
輸出範例
Creating registry secret 'myregistry'...
OK
下表彙總在此範例中與 secret create --format registry 指令搭配使用的選項。 如需指令及其選項的相關資訊,請參閱 ibmcloud ce secret create 指令。
| 選項 | 說明 |
|---|---|
--name |
登錄密鑰的名稱。 請使用專案內唯一的名稱。 此值是必要項目。 -名稱必須以小寫英數字元開頭及結尾。 -名稱必須是 253 個字元或更少,且可以包含小寫字母、數字、句點 (.) 及連字號 (-)。 |
--server |
輸入註冊伺服器的 URL。 對於 Container Registry,伺服器名稱是 <region>.icr.io。 例如,us.icr.io。 Docker Hub 的值為 https://index.docker.io/v1/。 |
--username |
輸入存取登錄伺服器的使用者名稱。 對於 Container Registry,它是 iamapikey。 對於 Docker Hub,它是您的 Docker ID。 |
--password |
輸入密碼。 對於 Container Registry,密碼是您的 API 金鑰。 若為 Docker Hub,您可以使用 Docker Hub 密碼或 存取記號。 |
控制對 Code Engine 工作量的 Container Registry 的存取權
假設您想要在 Code Engine 取回映像檔時控制 IBM Cloud Container Registry 的存取權。 例如,您想要控制 Container Registry 對特定 IP 位址的存取權。 請考量下列方法。
-
使用 環境定義型限制。 透過使用環境定義型限制,如果 Code Engine 專案的 IP 位址曾經變更,則您不需要變更存取權。 您可以將 Container Registry 的存取權限制為網路區域,其中您的網路區域包括 Code Engine 及任何需要存取登錄的項目。
-
停用 IBM Cloud Container Registry 的公用存取權,並確保 Code Engine 使用專用端點而非公用端點。 請參閱 保護 Container Registry。
-
若要依特定 IP 範圍控制存取權,請使用 API 端點來提取特定 Code Engine 專案的 IP 位址。 請務必注意,這些 IP 位址可能會變更,當發生這種情況時,您必須採取適當的步驟。 請參閱 Code Engine 公用及專用 IP 位址 及 如何將我的 Code Engine 應用程式新增至允許清單?
登錄中映像檔的考量
用於應用程式或工作的映像檔名稱必須採用下列其中一種格式。
REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAG,其中REGISTRY和TAG是選用項目。 如果未指定REGISTRY,則默認為docker.io。 如果未指定TAG,請不要包含冒號 (:)。TAG的預設值為latest。REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEID,其中REGISTRY是選用項目。 如果未指定REGISTRY,則預設值為docker.io及ibm作為 Docker 組織。
| 元件 | 容許的字元 | 長度 | 其他規則 |
|---|---|---|---|
REGISTRY |
a-zA-Z0-9 -_. --__ |
1-253 | (0-127Periods)(label:1-63,noDashOnEnd) |
NAMESPACE |
a-z 0-9 -_ --__ |
4-30 | (start/end with letterOrNumber) |
DOCKERUSERorDOCKERORG |
a-z 0-9 |
4-30 | |
REPOSITORY |
a-z 0-9 -_. / |
2-255 | (start/end with letterOrNumber) |
TAG |
a-zA-Z0-9 -_. --__.. |
0-128 | (NOT start with periodOrDash) |
IMAGEID |
a-z 0-9 : |
(startwith sha256: noOtherColon) |
映像檔名稱部分必須符合下列準則。
REGISTRY必須是 253 個字元或更少,並且可以包含小寫或大寫字母、數字、句點 (.)、連字號 (-) 及底線 (_)。請勿使用橫線 (.) 作為最後一個字元。 請勿使用超過 127 個句點 (.),且其間的標籤長度可以介於 1 到 63 個字元之間。NAMESPACE必須介於 4 到 30 個字元之間,且開頭和結尾必須是小寫字母或數字。NAMESPACE可以包含小寫英數字元、連字號 (-) 及底線 (_)。DOCKERUSERorDOCKERORG可以用於 Docker 登錄,而不是NAMESPACE。 指定 Docker 使用者名稱或 Docker 組織。 您的 Docker 使用者名稱及組織必須介於 4 到 30 個字元之間,且僅包含小寫英數字元或數字。REPOSITORY必須介於 2 到 255 個字元之間,且開頭和結尾必須是小寫字母或數字。REPOSITORY可以包含小寫英數字元、正斜線 (/)、句點 (.)、連字號 (-) 及底線 (_)。TAG必須介於 0 到 128 個字元之間,且可以包含小寫或大寫字母、數字、句點 (.)、連字號 (-) 及底線 (_)。TAG不得以句點或橫線開頭。 如果您不包含TAG,也不要包含冒號。IMAGEID以sha256:為字首,可以包含小寫字母和數字。