すべてのプロダクト
Search
ドキュメントセンター

Container Registry:アカウント間でのイメージのプル

最終更新日:Feb 07, 2026

Alibaba Cloud のマルチアカウントアーキテクチャでは、Container Service for Kubernetes (ACK) クラスターと Container Registry (ACR) Enterprise Edition インスタンスが異なる Alibaba Cloud アカウントに属している場合があります。ACK クラスターが ACR インスタンスからコンテナイメージをプルしてワークロードをデプロイできるようにするには、ネットワーク接続を確立し、必要な権限を付与する必要があります。このトピックでは、aliyun-acr-credential-helper パスワードレスコンポーネントを使用してアカウント間でイメージをプルする方法について説明します。

選択ガイド

まず、ビジネス要件を満たすネットワーク接続方法とアカウント権限付与方法を選択します。次に、選択した権限付与方法をサポートするパスワードレスコンポーネントを選択します。

具体的な手順については、「ネットワーク接続の設定」、「アカウント権限付与とパスワードレスコンポーネントの設定」、および「アカウント間でのイメージプルの検証」をご参照ください。
image
説明

このトピックでは、クロスアカウントとは、RAM ユーザーではなく、異なる Alibaba Cloud アカウントを指します。

前提条件

  • パスワードレスコンポーネントが使用する RAM ロールに必要な権限が付与されていること

  • ACK クラスターがパスワードレスコンポーネントをサポートしていること。

    • aliyun-acr-credential-helper (マネージド)

      ACK マネージドクラスターACK サーバーレスクラスター、および Kubernetes 1.22 以降を実行するACK Edge クラスター

    • aliyun-acr-credential-helper (セルフマネージド)

      Kubernetes 1.20 以降を実行するACK マネージドクラスターおよびACK 専用クラスター

  • Container Registry (ACR) インスタンスは Enterprise Edition インスタンスです。

    重要
    • パスワードレスコンポーネントは、ACR Enterprise Edition インスタンスと 2024 年 9 月 8 日以前に作成された ACR Personal Edition インスタンスのみをサポートします。パスワードレスコンポーネントを使用できない場合は、「imagePullSecrets の使用方法」をご参照ください。

操作手順

ステップ 1: ネットワーク接続の設定

アカウント間でイメージをプルする場合、ACK クラスターと ACR Enterprise Edition インスタンスは異なる VPC にあり、異なるアカウントに属し、異なるリージョンにある可能性があります。イメージをプルする前に、ネットワーク接続が確保され、関連するドメイン名が解決できることを確認する必要があります。以下の方法が利用可能です:

  • パブリックネットワーク接続:ACR Enterprise Edition インスタンスにパブリックエンドポイントを設定し、ACK クラスターのパブリックネットワークアクセスを有効にします。イメージはパブリックネットワーク経由で転送されます。ただし、パブリックネットワーク経由でのデータ転送はセキュリティが低く、Elastic IP アドレス (EIP) とデータ転送に料金が発生します。

  • VPC ピアリング接続:VPC ピアリング接続を使用して 2 つの VPC を接続します。これにより、ACK クラスターは ACR Enterprise Edition インスタンスにアクセスできます。VPC が同じリージョンにある場合、VPC ピアリング接続は無料ですが、VPC が異なるリージョンにある場合は料金が発生します。この方法では、2 つの VPC が重複しない CIDR ブロックを持つ必要があります。この要件により、VPC で利用可能な CIDR ブロックの数が減少する可能性があります。また、2 つの VPC の CIDR ブロックが重複する場合、既存のネットワークアーキテクチャを変更する必要があります。

  • Cloud Enterprise Network 接続:Cloud Enterprise Network (CEN) インスタンスには 1 つ以上のトランジットルーターを含めることができます。トランジットルーターはリージョン間接続を使用して接続し、クロスリージョンおよびクロスアカウントの VPC 相互接続を実現できます。

VPC ピアリング接続と CEN 接続の比較については、「CEN と VPC ピアリング接続の違いは何ですか?

比較項目

パブリックネットワーク接続

VPC ピアリング接続

