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

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

最終更新日:Dec 11, 2024

Container Service for Kubernetes (ACK) クラスターのaliyun-acr-credential-helperコンポーネントを設定して、ACKクラスターのContainer Registry Enterprise Editionインスタンスからプライベートイメージをプルするときに自動的にシークレットを取得できます。 これにより、ユーザー名と秘密を手動で提供する必要がなくなります。

前提条件

使用上の注意

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

重要

Helmグラフなどのアプリケーションをデプロイするためのサービスアカウントを作成する場合、サービスアカウントはaliyun-acr-credential-helperによって生成されるシークレットに関連付けられる期間を必要とします。 画像を取得する前に、webhook機能を使用してサービスアカウントにシークレットを挿入することをお勧めします。 詳細については、このトピックの「FAQ」セクションを参照してください。

次の表では、aliyun-acr-credential-helperコンポーネントを使用してシークレットを使用せずにプライベートイメージをプルする場合の制限について説明します。

項目

使用状況ノート

ミラーリング

  • 現在のRAM (Resource Access Management) ユーザーに属するContainer Registryインスタンスからプライベートイメージをプルできます。

  • 認証または別のRAMユーザーのAccessKeyペアを使用して、アカウント間でプライベートイメージをプルすることもできます。

  • コンポーネントを使用して、Container Registry Enterprise Editionインスタンスからプライベートイメージをプルできます。

クラスタータイプとバージョン

  • サポートされるクラスタタイプ:

    • v1.11.2以降のACK専用クラスター。 クラスターのバージョンがv1.11.2より前の場合は、クラスターバージョンを更新する必要があります。 詳細については、「ACKクラスターの手動更新」をご参照ください。

    • すべてのバージョンのACK管理クラスター。

  • クラスターの複数の名前空間からシークレットを使用せずにイメージをプルできます。

注意事項

項目

注意

imagePullSecrets

  • デプロイメントなどのKubernetesリソースのテンプレートでimagePullSecretを指定した場合、aliyun-acr-credential-helperコンポーネントは無効になります。 コンポーネントを使用する場合は、imagePullSecretを指定しないでください。

  • 既定では、aliyun-acr-credential-helperコンポーネントの設定により、すべての名前空間の既定のサービスアカウントのimagePullSecretsパラメーターが上書きされます。 これらのサービスアカウントは、kube-system名前空間のacr-configuration ConfigMapのservice-accountパラメーターが変更されると自動的に変更されます。

ServiceAccount

  • DeploymentなどのKubernetesリソースがカスタムサービスアカウントを使用している場合、aliyun-acr-credential-helperコンポーネントの設定ファイルでservice-accountパラメーターを変更する必要があります。 このようにして、コンポーネントはカスタムサービスアカウントを使用してイメージをプルする権限を与えられます。

  • クラスターにサービスアカウントを作成したら、imagePullSecretsパラメーターの値にacr-credentialで始まるシークレットが含まれているかどうかを確認します。 はいの場合、サービスアカウントはシークレットに関連付けられ、サービスアカウントを使用するアプリケーションはシークレットを使用して画像をプルできます。 サービスアカウントを使用するアプリケーションは、認証の失敗により、サービスアカウントが作成された直後にイメージをプルできない場合があります。

リージョン

プルするプライベートイメージがACKクラスターのリージョンにあるかどうかを確認します。

デフォルトでは、ACKクラスターのリージョンにあるContainer Registryインスタンスからのみプライベートイメージをプルできます。 リージョン間で画像をプルする場合は、このトピックの「シナリオ2: リージョン間で画像をプルする」を参照してください。

YAML 形式

kube-system名前空間のacr-configuration ConfigMapを変更する場合は、このトピックの例と同じインデントを使用するようにしてください。 このトピックで提供されているYAMLコンテンツをエディターに貼り付け、対応する値を置き換えてから、設定を適用することをお勧めします。 これにより、ConfigMapの形式が有効になります。

手順1: aliyun-acr-credential-helperコンポーネントのインストール

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

重要

