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

Container Registry:managed-aliyun-acr-credential-helperを使用して、シークレットを使用せずにイメージをプルする

最終更新日:Aug 06, 2024

Container Service for Kubernetes (ACK) Proクラスター、ACKサーバーレスクラスター、およびACKエッジクラスターでは、managed-aliyun-acr-credential-helperコンポーネントを使用して、Container Registry Enterprise EditionインスタンスおよびContainer Registry Personal Editionインスタンスからイメージをプルできます。 このトピックでは、managed-aliyun-acr-credential-helperを使用して一般的なシナリオでプライベートイメージをプルする方法について説明します。

前提条件

  • Kubernetes 1.22以降を実行するACK Proクラスター、ACKサーバーレスクラスター、ACK Edge、またはContainer Compute Service (ACS) クラスターが作成されます。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。

  • Container Registry Enterprise Editionインスタンスが作成されました。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。

  • Container Registryには、関連するAlibaba Cloudサービスにアクセスするために必要な権限が付与されます。 詳細については、「クラウドリソースへのアクセス許可」をご参照ください。

  • ユーザー側のバージョンのmanaged-aliyun-acr-credential-helperはクラスターに存在しません。

説明

managed-aliyun-acr-credential-helperを使用してAlibaba Cloudアカウント間でイメージをプルする場合、クラスターはKubernetes 1.22以降を実行するACKサーバーレスクラスター、ACK Proクラスター、またはACSクラスターである必要があります。

使用説明

managed-aliyun-acr-credential-helperコンポーネントは、Container Registryコンソールで設定を読み取り、プライベートイメージを取得します。 managed-aliyun-acr-credential-helperコンポーネントを設定した後、コンポーネントはクラスターにシークレットを生成し、設定で指定したサービスアカウントにシークレットを関連付けます。 既定では、このサービスアカウントを使用するすべてのポッドは、コンポーネントによって生成されたシークレットを使用してイメージをプルします。 これにより、画像をプルするときに他のシークレットを使用する必要がなくなります。

managed-aliyun-acr-credential-helperコンポーネントのインストール

managed-aliyun-acr-credential-helperコンポーネントをインストールしている場合は、そのコンポーネントが最新バージョンであることを確認してください。 それ以外の場合は、コンポーネントを更新します。 コンポーネントを更新しても、ビジネスに悪影響はありません。 詳細については、「コンポーネントの管理」をご参照ください。