Cloud Enterprise Network 接続

ネットワークタイプ

パブリックネットワーク

プライベートネットワーク

プライベートネットワーク

課金

Elastic IP アドレスの課金方法に基づいて料金が発生します。

  • ACK クラスターと ACR Enterprise Edition インスタンスの VPC が同じリージョンにある場合、料金は発生しません。

  • VPC が異なるリージョンにある場合、Cloud Data Transfer (CDT) がアウトバウンドトラフィックに対してデータ転送料金を請求します。

Cloud Enterprise Network の課金ルールに基づいて料金が発生します。

主な特徴

既存のネットワークアーキテクチャを変更する必要はありません。セキュリティのため、インバウンドおよびアウトバウンドルール、アクセスの制御、その他の要因を考慮する必要があります。

  • イメージはプライベートネットワーク経由で転送されるため、高いセキュリティが提供されます。VPC が同じリージョンにある場合、料金は発生しません。

  • この機能では、2 つの VPC が CIDR ブロックを共有する必要があり、VPC で利用可能な CIDR ブロックの数が減少します。2 つの VPC で使用されている多くの CIDR ブロックが重複する場合、既存のネットワークアーキテクチャを変更する必要があります。

  • イメージはプライベートネットワーク経由で転送されるため、高いセキュリティが提供されます。

  • CEN は、高いセキュリティ要件を持つ企業の生産環境向けに設計されています。

設定手順

  1. ACR インスタンスのパブリックエンドポイントを設定する

    パブリックネットワークのアクセス制御ポリシーを設定することで、ACR Enterprise Edition インスタンスをリモートで安全に管理およびアクセスできます。
  2. ACK クラスターのパブリックネットワークアクセスを有効にする

    ACK クラスターが外部のパブリックリソースにアクセスして ACR Enterprise Edition インスタンスからイメージをプルするように設定します。
  1. 内部の同一リージョンエンドポイント解決のために VPC を ACR インスタンスにアタッチする

    ACR Enterprise Edition インスタンスを VPC に接続した後、内部ドメイン名を使用して VPC から Enterprise Edition インスタンスにアクセスできます。設定が完了したら、VPC ID と ACR Enterprise Edition インスタンスの内部 IP アドレスを取得します。
  2. ACR インスタンスに関連するドメイン名と IP アドレスを取得する

    ACR Enterprise Edition インスタンスにアクセスするために使用される認証サービスのドメイン名と IP アドレス、および関連する OSS バケットのドメイン名と IP アドレスを取得します。
  3. VPC ピアリング接続を作成し、ルートテーブルを設定する

    VPC ピアリング接続の両端でピア VPC を指すルートを追加して、ACK クラスターの VPC と ACR Enterprise Edition インスタンスの VPC 間のプライベート接続を有効にします。ACK クラスターの VPC ピアリング接続側では、認証サービスの IP アドレスと関連する OSS バケットの IP アドレスのルートも設定する必要があります。
  4. ACK クラスターの ACR インスタンスのドメイン名を解決する

    内部 DNS 解決の追加ノードプールカスタムデータスクリプトの使用などの方法で、/etc/hosts ファイルをバッチで変更します。これにより、ACK クラスターの ACR インスタンスのドメイン名がその内部 IP アドレスに解決され、トラフィックが VPC ピアリング接続のルートエントリを介して ACR インスタンスがアタッチされている VPC に転送されます。
  1. ACR インスタンスの VPC 内部 DNS を設定する

    ACR Enterprise Edition インスタンスを VPC に接続した後、内部ドメイン名を使用して VPC から Enterprise Edition インスタンスにアクセスできます。設定が完了したら、VPC ID と ACR Enterprise Edition インスタンスの内部 IP アドレスを取得します。
  2. ACR インスタンスに関連するドメイン名と IP アドレスを取得する

    ACR Enterprise Edition インスタンスにアクセスするために使用される認証サービスのドメイン名と IP アドレス、および関連する OSS バケットのドメイン名と IP アドレスを取得します。
  3. CEN を使用してクロスアカウント VPC 相互接続を設定する

    ACR Enterprise Edition インスタンスの VPC をそのアカウントのリージョン内のトランジットルーターに接続します。ACK クラスターの VPC をそのアカウントのリージョン内のトランジットルーターに接続します。次に、リージョン間接続を使用して 2 つのリージョン内のトランジットルーターを接続します。
  4. VPC と TransitRouter のルートテーブルを設定する

    ACK クラスターの VPC とトランジットルーターについては、認証サービスの IP アドレスと関連する OSS バケットの IP アドレスのルートも設定する必要があります。
  5. ACK クラスターの ACR インスタンスのドメイン名を解決する

    内部 DNS 解決レコードの追加ノードプールのカスタムデータスクリプトの使用などの方法で、/etc/hosts ファイルをバッチで変更します。これにより、ACK クラスターの ACR インスタンスのドメイン名が ACR インスタンスの内部 IP アドレスに解決されます。これにより、トラフィックは CEN ルートを介して ACR インスタンスがアタッチされている VPC に転送されます。