aliyun-acr-credential-helperコンポーネントが最新バージョンに更新されると、コンポーネントが依存するRAMロールが変更されます。 コンポーネントは、コンポーネントが依存するRAMロールを指定できるように、tokenModeパラメーターを提供します。 コンポーネントが依存するRAMロールの変更による影響の詳細については、「 [製品の変更] aliyun-acr-credential-helperが依存するアクセス許可の取り消し」をご参照ください。

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

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

  3. アドオンページをクリックし、セキュリティタブ、検索aliyun-acr-credential-helperをクリックし、インストール.

  4. [パラメーター] ページで、tokenModeパラメーターのデフォルト値autoを使用し、[OK] をクリックします。

    ACK管理クラスターを最新バージョンに更新すると、aliyun-acr-credential-helperコンポーネントがtokenModeパラメーターを提供します。 コンポーネントのインストール後にパラメーターを変更できます。 コンポーネントが変更されると、システムはコンポーネントのポッドを再作成します。 表に記載されている古いクラスタは、2023年4月3日より前に作成されたクラスタを指し、新しいクラスタは、2023年4月3日以降に作成されたクラスタを指す。 次の表に、tokenModeパラメーターの有効な値を示します。

    tokenMode

    説明

    auto

    デフォルト値であるmanagedRoleモードを使用するかどうかを自動的に決定します。 新しいクラスターにはmanagedRoleモードを、古いクラスターにはworkerRoleモードを使用します。

    managedRole

    managedRoleモードを使用します。

    workerRole

    workerRoleモードを使用します。

ステップ2: 設定の変更

Container Registry Enterprise Editionインスタンスの設定を変更するには、次の操作を実行します。 Container Registry Personal Editionインスタンスの設定を変更する方法については、このトピックの「Container Registry Personal Editionインスタンスからプライベートイメージをプルする方法」を参照してください。

  1. aliyun-acr-credential-helperコンポーネントをインストールした後、イメージをプルする前にacr-configuration ConfigMapを設定する必要があります。

    ACKコンソールの使用

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

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 表示されるページの左側のナビゲーションウィンドウで、[設定] > [設定] を選択します。

    3. ConfigMapページの上部で、名前空間ドロップダウンリストからkube-systemを選択します。 次に、acr-configurationを見つけて値を設定します。

      acr-configuration ConfigMapが存在しない場合は、acr-configurationという名前のConfigMapを作成します。 詳細については、「ConfigMapsの管理」トピックの「ConfigMapの作成」セクションをご参照ください。 ConfigMapsの更新方法については、「ConfigMapsの管理」をご参照ください。

      • ConfigMapのキーと値を設定するには、[操作] 列の [編集] をクリックします。

      • ConfigMapのキーと値を設定するには、[操作] 列の [YAMLの編集] をクリックします。

    kubectlの使用

    1. 次のコマンドを実行して、acr-configuration ConfigMapの編集ページに移動します。

      kubectl edit cm acr-configuration -n kube-system
    2. 要件に基づいて、acr-configuration ConfigMapのパラメーターを設定します。

    次の表に、acr-configuration ConfigMapのキーと値を示します。

    キー

    説明

    service-account

    aliyun-acr-credential-helperコンポーネントがイメージをプルするために使用するサービスアカウント。

    デフォルト値: Default

    説明

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

    acr-registry-info

    Container Registryインスタンスに関する情報。 各インスタンスは、YAMLファイルのstring型の3つのパラメーターで指定できます。

    説明

    インスタンスを指定するためのパラメータ:

    • instanceId: Container RegistryインスタンスのID。 このフィールドは、Container Registry Enterprise Editionインスタンスに必要です。

    • regionId: Container Registryインスタンスが存在するリージョンのID。 このパラメーターはオプションです。 デフォルト値は、ACKクラスターが存在するリージョンです。

    • domains: Container Registryインスタンスのドメイン名。 このパラメーターはオプションです。 デフォルトでは、インスタンスのすべてのドメイン名が指定されます。 複数のドメイン名はコンマ (,) で区切ります。

    Container Registry Enterprise Editionインスタンスのサンプル構成:

    - instanceId: <cri-instanceId>
      regionId: "cn-hangzhou"
      domains: "xxx.com,yyy.com"

    watch-namespace

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

    デフォルト値: Defaultallの値は、Container Registryインスタンスのすべての名前空間を指定します。 複数の名前空間は、コンマ (,) で区切ります。

    説明

    値を本番の名前空間に設定することを推奨します。 値をクラスターのシステムコンポーネントのすべてまたは名前空間に設定すると、名前空間内のイメージがプルされない場合があります。

    expiring-threshold

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

    デフォルト値: 15m

    説明

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