aliyun-acr-credential-helperコンポーネントの詳細については、「aliyun-acr-credential-helper」をご参照ください。

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (管理対象) カードを見つけ、カードの右下隅にある [インストール] をクリックします。

  4. [aliyun-acr-credential-helperのインストール] ページで、AcrInstanceInfoの横にある [追加] をクリックして、シークレットを使用せずにイメージを取得するACRインスタンスを1つ以上追加します。 Container Registry Personal Editionインスタンスからイメージを取得する場合は、AcrInstanceInfoの横にある + Addをクリックする必要もあります。 ただし、instanceIdパラメーターを設定する必要はありません。

    次の表に、Enterprise Editionインスタンスを指定するパラメーターを示します。

    パラメーター

    説明

    instanceId

    Container RegistryインスタンスのID。 インスタンスIDは、Container Registryコンソールで取得できます。

    • Container Registry Enterprise Editionインスタンスの場合、このパラメーターの値はcri- で始まります。

    • Container Registry Personal Editionインスタンスの場合は、パラメーターを空のままにします。

    regionId

    Container RegistryインスタンスのリージョンID。 Container RegistryコンソールでリージョンIDを取得できます。 クラスターがContainer Registryインスタンスと同じリージョンにない場合は、このパラメーターを指定する必要があります。 クラスターがContainer Registryインスタンスと同じリージョンにある場合は、このパラメーターを空のままにすることができます。

    たとえば、中国 (杭州) リージョンのリージョンIDはcn-Hangzhouです。

    ドメイン

    デフォルトでは、Container Registry Enterprise Editionインスタンスのすべてのドメイン名が表示されます。 特定のドメイン名を指定できます。 複数のドメイン名はコンマ (,) で区切ります。

    example1.com,example2.com

    assumeRoleARN

    Container Registryインスタンスを所有するAlibaba Cloudアカウントが引き受けるRAMロールのAlibaba Cloudリソース名 (ARN) 。

    acs:ram::aaa

    expireDuration

    Alibaba Cloudアカウント間でイメージをプルするために使用されるシークレットの有効期間。

    デフォルト値は 3600 です。 有効な値は 3600~43200 です。 単位は秒です。 アカウントBのRAMロールのMaxSessionDurationを43200に設定します。

    rrsaRoleARN

    クラスターを所有するAlibaba Cloudアカウントが引き受けるRAMロールのARN。

    acs:ram::bbb

    rrsaOIDCProviderRoleARN

    クラスターで使用されるOpenID Connect (OIDC) プロバイダーのARN。

    acs:ram::ccc

    service-account

    managed-aliyun-acr-credential-helperコンポーネントによって生成されたシークレットに関連付けられているサービスアカウント。

    デフォルト値: Default

    説明

    複数のサービスアカウントを指定できます。 複数のサービスアカウントをコンマ (,) で区切ります。 アスタリスク (*) の値は、指定された名前空間内のすべてのサービスアカウントを示します。

    Container Registryインスタンスのパラメーターを設定した後、クラスターのパラメーターを設定する必要があります。 次の表に、クラスターのパラメーターを示します。

    パラメーター

    説明

    watchNamespace

    シークレットを使用せずにイメージを取得する名前空間。

    デフォルト値: Defaultallの値は、Container Registryインスタンスのすべての名前空間を指定します。 複数の名前空間を設定できます。 複数の名前空間は、コンマ (,) で区切ります。 パラメーターのビジネス名前空間を設定することを推奨します。 可能であれば、クラスターのシステムコンポーネントが格納されているすべてまたは名前空間にパラメーターを設定しないでください。 そうしないと、システムコンポーネントイメージがプルされない可能性があります。

    serviceAccount

    managed-aliyun-acr-credential-helperコンポーネントによって生成されたシークレットに関連付けられているサービスアカウント。

    デフォルト値: Default。 複数のサービスアカウントを指定できます。 複数のサービスアカウントをコンマ (,) で区切ります。 アスタリスク (*) の値は、指定された名前空間内のすべてのサービスアカウントを示します。

    expiringThreshold

    キャッシュされたシークレットが期限切れになるまでの期間。

    デフォルト値: 15m。 デフォルト値を使用することを推奨します。 デフォルト値は、キャッシュされたシークレットの有効期限が切れる15分前にシークレットが更新されることを指定します。

    RRSAを有効にするかどうかを指定します

    チェックボックスをオンにして、クラスターおよびmanaged-aliyun-acr-credential-helperコンポーネントのサービスアカウントのRAMロール (RRSA) 機能を設定すると、この機能が有効になります。

    デフォルトでは、このオプションは選択されていません。 RRSAを設定してこのチェックボックスをオンにすると、Alibaba Cloudアカウント間でContainer Registryインスタンスからイメージをプルできます。

次の表に、プライベートイメージを取得するシナリオを示します。

設定方法

シナリオ

シナリオ1: 同じアカウント内の画像をプルする

既定では、managed-aliyun-acr-credential-helperコンポーネントはこのメソッドを使用してプライベートイメージをプルします。 この方法は、クラスターとContainer Registryインスタンスが同じAlibaba Cloudアカウントに属している場合に適用されます。

シナリオ2: リージョン間で画像をプル

この方法は、クラスターとContainer Registryインスタンスが異なるリージョンにある場合に適用できます。

シナリオ3: アカウント間で画像をプルする

この方法は、RRSAを設定してAlibaba Cloudアカウント間でイメージをプルする場合に適用されます。