ステップ 2: アカウント権限付与とパスワードレスコンポーネントの設定

認証情報なしでアカウント間でイメージをプルするには、次の 3 つの権限付与方法があります。ご利用のシナリオに最も適した設定を選択してください。

比較項目

RRSA の使用

Worker RAM ロールの権限借用を使用

RAM ユーザーの AccessKey ペアの使用

クラスタータイプ

v1.22 以降のACK マネージドクラスター Basic EditionACK マネージドクラスター Pro EditionACK Edge クラスター、およびACK サーバーレスクラスター Pro Editionでサポートされています。

v1.20 以降のACK マネージドクラスター Basic EditionACK マネージドクラスター Pro Edition、およびACK 専用クラスターでサポートされています。

v1.20 以降のACK マネージドクラスター Basic EditionACK マネージドクラスター Pro Edition、およびACK 専用クラスターでサポートされています。

サポートされているコンポーネント

  • aliyun-acr-credential-helper マネージドコンポーネント

  • aliyun-acr-credential-helper コンポーネント

    コンポーネントは v23.02.06.1-74e2172-aliyun 以降である必要があります。

コンポーネントの違いの詳細については、「パスワードレスコンポーネントの比較」をご参照ください。

aliyun-acr-credential-helper コンポーネント

aliyun-acr-credential-helper コンポーネント

権限の粒度

Pod レベル (詳細)

クラスターレベル (中間)

アカウントレベル (粗い)

セキュリティ

高。この方法は、詳細な権限管理と隔離を提供します。ハードコードされた AccessKey ペアなしで STS 一時的な認証情報を使用します。

中。すべての Pod が権限を共有するため、過剰な権限リスクを引き起こす可能性があります。

低。AccessKey ペアの漏洩リスクが高いです。

シナリオ

この方法は、セキュリティに敏感なサービスや厳格な権限管理が必要な本番環境に適しています。

この方法は、統一された権限が必要なシナリオや、ある程度の権限管理が必要な開発およびステージング環境に適しています。

この方法は、迅速なデプロイやデモ環境に適しています。

RRSA の使用

アカウント A の ACK クラスターで、特定の ServiceAccount が認証情報なしでイメージをプルする権限を持つアカウント B の RAM ロールを借用するように設定します。これにより、ACK クラスターはアカウント B のプライベートイメージにアクセスしてプルできます。

説明

パスワードレスコンポーネントの RRSA 機能を有効にするには、まずクラスターで RRSA を有効にし、次にパスワードレスコンポーネントに RRSA を設定します。これらの手順を誤った順序で実行した場合、パスワードレスプラグインの Pod を削除して RRSA 機能を有効にしてください。