ステップ3: さまざまなシナリオで画像をプルする

プライベートイメージをプルするために必要なアクセス許可は、シナリオによって異なります。

シナリオ

説明

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

同じアカウント内で画像を取得したい場合。 デフォルトでは、aliyun-acr-credential-helperコンポーネントは同じアカウント内のプライベートイメージを取得します。

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

リージョン間で画像を取得したい場合。

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

サービスアカウント (RRSA) のRAMロールを設定して、アカウント間でイメージをプルする

アカウント間で画像をプルしたい。

アカウント間でイメージをプルするRAMロールを想定する

  • クラスターは、tokenModeパラメーターの値に基づいてワーカーロールに依存します。

  • アカウント間で画像をプルしたい。

RAMユーザーのAccessKey IDとAccessKey secretを使用して、アカウント間でイメージをプルする

アカウント間で画像をプルしたい。

RAMユーザーのAccessKey IDとAccessKeyシークレットを使用してイメージをプルする場合は、acr-configuration ConfigMapでAccessKeyペアを指定する必要があります。 この場合、AccessKeyペアが漏洩する可能性があります。 データのセキュリティを確保するために、AccessKeyペアが属するRAMロールにイメージをプルする権限のみが付与されていることを確認します。 他の2つの方法を使用して、アカウント間で画像をプルすることを推奨します。

次のシナリオに基づいて、必要な権限を設定します。

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

  1. カスタムポリシーを作成し、次の内容をポリシーに追加します。 詳細については、[製品の変更] ACK管理クラスターのワーカーRAMロールの権限が取り消されるトピックの「ステップ1: カスタムポリシーの作成」セクションをご参照ください。

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:GetAuthorizationToken",
                    "cr:ListInstanceEndpoint",
                    "cr:PullRepository"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  2. クラスターのワーカーRAMロールにカスタムポリシーをアタッチします。 詳細については、「 [製品の変更] ACK管理クラスターのワーカーRAMロールの権限が取り消される」の「ステップ2: カスタムポリシーをワーカーRAMロールにアタッチする」をご参照ください。

  3. Container Registry Enterprise Editionインスタンスからプライベートイメージをプルするには、次のサンプルコードに基づいてacr-configuration ConfigMapを変更します。

    data:
        service-account: "default"
        watch-namespace: "all"
        expiring-threshold: "15m"
        notify-email:"c*@aliyuncs.com"
        acr-registry-info:|
          - instanceId: "cri-instanceId"
            regionId: "cn-hangzhou"
            domains: "instance.default.domain.com,instance.custom.domain.com"

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

ACKクラスターとは異なるリージョンにあるContainer Registryインスタンスからイメージをプルする場合は、acr-configuration ConfigMapを変更する必要があります。

重要

クロスリージョンイメージプルを有効にすると、aliyun-acr-credential-helperコンポーネントはインターネット経由でターゲットリージョンにAPIリクエストを送信します。 クラスターのインターネットアクセスを有効にする必要があります。

たとえば、中国 (北京) と中国 (杭州) のリージョンにあるContainer Registryインスタンスからイメージをプルする場合は、次のサンプルコードに基づいてacr-configuration ConfigMapを変更します。

data:
    service-account: "default"
    watch-namespace: "all"
    expiring-threshold: "15m"
    notify-email:"c*@aliyuncs.com"
    acr-registry-info: |
      - instanceId: "cri-instanceId"
        regionId: "cn-beijing"
      - instanceId: "cri-instanceId"
        regionId: "cn-hangzhou"            

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

