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

Container Registry:シークレットフリーコンポーネントを使用してアカウント間でイメージをプルする

最終更新日:Aug 20, 2025

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

選択ガイド

まず、ビジネス要件を満たすネットワーク接続方法とアカウント認証方法を選択します。 次に、選択した認証方法をサポートするシークレットフリーコンポーネントを選択します。

詳細については、「ネットワーク接続を構成する」、「アカウント認証とシークレットフリーコンポーネントを構成する」、および「クロスアカウントイメージのプルを確認する」をご参照ください。
説明

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

前提条件

  • シークレットフリーコンポーネントで使用される RAM ロールには、必要な 権限が付与されています。

  • ACK クラスタはシークレットフリーコンポーネントをサポートしています。

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

      • Kubernetes 1.22 以降を実行する ACK Pro マネージドクラスター

      • Kubernetes 1.22 以降を実行する Serverless Kubernetes クラスター

      • Kubernetes 1.22 以降を実行する ACK Edge クラスター

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

      • Kubernetes 1.20.0 以降を実行する ACK マネージドクラスター Basic Edition

      • Kubernetes 1.20.0 以降を実行する ACK Pro マネージドクラスター

      • Kubernetes 1.20.0 以降を実行する 専用クラスター

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

    重要
    • 2024 年 9 月 8 日以前に作成された Container Registry Personal Edition インスタンスと Container Registry Enterprise Edition インスタンスのみが aliyun-acr-credential-helper をサポートしています。

    • 2024 年 9 月 9 日以降に作成された Container Registry Personal Edition インスタンスは、aliyun-acr-credential-helper をサポートしていません。 2024 年 9 月 8 日より後に作成された Container Registry Personal Edition インスタンスからイメージをプルする場合は、Personal Edition インスタンスへのログインに使用するユーザー名とトークンをシークレットに保存し、ワークロードの YAML ファイルの imagePullSecrets パラメーターでシークレットを参照することをお勧めします。

手順

ステップ 1:ネットワーク接続を構成する

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

  • インターネット接続:ACR Enterprise Edition インスタンスのパブリックエンドポイントを構成し、ACK クラスタのインターネットアクセスを有効にします。 イメージはインターネット経由で転送されます。 ただし、インターネット経由でデータを転送することは安全性に劣り、EIP とデータ転送料金が発生します。

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

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

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

比較項目

インターネット接続

VPC ピアリング接続

CEN 接続

ネットワークタイプ

インターネット

プライベート

プライベート

課金

EIP の課金方法に基づいて料金が請求されます。

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

  • VPC が異なるリージョンにある場合、Cloud Data Transfer (CDT) は、送信データ転送に対してデータ転送料金を請求します。

CEN の 課金ルールに基づいて料金が請求されます。

主な機能

既存のネットワークアーキテクチャを変更する必要はありません。 セキュリティのために、インバウンドルールとアクセスコントロールを検討する必要があります。

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

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

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

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

構成手順

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

    インターネットのアクセスコントロールポリシーを構成することにより、ACR Enterprise Edition インスタンスをリモートで安全に管理およびアクセスできます。
  2. ACK クラスタのインターネットアクセスを有効にする

    ACR Enterprise Edition インスタンスからイメージをプルするために、インターネット経由で外部リソースにアクセスするように ACK クラスタを構成します。
  1. ACR インスタンスの内部 DNS 解決を構成する

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

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

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

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

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

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

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

    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 ペアを使用する

クラスタタイプ

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

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

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

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

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

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

    コンポーネントを v23.02.06.1-74e2172-aliyun 以降にアップグレードする必要があります。

コンポーネントの違いの詳細については、「シークレットフリーコンポーネントの比較」をご参照ください。

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

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

権限の粒度

ポッドレベル(詳細)

クラスタレベル(中間)

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

セキュリティ

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

中間。 すべてのポッドが権限を共有するため、過剰な権限リスクが発生する可能性があります。

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

シナリオ

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

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

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

RRSA を使用する

アカウント A の ACK クラスタで、資格情報なしでイメージをプルする権限を持つ アカウント B の RAM ロールをアシュームするように特定の ServiceAccount を構成します。 これにより、ACK クラスタは アカウント B からプライベートイメージにアクセスしてプルできます。

説明