image
  1. アカウント A で、ACK クラスターの RRSA 機能を有効にし、ロールを借用する権限を持つ RAM ロールを作成します。

    1. ACK クラスターの RRSA 機能を有効にします。

      1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

      2. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。

      3. [基本情報] タブの [セキュリティと監査] セクションで、[RRSA OIDC] の横にある [有効化] をクリックします。image

      4. [RRSA の有効化] ダイアログボックスで、[確認] をクリックします。

        [基本情報] セクションで、クラスターのステータスが [更新中] から [実行中] に変わると、クラスターの RRSA 機能が有効になります。

      5. クラスターの RRSA 機能が有効になった後、[基本情報] タブの [セキュリティと監査] セクションに移動します。マウスを [RRSA OIDC] の横にある [有効] ラベルに合わせると、OIDC プロバイダーの URL と Alibaba Cloud リソースネーム (ARN) が表示されます。image

    2. スクリプトエディターを使用して信頼ポリシーを編集し、OIDC IdP の RAM ロールを作成します

      • 例の <oidc_issuer_url> を、前の手順で取得した現在のクラスターの OIDC プロバイダー URL に置き換えます。

      • 例の <oidc_provider_arn> を、前の手順で取得した現在のクラスターの OIDC プロバイダー ARN に置き換えます。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": "sts.aliyuncs.com",
                "oidc:iss": "<oidc_issuer_url>",
                "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper"
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "<oidc_provider_arn>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    3. AliyunSTSAssumeRoleAccess ポリシーをロールにアタッチして、ロールを借用する権限を付与し、その ARN を記録します。詳細については、「RAM ロールの権限を管理する」をご参照ください。

      1. ロールの詳細ページで、[権限] タブをクリックし、[権限を付与] をクリックします。

      2. [権限を付与] パネルの [アクセスポリシー] セクションで、AliyunSTSAssumeRoleAccess アクセスポリシーを選択し、[OK] をクリックします。

      3. ロールの詳細ページの [基本情報] セクションで、RAM ロールの ARN を表示して記録します。詳細については、「RAM ロールの ARN を表示する方法」をご参照ください。

  2. アカウント B で、RAM ロールを作成し、プライベートイメージをプルする権限を付与し、アカウント A の RAM ロールがこのロールを借用できるようにします。

    1. スクリプトエディターを使用して信頼ポリシーを編集し、信頼できる Alibaba Cloud アカウントの RAM ロールを作成して、アカウント A がロールを借用できるようにします。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "<ARN of the role created in Account A>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    2. 次の内容でカスタムポリシーを作成し、ポリシーを RAM ロールに付与します。これにより、ロールにインスタンス情報を取得し、イメージをプルする権限が付与されます。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "cr:GetAuthorizationToken",
                      "cr:ListInstanceEndpoint",
                      "cr:PullRepository"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }
    3. RAM ロールの最大セッション期間を設定します。値は 3,600 秒から 43,200 秒の間です。デフォルト値は 3,600 秒です。

      この値が、後で設定する expireDuration パラメーターの値と同じであることを確認してください。expireDuration の値は、最大セッション期間を超えてはなりません。
    4. ロールの詳細ページの [基本情報] セクションから RAM ロールの ARN を記録します。

  3. アカウント A で、ACK クラスターにパスワードレスコンポーネントをインストールし、その設定項目を変更します。

    コンポーネントの違いの詳細については、「パスワードレスコンポーネントの比較」をご参照ください。

    aliyun-acr-credential-helper マネージドコンポーネント

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. クラスター ページで、目的の クラスター を見つけてその名前をクリックします。左 ナビゲーションウィンドウで、[アドオン] をクリックします。

    3. アドオン」ページで、「セキュリティ」タブを選択します。「Aliyun-acr-credential-helper (管理対象)」カードを見つけ、「インストール」をクリックします。

    4. [Aliyun-acr-credential-helper パラメーター設定] ダイアログボックスで、[RRSA が有効] チェックボックスを選択し、[追加] をクリックします。次のパラメーターを入力し、[OK] をクリックします。

      791184c653f445f62c3387d88ad8bdcf

      関連する ACR Enterprise Edition インスタンスの設定:

      パラメーター

      説明

      instanceId

      ACR インスタンスの ID。複数の ID を指定するには、カンマ (,) で区切ります。

      cri-XXXXX

      regionId

      ACR インスタンスのリージョン ID。

      cn-hangzhou

      domains

      ACR インスタンスが使用するドメイン名。ACR インスタンスのすべてのエンドポイント (パブリックおよび VPC) を入力します。個々のドメイン名を指定するには、カンマ (,) で区切ります。

      XXXXX-registry.cn-hangzhou.cr.aliyuncs.com

      assumeRoleARN

      ACR インスタンス所有者の RAM ロールの ARN。アカウント B で作成した RAM ロールの ARN を入力します。

      acs:ram::100XXXXXXXX9630:role/XXXX

      expireDuration

      クロスアカウントシナリオにおける一時的な認証情報の有効期間。アカウント B で作成した RAM ロールの最大セッション期間を入力します。

      3600

      rrsaRoleARN

      ACK クラスター所有者の RAM ロールの ARN。アカウント A で作成した RAM ロールの ARN を入力します。

      acs:ram::128XXXXXXXXXX09011:role/XXXX

      rrsaOIDCProviderRoleARN

      ACK クラスターの OIDC IdP の ARN。アカウント A の ACK クラスターの RRSA OIDC IdP の ARN を入力します。

      acs:ram::128XXXXXXXXXX09011:oidc-provider/ack-rrsa-c8864XXXXXXXXXXXXXXXXXX99356a636

      他のパラメーターの詳細については、「コンポーネント設定」をご参照ください。

    aliyun-acr-credential-helper コンポーネント

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

    3. [アプリケーション] ページで、[セキュリティ] タブをクリックします。[aliyun-acr-credential-helper] コンポーネントを見つけて、[インストール] をクリックします。表示されるダイアログボックスで、[tokenMode] オプションを [auto] に設定し、[OK] をクリックします。

      04479cf3d9857845bf530ea2f0850a60

    4. パスワードレスコンポーネントの ConfigMap を変更します。

      1. 左側のナビゲーションウィンドウで、[設定] > [ConfigMap] を選択します。

      2. [ConfigMap] ページの上部で、[名前空間] ドロップダウンリストから [kube-system] を選択します。次に、[acr-configuration] の [操作] 列で [YAML の編集] をクリックし、次の例のように設定を変更します。

        data:
          service-account: "default"
          watch-namespace: "all"
          expiring-threshold: "15m"
          notify-email: "c*@example.com"
          acr-registry-info: |
            - instanceId: "cri-xxx"                                   # ACR インスタンスの ID。
              regionId: "cn-hangzhou"                                 # ACR インスタンスのリージョン ID。
              domains: "xxxxx-registry.cn-hangzhou.cr.aliyuncs.com"   # ACR インスタンスのエンドポイント。
              rrsaRoleARN: "<ARN of the role created in Account A>"
              rrsaOIDCProviderRoleARN: "<The ARN of the OIDC IdP from the basic information page of the ACK cluster in the console for Account A.>"
              assumeRoleARN: "<ARN of the role created in Account B>"
              expireDuration: 3600                                    # アカウント B の RAM ロールの最大セッション期間。デフォルト値は 3600 です。             
          rrsa: |
            enable: true                                              # パスワードレスコンポーネントの RRSA 機能を有効にします。 