次のいずれかの方法を使用して、アカウント間で画像をプルできます。

  • RRSAを設定してアカウント間でイメージをプルする: アカウントAはアカウントBのRAMロールを引き受け、アカウントBのContainer Registryインスタンスからプライベートイメージをプルします。

  • RAMロールを引き受けてアカウント間でイメージをプルする: アカウントaはアカウントBのRAMロールを引き受け、アカウントBのContainer Registryインスタンスからプライベートイメージをプルします。

  • RAMユーザーのAccessKeyペアを使用してアカウント間でイメージをプルする: アカウントaは、アカウントBのAccessKeyペアを使用して、アカウントBのContainer Registryインスタンスからプライベートイメージをプルします。

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

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

v1.22以降のクラスターでのみ、Container Registry Enterprise Editionインスタンス (Basic EditionおよびAdvanced Editionインスタンスを含む) からイメージをプルするようにRRSAを設定できます。 v1.22以降のクラスターには、ACK Basicクラスター、ACK Proクラスター、ACK Serverless BasicクラスターACK Serverless Proクラスターが含まれます。

重要
  • RRSA機能を有効にするには、aliyun-acr-credential-helperコンポーネントをv23.02.06.1-74e2172-aliyun以降に更新する必要があります。

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

  1. クラスターのRRSA機能を有効にします。 詳細については、「RRSAを使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する」トピックの「RRSAの有効化」セクションをご参照ください。

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

    クラスターでRRSA機能を有効にした後、次の手順を実行して、RRSA for 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> を、クラスターのOpenID Connect (OIDC) プロバイダーのURLに置き換えます。 URLは、ACKコンソールの [クラスター情報] ページの [基本情報] タブで取得できます。

      • 例の <oidc_provider_arn> を、クラスターのOIDCプロバイダーのAlibaba Cloud Resource Name (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ロールを作成します。[信頼ポリシー管理] タブで、信頼ポリシーの [プリンシパル] フィールドにアカウントaのRAMロールのARNを入力します。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                <ARN of the RAM role that you created for Account A>
              ]
            }
          }
        ],
        "Version": "1"
      }

      ユーザーがContainer Registryインスタンスの情報を取得し、インスタンスからアカウントBのRAMロールにイメージをプルできるようにするポリシーをアタッチします。

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

      RAMロールのMaxSessionDurationパラメーターを設定できます。 このパラメーターの有効値は3600〜43200秒です。 手順3でacr-configuration ConfigMapを設定するときは、expireDurationパラメーターを設定する必要があります。 MaxSessionDurationとexpireDurationに同じ値を指定することを推奨します。 expireDurationの値は、MaxSessionDurationの値以下とすることができる。

  3. acr-configuration ConfigMapの設定

    次の情報に基づいて、acr-configuration ConfigMapを変更します。

    data:
      service-account: "default"
      watch-namespace: "all"
      expiring-threshold: "15m"
      notify-email: "c*@aliyuncs.com"
      acr-registry-info:
        - instanceId: "cri-xxx"
          regionId: "cn-hangzhou"
          domains: "instance.default.domain.com,instance.custom.domain.com"
          rrsaRoleARN: aUserRoleARN
          rrsaOIDCProviderRoleARN: aUserClusterOIDCProviderRoleARN
          assumeRoleARN: bUserRoleARN
          expireDuration: 3600
      rrsa:
        enable: true

    キー

    説明

    rrsaRoleARN

    アカウントA用に作成したRAMロールのARN。

    acs:ram::aaa

    rrsaOIDCProviderRoleARN

    ACKコンソールの [クラスター情報] ページの [基本情報] タブで取得したOIDCプロバイダーのARN。

    acs:ram::bbb

    assumeRoleARN

    アカウントB用に作成したRAMロールのARN。

    acs:ram::ccc

    expireDuration

    アカウントB用に作成したRAMロールのセッション期間。セッション期間は、aliyun-acr-credential-helperによって生成されたシークレットの有効期間と同じです。

    重要

    expireDuration値は、アカウントBのRAMロールのMaxSessionDuration値より大きくすることはできません。

    デフォルト値は 3600 です。 有効な値は 3600~43200 です。 単位は秒です。

    アカウントBのRAMロールのMaxSessionDurationを43200に設定します。

RAMロールを引き受けてアカウント間でイメージをプル

アンフォールドして詳細を表示