シナリオ1: 同じアカウント内の画像をプルする

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。

  3. 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  4. [アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (Managed) カードを見つけ、カードの右下隅にある [設定] をクリックします。

  5. aliyun-acr-credential-helper Parametersダイアログボックスで、[追加] をクリックします。 instanceIdフィールドに、Container Registry Enterprise EditionインスタンスのIDを入力します。 [OK] をクリックします。

シナリオ2: リージョン間で画像をプルする

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。

  3. 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  4. [アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (Managed) カードを見つけ、カードの右下隅にある [設定] をクリックします。

  5. aliyun-acr-credential-helper Parametersダイアログボックスで、[追加] をクリックします。 instanceIdフィールドに、Container Registry Enterprise EditionインスタンスのIDを入力します。 regionIdフィールドに、Container Registry Enterprise EditionインスタンスのリージョンIDを入力します。 [OK] をクリックします。

シナリオ3: アカウント間で画像をプルする

RRSAを設定してアカウント間でイメージをプル

RRSA機能を使用して、クラスター内のポッドでアクセス制御を実行できます。

Kubernetes 1.22以降を実行するACKACK ProACK ServerlessACK Serverless Proクラスターでのみ、RRSA機能を使用してContainer Registry Enterprise Edition (Basic Edition、Standard Edition、Advanced Editionを含む) インスタンスからイメージをプルできます。

重要
  • RRSA機能を有効にすると、managed-aliyun-acr-credential-helperによって生成されたシークレットを使用して、Container Registry Personal Editionインスタンスのプライベートイメージをプルすることはできません。 RRSA機能を有効にすると、AccessKeyペア方式など、このトピックで説明されている他の認証方式を使用することはできません。

  • managed-aliyun-acr-credential-helperのRRSA機能を有効にするには、ACKコンソールの [クラスタ情報] ページの [基本情報] タブの [クラスタ情報] セクションで [RRSAの有効化] をクリックしてRRSAを有効にし、managed-aliyun-acr-credential-helperのRRSAを設定する必要があります。 managed-aliyun-acr-credential-helperにRRSAを設定し、ACKコンソールでクラスターのRRSAを有効にする場合、RRSAの設定後にmanaged-aliyun-acr-credential-helperに対応するポッドを削除する必要があります。 これにより、RRSAが有効になります。

  1. クラスターのRRSA機能を有効にします。 詳細については、「RRSAの有効化」をご参照ください。

  2. アカウント間でContainer Registryリソースにアクセスするために必要な権限を付与します。

    クラスターでRRSA機能を有効にした後、次の操作を実行して、RRSA for managed-aliyun-acr-credential-helperを有効にする必要があります。 たとえば、現在のクラスターはアカウントAにあり、Container RegistryインスタンスはアカウントBにあります。Container Registryインスタンスのイメージを取得する場合は、アカウントAのクラスターにアカウントBのContainer Registryリソースにアクセスする権限を付与する必要があります。

    1. アカウントaのRAMロールの設定

      アカウントaでRAMロールを作成し、AliyunSTSAssumeRoleAccessポリシーをRAMロールに関連付けます。 このポリシーは、アカウントAのロールを引き受ける権限をRAMロールに付与します。RAMロールの信頼ポリシーを変更します。

      • 例の <oidc_issuer_url> をクラスターのOIDCプロバイダーのURLに置き換えます。 URLは、ACKコンソールの [クラスター情報] ページの [基本情報] タブで取得できます。

      • 例の <oidc_provider_arn> を、クラスターのOIDCプロバイダーのARNに置き換えます。 ARNは、ACKコンソールの [クラスター情報] ページの [基本情報] タブで取得できます。

      {
        "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>"
              ]
            }
          }
        ],
        "バージョン": "1"
      } 
    2. アカウントBのRAMロールの設定

      アカウントBにContainer Registry関連の権限を持つRAMロールを作成します。[信頼ポリシー管理] タブで、信頼ポリシーの [プリンシパル] フィールドにアカウントaのRAMロールのARNを入力します。 次のポリシーをアカウントBのRAMロールに関連付けます。このポリシーは、アカウントBのRAMロールに、Container Registryインスタンスの情報を取得し、インスタンスからイメージをプルする権限を付与します。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "cr:GetAuthorizationToken" 、
                      "cr:ListInstanceEndpoint" 、
                      "cr:PullRepository"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }

      RAMロールのMaxSessionDurationパラメーターを設定できます。 このパラメーターの有効値は3600〜43200秒です。 次の "aliyun-acr-credential-helper Parameters" ダイアログボックスでexpireDurationパラメーターを設定する必要があります。 MaxSessionDurationとexpireDurationに同じ値を指定することを推奨します。 expireDurationの値は、MaxSessionDurationの値以下にすることができます。

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

  4. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。

  5. 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  6. [アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (管理対象) カードを見つけ、カードの右下隅にある [設定] をクリックします。

  7. aliyun-acr-credential-helper Parametersダイアログボックスで、[追加] をクリックし、assumeRoleARN、expireDurationrrsaRoleARN、およびrrrsaOIDCProviderRoleARNパラメーターの値を指定します。 [OK] をクリックします。配置项.jpg