Worker RAM ロールの権限借用を使用

アカウント A の ACK クラスターで、クラスターのデフォルトの Worker RAM ロールが、認証情報なしでイメージをプルする権限を持つアカウント B の RAM ロールを借用するように設定します。これにより、ACK クラスターはアカウント B のプライベートイメージにアクセスしてプルできます。

image
  1. アカウント A で、クラスターの Worker RAM ロールを表示し、ロールを借用する権限を付与します。

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。

    3. [クラスター情報] ページで、[基本情報] タブをクリックします。[クラスターリソース] エリアで、[Worker RAM ロール] の右側にあるリンクをクリックします。

    4. AliyunSTSAssumeRoleAccess ポリシーをロールにアタッチして、ロールを借用する権限を付与し、その ARN を記録します。詳細については、「RAM ロールの権限を管理する」をご参照ください。

      1. ロールの詳細ページで、[権限] タブをクリックし、[権限を付与] をクリックします。

      2. [権限を付与] パネルの [アクセスポリシー] セクションで、AliyunSTSAssumeRoleAccess アクセスポリシーを選択し、[OK] をクリックします。

      3. ロールの詳細ページの [基本情報] セクションで、RAM ロールの ARN を表示して記録します。詳細については、「RAM ロールの ARN を表示する方法」をご参照ください。

  2. アカウント B で、RAM ロールを作成し、プライベートイメージをプルする権限を付与し、アカウント A の ACK クラスターの Worker RAM ロールがこのロールを借用できるようにします。

    1. 信頼できる Alibaba Cloud アカウントの RAM ロールを作成します

    2. 次の内容でカスタムポリシーを作成し、ポリシーを RAM ロールに付与します。これにより、ロールにインスタンス情報を取得し、イメージをプルする権限が付与されます。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "cr:GetAuthorizationToken",
                      "cr:ListInstanceEndpoint",
                      "cr:PullRepository"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }
    3. RAM ロールの基本情報ページで、[信頼ポリシー] タブをクリックし、[信頼ポリシーの編集] をクリックします。ポリシーを次の内容で更新して、アカウント A の ACK クラスターの Worker RAM ロールがアカウント B の RAM ロールを借用できるようにします。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "<ARN of the role created in Account A>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    4. ロールの詳細ページの [基本情報] セクションで、RAM ロールの ARN を表示して記録します。詳細については、「RAM ロールの ARN を表示する方法」をご参照ください。

  3. アカウント A で、ACK クラスターにパスワードレスコンポーネントをインストールし、その設定項目を変更します。

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

    3. [アプリケーション] ページで、[セキュリティ] タブをクリックします。[aliyun-acr-credential-helper] コンポーネントを見つけて、[インストール] をクリックします。表示されるダイアログボックスで、[tokenMode][workerRole] に設定し、[OK] をクリックします。

      100f8cde3395436575996fbbd290dc56

    4. パスワードレスコンポーネントの ConfigMap を変更します。

      1. 左側のナビゲーションウィンドウで、[設定] > [ConfigMap] を選択します。

      2. [ConfigMap] ページの上部で、[名前空間] ドロップダウンリストから [kube-system] を選択します。次に、[acr-configuration] の [操作] 列で [YAML の編集] をクリックし、次の例のように設定を変更します。

        data:
            service-account: "default"
            watch-namespace: "all"
            expiring-threshold: "15m"
            notify-email: "c*@example.com"
            acr-registry-info: |
              - instanceId: "cri-xxx"                                    # ACR Enterprise Edition インスタンスの ID。
                regionId: "cn-hangzhou"                                  # ACR Enterprise Edition インスタンスのリージョン ID。
                domains: "xxxxx-registry.cn-hangzhou.cr.aliyuncs.com"    # ACR Enterprise Edition インスタンスのエンドポイント。
                assumeRoleARN: "<ARN of the role created in Account B>"
                expireDuration: 3600                                     # アカウント B の RAM ロールの最大セッション期間。デフォルト値は 3600 です。