説明

設定ルール:

  1. アカウントBのRAMロールは、指定されたプライベートリポジトリからプライベートイメージをプルする権限があります。 このルールでは、アカウントBのRAMロールにcr.* 権限を付与する必要があります。

  2. アカウントBでは、アカウントAのACKクラスターのワーカーロールがアカウントBのRAMロールを引き受けることができます。このルールでは、アカウントBのRAMロールの信頼ポリシーを変更する必要があります。

  3. アカウントAによって作成されたACKクラスターのワーカーロールには、アカウントBのRAMロールを引き受ける権限があります。このルールでは、AliyunAssumeRoleAccessポリシーをアカウントAのワーカーロールに関連付ける必要があります。

  4. アカウントBのRAMロールを引き受けるようにアカウントAのワーカーロールを設定します。この場合、acr-configuration ConfigMapでassumeRoleARNパラメーターを指定する必要があります。

  1. アカウントBのRAMロールを作成します。RAMロールの信頼できるエンティティとしてAlibaba Cloudアカウントを指定します。 アカウントBのContainer Registryインスタンスからプライベートイメージを取得するために必要な権限がRAMロールに付与されていることを確認します。

    1. アカウントBのRAMロールを作成します。詳細については、「信頼できるAlibaba CloudアカウントのRAMロールの作成」をご参照ください。

    2. [JSON] タブでカスタムポリシーを作成します。 詳細については、「カスタムポリシーの作成」をご参照ください。

      重要

      RAMロールにcr.* の権限が付与されていることを確認します。

      ```
      {
      "Action": [
      "cr:GetAuthorizationToken",
      "cr:ListInstanceEndpoint",
      "cr:PullRepository"
      ],
      "Resource": [
      "*"
      ],
      "Effect": "Allow"
      }
      
      ```
    3. カスタムポリシーをRAMロールにアタッチします。 詳細については、「RAMロールへの権限の付与」をご参照ください。

  2. アカウントBのRAMロールの信頼ポリシーを変更します。この方法で、アカウントBのRAMロールは、アカウントAのACKクラスターのワーカーロールがアカウントBのRAMロールを引き受けることを許可します。

    アカウントAによって作成されたACKクラスターのワーカーロールのARNを取得します。

    1. RAMロールのARNを取得する方法については、「RAMロールとSTSトークンに関するFAQ」トピックの「RAMロールのARNを表示する方法」を参照してください。

    2. アカウントBのRAMロールの信頼ポリシーを変更します。

      1. RAM コンソールにログインします。 左側のナビゲーションウィンドウで、[ロール] をクリックします。 [ロール] ページで、アカウントBのRAMロールを見つけ、ロール名をクリックします。

      2. RAMロールの詳細ページで、[信頼ポリシー] タブをクリックし、アカウントAのワーカーロールのARNを信頼ポリシーのプリンシパルフィールドに追加します。RamRoleARN

  3. アカウントAのACKクラスターのワーカーロールにAssumeRole権限が付与されているかどうかを確認します。 詳細については、「ポリシーに関する基本情報の表示」をご参照ください。AssumeRule权限

  4. assumeRoleARNパラメーターをacr-configuration ConfigMapに追加します。

    assumeRoleARNパラメーターの値をアカウントBのRAMロールのARNに設定します。RAMロールのARNを取得する方法については、「RAMロールとSTSトークンに関するFAQ」のセクションを参照してください。 次のYAMLファイルは、サンプル設定を示しています。

    data:
        service-account: "default"
        watch-namespace: "all"
        expiring-threshold: "15m"
        notify-email:"c*@aliyuncs.com"
        acr-registry-info: |
          - instanceId: ""
            regionId: "cn-beijing"
            domains: "registry.cn-beijing.aliyuncs.com"
            assumeRoleARN: "acs:ram::.*:role/kubernetesworkerrole-test"
            expireDuration: 3600

RAMユーザーのAccessKeyペアを使用してアカウント間でイメージをプルする