シークレットフリーコンポーネントの RRSA 機能を有効にするには、最初にクラスタで RRSA を有効にしてから、シークレットフリーコンポーネントの RRSA を構成する必要があります。 これらの手順を間違った順序で実行すると、RRSA 機能をアクティブにするためにシークレットフリープラグインのポッドを削除する必要があります。

  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 Resource Name (ARN) が表示されます。 image

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

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

      • 例の中の <oidc_provider_arn> を、前の手順で取得した現在のクラスタの OIDC IdP の 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] ポリシーを見つけて選択し、[権限の付与の確認] をクリックします。

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

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

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

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "<アカウント A で作成されたロールの ARN>"
              ]
            }
          }
        ],
        "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. [設定項目] ページで、[名前空間] ドロップダウンリストから [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: "<アカウント A で作成されたロールの ARN>"
              rrsaOIDCProviderRoleARN: "<アカウント A のコンソールの ACK クラスタの基本情報にある OIDC IdP の ARN。>"
              assumeRoleARN: "<アカウント B で作成されたロールの ARN>"
              expireDuration: 3600                                    # アカウント B の RAM ロールの最大セッション時間。 デフォルト値は 3600 です。             
          rrsa: |
            enable: true                                              # シークレットフリーコンポーネントの RRSA 機能を有効にします。

Worker RAM ロールの引き受けを使用する

アカウント A の ACK クラスタで、資格情報なしでイメージをプルする権限を持つ アカウント B の RAM ロールをアシュームするように、クラスタのデフォルト Worker RAM ロールを構成します。 これにより、ACK クラスタは アカウント B からプライベートイメージにアクセスしてプルできます。

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

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

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

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

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

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

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

      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": [
                "<アカウント A で作成されたロールの ARN>"
              ]
            }
          }
        ],
        "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. [設定項目] ページで、[名前空間] ドロップダウンリストから [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: "<アカウント B で作成されたロールの ARN>"
                expireDuration: 3600                                     # アカウント B の RAM ロールの最大セッション時間。 デフォルト値は 3600 です。

RAM ユーザーの AccessKey ペアを使用する

アカウント A の ACK クラスタでは、シークレットフリーコンポーネントは、アカウント B からプライベートイメージをプルするために、アカウント B の RAM ユーザーの AccessKey ID と AccessKey シークレットを保存します。 この方法は構成は簡単ですが、AccessKey ID と AccessKey シークレットがプレーンテキストで保存されるため、セキュリティリスクが生じます。

  1. アカウント B で、RAM ユーザーを作成し、RAM ユーザーに [cr.*] 権限があることを確認します。

    1. RAM ユーザーを作成する

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

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "cr:GetAuthorizationToken",
                      "cr:ListInstanceEndpoint",
                      "cr:PullRepository"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }
    3. RAM ユーザーの AccessKey ペア情報を表示する、およびそれを記録します。

  2. アカウント A で、ACK クラスタのシークレットフリーコンポーネントをインストールし、その設定項目を変更します。

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

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

    3. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。 左側のウィンドウで、[操作] > [アドオン] を選択します。

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

      04479cf3d9857845bf530ea2f0850a60

    5. シークレットフリーコンポーネントの ConfigMap 設定項目を変更します。

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

      2. [設定項目] ページで、[名前空間] ドロップダウンリストから [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 シークレット。

ステップ 3:クロスアカウントイメージプルを確認する

説明

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

  1. アカウント B の ACR Enterprise Edition インスタンスで、必要に応じて、コンテナイメージの [パブリックエンドポイント] または [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. ワークロードのポッドイベントに Successfully pulled image "XXX" in XXXs (XXXs including waiting). Image size: XXX bytes. というメッセージが表示された場合は、シークレットフリーコンポーネントを使用して別のアカウントからイメージが正常にプルされたことを示します。

    ecb56ef14d98a537ebe64f6bd9fd883d

よくある質問

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

ルーティングルールを設定すると、認証サービスと OSS バケットのドメイン名が 100 CIDR ブロックに属する IP アドレスにマッピングされます。 100 CIDR ブロックが Enterprise Edition インスタンスが存在する VPC に割り当てられている場合、Enterprise Edition インスタンスにアクセスするときにドメイン名の競合が発生する可能性があります。競合の発生を防ぐために、次のソリューションを使用できます。

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

Enterprise Edition インスタンスが認証サービスのドメイン名を引き継ぐことを許可する機能を有効にすることができ、Enterprise Edition インスタンスのドメイン名にのみアクセスする必要があります。これにより、認証サービスのドメイン名にマッピングされている CIDR ブロックとの競合が解決されます。

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

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

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

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

    重要

    Enterprise Edition インスタンスが認証ドメイン名を引き継ぐことを許可する機能を使用する場合、チケットを送信する ことで、Enterprise Edition インスタンスをホワイトリストに追加するようリクエストしてください。

  5. [インスタンスによる認証ドメイン名の引き継ぎを有効にすることを確認します] メッセージで、[OK] をクリックします。

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

OSS バケットのドメイン名にマッピングされている CIDR ブロックとの競合が発生しないようにするには、PrivateLink を使用して OSS バケットにアクセスし、CNAME レコードを追加して OSS バケットのドメイン名を PrivateLink 接続のドメイン名にポイントできます。詳細については、「PrivateLink を使用して OSS にアクセスする」をご参照ください。