RAM ユーザーの AccessKey ペアの使用

アカウント A の ACK クラスターでは、パスワードレスコンポーネントがアカウント B の RAM ユーザーの AccessKey ID と AccessKey Secret を使用して、アカウント B からプライベートイメージをプルします。この方法は設定が簡単ですが、AccessKey ID と AccessKey Secret がプレーンテキストで保存されるため、セキュリティリスクがあります。

  1. アカウント B で RAM ユーザーを作成し、[cr.*] 権限を付与します。

    1. RAM ユーザーを作成します

    2. 次の内容でカスタムポリシーを作成し、ポリシーを RAM ユーザーに付与します。これにより、RAM ユーザーにインスタンス情報を取得し、イメージをプルする権限が付与されます。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "cr:GetAuthorizationToken",
                      "cr:ListInstanceEndpoint",
                      "cr:PullRepository"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }
    3. AccessKey ペアを作成し、AccessKey IDAccessKey Secret を記録します。

アカウント A で、ACK クラスターにパスワードレスコンポーネントをインストールし、その設定項目を変更します。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。

  3. ACK クラスターページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons をクリックします。

  4. [アプリケーション] ページで、[セキュリティ] タブをクリックします。[aliyun-acr-credential-helper] コンポーネントを見つけて、[インストール] をクリックします。表示されるダイアログボックスで、[tokenMode] オプションを [auto] に設定し、[OK] をクリックします。

    04479cf3d9857845bf530ea2f0850a60

  5. パスワードレスコンポーネントの ConfigMap を変更します。

    1. 左側のナビゲーションウィンドウで、[設定] > [ConfigMap] を選択します。

    2. ConfigMap」ページの上部で、[名前空間] ドロップダウンから [kube-system] を選択します。次に、[acr-configuration][YAML の編集] をクリックし、次の例に示すように構成を変更します。

    3. data:
          service-account: "default"
          watch-namespace: "all"
          expiring-threshold: "15m"
          notify-email: "c*@example.com"
          acr-registry-info: |
            - instanceId: ""                        # ACR Enterprise Edition インスタンスの ID。             
              regionId: "cn-hangzhou"               # ACR Enterprise Edition インスタンスのリージョン ID。    
              customAccessKey: "xxxxx"              # アカウント B の RAM ユーザーの AccessKey ID。
              customAccessKeySecret: "xxxxxx"       # アカウント B の RAM ユーザーの AccessKey Secret。 

