共用方式為


將成品傳輸到另一個登錄

此文章說明如何將映像或其他登錄成品的集合從一個 Azure 容器登錄傳輸到另一個登錄。 來源和目標登錄可以位於相同或不同的訂用帳戶、Active Directory 租用戶、Azure 雲端或實際中斷連線的雲端。

若要傳輸成品,您可以建立「傳輸管線」,使用 Blob 儲存體在兩個登錄之間複寫成品:

  • 將來源登錄的成品匯出至來源儲存體帳戶中的 Blob
  • 將 Blob 從來源儲存體帳戶複製到目標儲存體帳戶
  • 將目標儲存體帳戶中的 Blob 會以成品的形式匯入目標登錄。 您可以設定匯入管線,以在目標儲存體中的成品 Blob 更新時觸發。

在此文章中,您將建立必要條件資源,以建立和執行傳輸管線。 Azure CLI 可用來佈建相關聯的資源,例如儲存體祕密。 建議使用 Azure CLI 2.2.0 版或更新版本。 如果您需要安裝或升級 CLI,請參閱安裝 Azure CLI

進階容器登錄服務層級中提供這項功能。 如需登錄服務層級和限制的相關資訊,請參閱 Azure 容器登錄層級

重要

此功能目前為預覽功能。 若您同意補充的使用規定即可取得預覽。 在公開上市 (GA) 之前,此功能的某些領域可能會變更。

考慮您的使用案例

傳輸非常適合用來在實體中斷連線之雲端中的兩個 Azure 容器登錄之間複製內容,由每個雲端中的儲存體帳戶居中協調。 如果您想要從已連線雲端 (包括 Docker Hub 和其他雲端廠商) 中的容器登錄複製映像,建議使用映像匯入

必要條件

  • 容器登錄:您需要具有要傳輸成品的現有來源登錄,以及目標登錄。 ACR 傳輸旨在實際中斷連線的雲端之間移動。 基於測試目的,來源和目標登錄可以位於相同或不同的 Azure 訂用帳戶、Active Directory 租用戶或雲端。

    如果您需要建立登錄,請參閱快速入門:使用 Azure CLI 建立私人容器登錄

  • 儲存體帳戶:在您選擇的訂用帳戶與位置中建立來源和目標儲存體帳戶。 基於測試目的,您可以使用與來源和目標登錄相同的一或多個訂用帳戶。 針對跨雲端案例,您通常會在每個雲端中建立個別的儲存體帳戶。

    如有需要,請使用 Azure CLI 或其他工具建立儲存體帳戶。

    在每個帳戶中建立適用於成品傳輸的 Blob 容器。 例如,建立名為 transfer (傳輸) 的容器。

  • 金鑰保存庫:需要金鑰保存庫,才能儲存用來存取來源和目標儲存體帳戶的 SAS 權杖祕密。 在與來源和目標登錄相同的一或多個 Azure 訂用帳戶中建立來源和目標金鑰保存庫。 基於示範目的,此文章中使用的範本和命令也會假設來源和目標金鑰保存庫分別位於與來源和目標登錄相同的資源群組中。 不一定要使用通用資源群組,但其可簡化此文章中使用的範本和命令。

    如有需要,請使用 Azure CLI 或其他工具建立金鑰保存庫。

  • 環境變數:針對此文章中的範例命令,請為來源和目標環境設定下列環境變數。 所有範例均已針對 Bash 殼層格式化。

    SOURCE_RG="<source-resource-group>"
    TARGET_RG="<target-resource-group>"
    SOURCE_KV="<source-key-vault>"
    TARGET_KV="<target-key-vault>"
    SOURCE_SA="<source-storage-account>"
    TARGET_SA="<target-storage-account>"
    

案例概觀

您將建立下列三個管線資源,以在登錄之間進行映像傳輸。 這三個全是使用 PUT 作業所建立。 這些資源會在您的「來源」和「目標」登錄及儲存體帳戶上運作。