アンフォールドして詳細を表示

  1. RAMユーザーを作成し、Container Registryインスタンスからイメージをプルする権限をRAMユーザーに付与します。 Container Registryインスタンスからイメージをプルする権限を付与する方法については、このトピックの「シナリオ3: アカウント間でイメージをプルする」を参照してください。

  2. kube-system名前空間でacr-configuration ConfigMapを設定します。 作成したRAMユーザーのAccessKey IDとAccessKeyシークレットを入力します。

    このようにして、aliyun-acr-credential-helperコンポーネントはRAMユーザーを使用してプライベートイメージをプルできます。 RAMユーザーのAccessKeyペアを表示する方法については、「RAMユーザーのAccessKeyペアに関する情報の表示」をご参照ください。

    次のYAMLファイルは、サンプル設定を示しています。

    data:
        service-account: "default"
        watch-namespace: "all"
        expiring-threshold: "15m"
        notify-email:"c*@aliyuncs.com"
        acr-registry-info: |
          - instanceId: ""
            customAccessKey: "xxxxx" // Enter the AccessKey ID of the created RAM user. 
            customAccessKeySecret: "xxxxxx" // Enter the AccessKey secret of the created RAM user.

よくある質問

Container Registry Personal Editionインスタンスからプライベートイメージをプルするにはどうすればよいですか。

Container Registry Personal EditionインスタンスからEnterprise Editionインスタンスにイメージを移行する場合、Enterprise EditionインスタンスおよびPersonal Editionインスタンスからプライベートイメージをプルすることができます。 この場合、次のサンプル設定に基づいてacr-configuration ConfigMapを変更する必要があります。 Container Registry Personalインスタンスにイメージをプッシュする方法と、Container Registry Personalインスタンスからイメージをプルする方法については、「Container Registry Personalインスタンスにイメージをプッシュする方法と、Container Registry Personalインスタンスからイメージをプルする方法」をご参照ください。

重要

acr-configuration ConfigMapを変更する前に、#-instanceIdから# を削除します。

data:
    service-account: "default"
    watch-namespace: "all"
    expiring-threshold: "15m"
    notify-email:"cs@aliyuncs.com" 
    acr-registry-info: |
      - instanceId: ""  
        regionId: cn-xxxx

webhook機能を有効にするにはどうすればよいですか?

webhook機能を有効にすると、Secretsはすぐに新しく作成されたサービスアカウントに挿入されます。 この機能は、Helmグラフを使用してサービスアカウントと一緒にサービスアカウントを作成するシナリオなど、遅滞なくサービスアカウントにSecretsを挿入するシナリオに適用されます。 他のシナリオでは、この機能を無効にすることを推奨します。

重要

webhook機能を有効にするには、aliyun-acr-credential-helperコンポーネントをv23.02.06.1-74e2172-aliyun以降に更新する必要があります。

コンポーネントを最新バージョンに更新した後、次の情報に基づいてacr-configuration ConfigMapを変更する必要があります。

data:
  webhook-configuration: |
    enable: true
    failure-policy: Ignore
    timeout-seconds: 10

表 1. キーと値

キー

説明

enable

webhook機能を有効にするかどうかを指定します。

有効な値は、true および false です。 デフォルト値:false

失敗ポリシー

webhook機能が期待どおりに機能しない場合の障害処理ポリシー。

有効な値: IgnoreとFail。

  • このパラメーターをIgnoreに設定すると、作成プロセス中に例外が発生した場合でも、サービスアカウントが作成されます。 秘密は、サービスアカウントに関連付けられなくてもよい。

  • このパラメーターをFailに設定すると、例外が発生したときにサービスアカウントの作成プロセスが中断されます。 この設定によりワークロードのデプロイが失敗する可能性があるため、このパラメーターをFailに設定しないことをお勧めします。

クラスターAPIサーバーの制限により、timeout-secondsが15に設定され、Fail-policyがfailに設定され、1秒間に10個のサービスアカウントが作成されると、タイムアウトエラーによりサービスアカウントの作成に失敗する可能性があります。

timeout-秒

サービスアカウントの作成要求のタイムアウト期間。 failure-policyは、サービスアカウントの作成要求がタイムアウトしたときに適用されます。

デフォルト値は 10 です。 単位は秒です。 ユニットを指定する必要はありません。

関連ドキュメント