ステップ 3: アカウント間でのイメージプルの検証

説明

検証手順はデモンストレーションのみを目的としています。詳細については、「イメージのビルド」および「ワークロードの作成」をご参照ください。

  1. アカウント B の ACR Enterprise インスタンスで、必要なコンテナイメージの [パブリックエンドポイント] または [VPC] アドレスを取得します。

    image

  2. アカウント A の ACK クラスターで、[ワークロード] > [デプロイメント] を選択し、コンテナイメージからワークロードを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: ******.cn-hangzhou.cr.aliyuncs.com/instance/instancetest:v1 # アカウント B の ACR イメージのアドレスを指定します。 
            ports:
            - containerPort: 80
  3. ワークロードの Pod イベントに Successfully pulled image "XXX" in XXXs (XXXs including waiting). Image size: XXX bytes. というメッセージが表示された場合、パスワードレスコンポーネントを使用して別のアカウントからイメージが正常にプルされたことを意味します。

    ecb56ef14d98a537ebe64f6bd9fd883d

よくある質問

100.0.0.0/8 CIDR ブロックの IP アドレスの競合を解決するにはどうすればよいですか?

ルーティングルールを設定する際、認証ドメイン名と OSS ドメイン名から解決される IP アドレスは 100.0.0.0/8 CIDR ブロックにあります。内部ネットワークもこの CIDR ブロックの IP アドレスを使用している場合、ACR Enterprise Edition インスタンスにアクセスする際に競合が発生する可能性があります。これらの競合を回避するには、次の手順に従ってください。

認証ドメイン名の CIDR ブロックの競合

インスタンスが認証ドメイン名を引き継ぐように設定できます。これにより、インスタンスドメイン名にアクセスするだけで済み、認証ドメイン名の CIDR ブロックとの競合が解決されます。

  1. Container Registry コンソールにログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. [インスタンス] ページで、管理したい Enterprise Edition インスタンスをクリックします。

  4. インスタンス管理ページのナビゲーションウィンドウで、[リポジトリ管理] > [ドメイン] を選択します。[ドメイン] ページで、[認証ドメイン名のインスタンス引き継ぎ] スイッチをオンにします。

    重要

    インスタンスが認証ドメイン名を引き継ぐ機能を使用するには、チケットを送信して、Enterprise Edition インスタンスをホワイトリストに追加する必要があります。

  5. [認証ドメイン名のインスタンス引き継ぎを有効にする確認] プロンプトで、[OK] をクリックします。

OSS ドメイン名の CIDR ブロックの競合

PrivateLink を使用してプライベートネットワーク経由で OSS リソースにアクセスできます。次に、元のターゲット OSS ドメイン名の CNAME レコードを PrivateLink エンドポイントにポイントします。