儲存體驗證會使用 SAS 權杖,作為金鑰保存庫中的祕密來管理。 管線會使用受控識別來讀取保存庫中的祕密。

  • ExportPipeline:長期資源,其中包含關於「來源」登錄和儲存體帳戶的概略資訊。 此資訊包括來源儲存體 Blob 容器 URI 和管理來源 SAS 權杖的金鑰保存庫。
  • ImportPipeline:長期資源,其中包含關於「目標」登錄和儲存體帳戶的概略資訊。 此資訊包括目標儲存體 Blob 容器 URI 和管理目標 SAS 權杖的金鑰保存庫。 預設會啟用匯入觸發程序,因此,當成品 Blob 登陸目標儲存體容器時,管線即會自動執行。
  • PipelineRun:用來叫用 ExportPipeline 或 ImportPipeline 資源的資源。
    • 您可以透過建立 PipelineRun 資源並指定要匯出的成品,來手動執行 ExportPipeline。
    • 如果啟用匯入觸發程序,ImportPipeline 即會自動執行。 您也可以使用 PipelineRun 手動執行。
    • 目前,每個 PipelineRun 最多可以傳輸 50 個成品

須知事項

  • ExportPipeline 和 ImportPipeline 通常位於與來源和目的地雲端相關聯的不同 Active Directory 租用戶中。 此案例針對匯出和匯入資源需要個別的受控識別與金鑰保存庫。 基於測試目的,這些資源可以放在相同的雲端並共用身分識別。
  • 根據預設,ExportPipeline 和 ImportPipeline 範本會個別啟用系統指派的受控識別來存取金鑰保存庫祕密。 ExportPipeline 和 ImportPipeline 範本也支援您提供的使用者指派身分識別。

建立和儲存 SAS 金鑰

傳輸會使用共用存取簽章 (SAS) 權杖來存取來源和目標環境中的儲存體帳戶。 產生和儲存權杖,如下列各節所述。

重要

雖然 ACR 傳輸可以搭配儲存在金鑰保存庫祕密中的手動產生 SAS 權杖運作,但針對實際執行工作負載,我們「強烈」建議改為使用金鑰保存庫受控儲存體 SAS 定義祕密

產生要用於匯出的 SAS 權杖

執行 az storage container generate-sas 命令,為來源儲存體帳戶中的容器產生 SAS 權杖,以用於成品匯出。

建議的權杖權限:讀取、寫入、列出、新增。

在下列範例中,會將命令輸出指派給 EXPORT_SAS 環境變數,前面加上 '?' 字元。 針對您的環境更新 --expiry 值:

EXPORT_SAS=?$(az storage container generate-sas \
  --name transfer \
  --account-name $SOURCE_SA \
  --expiry 2021-01-01 \
  --permissions alrw \
  --https-only \
  --output tsv)

儲存要用於匯出的 SAS 權杖

使用 az keyvault secret set,將 SAS 權杖儲存於來源 Azure 金鑰保存庫中:

az keyvault secret set \
  --name acrexportsas \
  --value $EXPORT_SAS \
  --vault-name $SOURCE_KV

產生要用於匯入的 SAS 權杖

執行 az storage container generate-sas 命令,為目標儲存體帳戶中的容器產生 SAS 權杖,以用於成品匯入。

建議的權杖權限:讀取、刪除、列出

在下列範例中,會將命令輸出指派給 IMPORT_SAS 環境變數,前面加上 '?' 字元。 針對您的環境更新 --expiry 值:

IMPORT_SAS=?$(az storage container generate-sas \
  --name transfer \
  --account-name $TARGET_SA \
  --expiry 2021-01-01 \
  --permissions dlr \
  --https-only \
  --output tsv)

儲存要用於匯入的 SAS 權杖

使用 az keyvault secret set,將 SAS 權杖儲存於目標 Azure 金鑰保存庫中:

az keyvault secret set \
  --name acrimportsas \
  --value $IMPORT_SAS \
  --vault-name $TARGET_KV

下一步