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

:パスワードを使用せずに画像をプルするには、aliyun-acr-credential-helperコンポーネントを使用します。

最終更新日:Nov 14, 2024

aliyun-acr-credential-helperコンポーネントを使用すると、パスワードを使用せずに、Container Registry Personal EditionおよびEnterprise Editionのインスタンスから自己管理Kubernetesクラスターにプライベートイメージをプルできます。 このトピックでは、2つのシナリオでaliyun-acr-credential-helperを使用して、パスワードを使用せずにプライベートイメージをプルする方法について説明します。

前提条件

使用上の注意

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

重要

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

次の表に、aliyun-acr-credential-helperコンポーネントを使用してパスワードを使用せずにプライベートイメージをプルする場合の制限を示します。

パラメーター

説明

ミラーリング

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

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

  • Container Registry Enterprise EditionおよびContainer Registry Personal Editionのインスタンスからイメージをプルする必要があるシナリオでは、プライベートイメージをプルできます。

クラスターとKubernetesのバージョン

  • クラスターのKubernetesバージョンは1.11.2以降である必要があります。 それ以外の場合は、クラスターのKubernetesバージョンをアップグレードする必要があります。 詳細については、「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の形式が有効になります。

自己管理クラスターでのaliyun-acr-credential-helperコンポーネントの設定

手順1: aliyun-acr-credential-helperへのRAM権限の付与

onectlの使用

  1. オンプレミスマシンにonectlをインストールします。 詳細については、「onectlを使用した登録済みクラスターの管理」をご参照ください。

  2. 次のコマンドを実行して、aliyun-acr-credential-helperにRAM権限を付与します。

    onectl ram-user grant -- addon aliyun-acr-credential-helper

    期待される出力:

    Ram policy ack-one-registered-cluster-policy-aliyun-acr-credential-helper granted to ram user ack-one-user-ce313528c3 successfully.

コンソールの使用

コンポーネントを外部クラスターにインストールする前に、AccessKeyペアを設定して、外部クラスターにAlibaba Cloudリソースへのアクセス権限を付与する必要があります。 AccessKeyペアを設定する前に、RAMユーザーを作成し、RAMユーザーにAlibaba Cloudリソースへのアクセス権限を付与します。

  1. RAMユーザーを作成します。 詳細については、「RAMユーザーの作成」をご参照ください。

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

    例:

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

  4. RAMユーザーのAccessKeyペアを作成します。 詳細については、「AccessKeyペアの取得」をご参照ください。

  5. AccessKeyペアを使用して、登録済みクラスターにalibaba-addon-Secretという名前のシークレットを作成します。

    aliyun-acr-credential-helperコンポーネントをインストールすると、システムは自動的にAccessKeyペアを使用してクラウドリソースにアクセスします。

    kubectl -n kube-system create secret generic alibaba-addon-secret -- from-literal='access-key-id=<your access key id>'-- from-literal='access-key-secret=<your access key secret>'
    説明

    <your access key id><your access key secret> を、前の手順で取得したAccessKeyペアに置き換えます。

手順2: aliyun-acr-credential-helperの更新と設定

パスワードを使用せずに画像をプルするために使用する前に、aliyun-acr-credential-helperをインストールして構成する必要があります。

onectlの使用

次のコマンドを実行して、aliyun-acr-credential-helperをインストールします。

onectl addon install aliyun-acr-credential-helper

期待される出力:

Addon aliyun-acr-credential-helper, version **** installed.

aliyun-acr-credential-helperが既にインストールされている場合は、aliyun-acr-credential-helperが最新バージョンであることを確認してください。 次のコマンドを実行して、aliyun-acr-credential-helperを最新バージョンに更新できます。

onectl addon upgrade aliyun-acr-credential-helper

期待される出力:

Addon aliyun-acr-credential-helper upgraded to version ****.

コンソールの使用

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

重要

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

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

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

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

  3. On theアドオンページをクリックし、セキュリティタブ、検索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モードを使用します。

シナリオ1: Container Registry Enterprise EditionおよびContainer Registry Personal Editionインスタンスからプライベートイメージをプルする

ACKを使用すると、Container Registry Enterprise EditionとPersonal Editionから同時に、Container Registry Enterprise Editionから個別に、またはContainer Registry Personal Editionから個別にプライベートイメージをプルできます。 ビジネス要件に基づいてacr-configuration ConfigMapを変更します。 詳細については、「コンポーネントの設定」をご参照ください。 例:

  • Enterprise Edition

    apiVersion:v1
    kind:ConfigMap
    metadata:
      name:acr-configuration
      namespace:kube-system
      selfLink:/api/v1/namespaces/kube-system/configmaps/acr-configuration
    data:
      acr-api-version:"2018-12-01"
      acr-registry-info:|-
        -instanceId:"cri-xxx" # The default parameter in the console is #-instanceId. You must remove the number sign (#) and configure this parameter. 
        regionId:"cn-hangzhou"
      expiring-threshold:15m
      service-account:default
      watch-namespace:all
  • パーソナルエディション

    apiVersion:v1
    kind:ConfigMap
    metadata:
      name:acr-configuration
      namespace:kube-system
      selfLink:/api/v1/namespaces/kube-system/configmaps/acr-configuration
    data:
      acr-api-version:"2018-12-01"
      acr-registry-info:|-
        -instanceId:"" # The default parameter in the console is #-instanceId. You must remove the number sign (#) and retain the default value. 
         regionId:"cn-hangzhou"
      expiring-threshold:15m
      service-account:default
      watch-namespace:all

次のいずれかの方法を使用して、acr-configuration ConfigMapを設定できます。

コンソールの使用

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

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

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

    acr-configuration ConfigMapが存在しない場合は、ConfigMapを作成します。 詳細については、「ConfigMapの作成」をご参照ください。 ConfigMapsの更新方法については、「ConfigMapsの管理」をご参照ください。

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

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

kubectlの使用

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

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

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

Container Registryインスタンスから登録済みクラスターにイメージをプルする場合、Container Registryインスタンスと登録済みクラスターが異なるリージョンにデプロイされている場合は、acr-configuration ConfigMapを変更する必要があります。

たとえば、中国 (北京) リージョンと中国 (杭州) リージョンに同時にデプロイされているContainer Registryインスタンスからイメージをプルする場合は、次のコードブロックに基づいてacr-configuration ConfigMapを変更します。 詳細は、「コンポーネントの設定」をご参照ください。

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

次のいずれかの方法を使用して、acr-configuration ConfigMapを設定できます。

コンソールの使用

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

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

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

    acr-configuration ConfigMapが存在しない場合は、ConfigMapを作成します。 詳細については、「ConfigMapの作成」をご参照ください。 ConfigMapsの更新方法については、「ConfigMapsの管理」をご参照ください。

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

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

kubectlの使用

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

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