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

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

最終更新日:Dec 14, 2024

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

前提条件

説明

managed-aliyun-acr-credential-helperを使用してAlibaba Cloudアカウント間でイメージをプルする場合、クラスターはKubernetes 1.22以降を実行するACK Serverless ProACK 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パラメーターを設定する必要はありません。

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

    パラメーター

    説明

    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

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

    パラメーター

    説明

    watchNamespace

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

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

    serviceAccount

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

    デフォルト値: Default

    説明

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

    expiringThreshold

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

    デフォルト値: 15分。 デフォルト値を使用することを推奨します。 デフォルト値は、キャッシュされたシークレットが有効期限の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以降を実行するACK Basicクラスター、ACK Proクラスター、ACK Serverless Proクラスターでのみ、Container Registry Enterprise Editionインスタンス (Basic EditionおよびAdvanced Editionインスタンスを含む) からイメージをプルするようにRRSAを設定できます。

重要
  • 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の設定後にaliyun-acr-credential-helperに対応するポッドを削除する必要があります。 これにより、RRSAが有効になります。

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

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

    クラスターで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>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    2. アカウントBのRAMロールの設定

      アカウントBでContainer Registry関連の権限を持つRAMロールを作成します。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秒です。 acr-configuration ConfigMapを設定するときは、次の手順7expireDurationパラメーターを設定する必要があります。 MaxSessionDurationとexpireDurationに同じ値を指定することを推奨します。 expireDurationの値は、MaxSessionDurationの値以下にすることができます。

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

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

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

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

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