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

Container Registry:シークレットフリーコンポーネントを使用して、同一アカウント内の ACR Enterprise Edition インスタンスからイメージをプルする

最終更新日:Nov 14, 2025

シークレットフリーコンポーネントは、コンテナイメージをプルするための認証プロセスを自動化します。これにより、imagePullSecrets を繰り返し設定する必要がなくなります。このトピックでは、シークレットフリーコンポーネントのインストール、設定、使用方法について説明し、重要な考慮事項を強調します。

仕組み

公開匿名プルを有効にせずに ACR をイメージソースとして使用する場合、ACK クラスターはイメージをプルするたびに認証のためにユーザー名とパスワードを提供する必要があります。一般的なソリューションは、ユーザー名とパスワードを Secret に保存することです。ただし、この方法には次の欠点があります。

  • Secret は Base64 でエンコードされたプレーンテキストであり、漏洩するとセキュリティリスクをもたらします。

  • 各ワークロードに手動で imagePullSecrets を追加する必要があります。

  • Secret は名前空間をまたいで使用することはできません。

シークレットフリーコンポーネントは次のように動作します。

  1. シークレットフリーコンポーネントは、ACR インスタンスから一時的なユーザー名とパスワードを取得します。

  2. コンポーネントは、一時的なユーザー名とパスワードを Secret に保存します。

  3. コンポーネントは、コンポーネントの設定で指定されたサービスアカウントに Secret を関連付けます。

  4. これらのサービスアカウントを使用するワークロードは、デフォルトで Secret に保存されている一時的なユーザー名とパスワードを使用してイメージをプルします。

シークレットフリーコンポーネントは、複数の名前空間のサービスアカウントを同時に管理できます。設定に基づいて一時的なユーザー名とパスワードを定期的に更新します。これにより、漏洩のリスクが軽減され、ワークロードに手動で imagePullSecrets を追加する必要がなくなります。シークレットフリーコンポーネントは無料です。

シークレットフリーコンポーネントの比較

ACK は aliyun-acr-credential-helper コンポーネントを提供します。このコンポーネントは、マネージドエディションとセルフマネージドエディションで利用できます。一度に 1 つのエディションしかインストールできません。次の表は、2 つのエディションを比較したものです。

項目

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

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

サポートされるクラスターバージョン

ACK マネージドクラスターServerless Kubernetes クラスター、および Kubernetes 1.22 以降を実行するACK Edge クラスター

ACK マネージドクラスターおよび Kubernetes 1.20 以降を実行するACK 専用クラスター

機能

  • 自己管理不要

  • RRSA を使用したアカウント間でのイメージのプルをサポート

クラスターをアップグレードするには、「クラスターを手動でアップグレードする」をご参照ください。

前提条件

  • クラスターのバージョンがシークレットフリーコンポーネントでサポートされていること。詳細については、上記の表をご参照ください。

  • Container Registry (ACR) インスタンスが Enterprise Edition インスタンスであること。

    重要
    • シークレットフリーコンポーネントは、ACR Enterprise Edition インスタンスと 2024 年 9 月 8 日以前に作成された ACR Personal Edition インスタンスのみをサポートします。シークレットフリーコンポーネントを使用できない場合、詳細については、「imagePullSecrets の使用方法」をご参照ください。

  • シークレットフリーコンポーネントが使用する RAM ロールに権限を付与していること。

  • ACR Enterprise Edition インスタンスと ACK クラスター間のネットワーク接続が確立されていること。

    ネットワーク接続の設定

    イメージをプルする前に、ACR Enterprise Edition インスタンスと ACK クラスターが相互に接続でき、関連するドメイン名が解決できることを確認してください。同一アカウント内のインスタンスからイメージをプルする場合、次のいずれかの方法を使用できます。

    • ACR VPC アクセス制御: ACR Enterprise Edition インスタンスと ACK クラスターが同じリージョンにある場合、ACK クラスターは VPC を介して ACR インスタンスにアクセスできます。詳細については、「ネットワークアクセス制御」をご参照ください。

    • VPC ピアリング接続: ACR インスタンスと ACK クラスターが同じ VPC にない場合、VPC ピアリング接続を使用して 2 つの VPC を接続できます。これにより、ACK クラスターは ACR Enterprise Edition インスタンスにアクセスできます。VPC が同じリージョンにある場合、VPC ピアリング接続機能は無料です。VPC が異なるリージョンにある場合は有料機能です。詳細については、「課金」をご参照ください。この機能を使用するには、2 つの VPC の CIDR ブロックが重複してはなりません。CIDR ブロックが重複している場合は、既存のネットワークアーキテクチャを変更する必要があります。

      VPC ピアリング接続の手順

      1. ACR インスタンスの内部 DNS 名前解決を設定する

        ACR Enterprise Edition インスタンスを VPC に接続した後、内部エンドポイントを使用して VPC から Enterprise Edition インスタンスにアクセスできます。設定が完了したら、VPC ID と ACR Enterprise Edition インスタンスの内部 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 に転送されます。
    • インターネット: ACR Enterprise Edition インスタンスと ACK クラスターがインターネットにアクセスできる場合は、インターネット経由でイメージを転送することもできます。詳細については、「ACR インスタンスのパブリックアクセス制御を設定する」および「クラスターのインターネットアクセスを有効にする」をご参照ください。

マネージドシークレットフリーコンポーネントの使用

ステップ 1: コンポーネントのインストール

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

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

  3. [アドオン] ページで、[セキュリティ] タブを選択します。[Aliyun-acr-credential-helper (マネージド)] カードを見つけて、[インストール] をクリックします。

  4. [Aliyun-acr-credential-helper のインストール] ページで、[AcrInstanceInfo] 設定およびその他のオプションを表示できます。[AcrInstanceInfo] には、コンポーネントに関連付けられた各 ACR インスタンスの設定が含まれています。その他のオプションはコンポーネント設定です。コンポーネントが監視する名前空間またはサービスアカウントを変更する必要がない場合は、デフォルト設定を維持できます。

    コンポーネントがインストールされた後、その設定を変更できます。[アドオン] ページで、[Aliyun-acr-credential-helper (マネージド)] カードの [設定] をクリックします。

    image

    関連付けられた ACR インスタンスの設定:

    AcrInstanceInfo

    説明

    InstanceId

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

    重要

    Personal Edition ACR インスタンスの場合は、このパラメーターを空のままにします。Enterprise Edition ACR インスタンスの場合は、このパラメーターは必須です。

    regionId

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

    重要

    このパラメーターは、リージョン間でイメージをプルする場合に必要です。

    domains

    シークレットフリープラグインが ACR インスタンスへのアクセスに使用するドメイン名。デフォルトでは、指定された ACR インスタンスのすべてのドメイン名 (パブリックおよび VPC) が使用されます。個別のドメイン名を指定するには、コンマ (,) で区切ります。

    アカウント間でのイメージのプルに関する設定

    これは、アカウント間でイメージをプルするシナリオに適用されます。この要件がない場合は、フィールドを空のままにします。

    assumeRoleARN

    同一アカウント内でのイメージのプルには不要です。アカウント間でイメージをプルする場合、詳細については、「アカウント間でのイメージのプル」をご参照ください。

    expireDuration

    rrsaRoleARN

    rrsaOIDCProviderRoleARN

    コンポーネント設定

    設定項目

    説明

    RRSA の有効化

    これを選択して RRSA を有効にします。これは、同一アカウント内でのイメージのプルには不要です。アカウント間でイメージをプルする場合、詳細については、「アカウント間でのイメージのプル」をご参照ください。

    watchNamespace

    シークレットなしでイメージをプルする名前空間。デフォルト値は default です。値 all はすべての名前空間を意味します。複数の名前空間を指定するには、コンマ (,) で区切ります。ビジネス用の名前空間を設定することをお勧めします。システムコンポーネントイメージのプルに関する問題を避けるため、all またはシステムコンポーネントに関連する名前空間の設定は避けてください。

    serviceAccount

    マネージドシークレットフリーコンポーネントが適用されるサービスアカウント。デフォルト値は Default です。値 Default は、指定されたすべての名前空間のデフォルトのサービスアカウントに適用されます。アスタリスク (*) は、指定された名前空間のすべてのサービスアカウントに適用されます。複数のサービスアカウントを設定するには、コンマ (,) で区切ります。

    expiringThreshold

    コンポーネントの資格情報の有効期限のしきい値。デフォルト値は 15m です。15 分を使用することをお勧めします。コンポーネントは、資格情報が期限切れになる 15 分前に自動的に更新します。

    notifyEmail

    設定は不要です。

ステップ 2: イメージのプル

シークレットフリーコンポーネントをインストールして設定した後、ワークロードを作成するときにコンポーネントに関連付けられているサービスアカウントを指定します。これにより、シークレットなしでイメージをプルできます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      serviceAccountName: my-service-account # シークレットフリーコンポーネントに関連付けられているサービスアカウントを指定します。
      containers:
      - name: nginx
        image: ******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest # ACR イメージのアドレスを指定します。
        ports:
        - containerPort: 80

セルフマネージドシークレットフリーコンポーネントの使用

ステップ 1: コンポーネントのインストール

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

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

  3. [アドオン] ページで、[セキュリティ] タブをクリックします。[aliyun-acr-credential-helper] を見つけて、[インストール] をクリックします。

  4. [パラメーター] ページで、[tokenMode] ドロップダウンリストからコンポーネントの権限モードを選択し、[OK] をクリックします。コンポーネントがインストールされたら、イメージをプルする前に設定します。詳細については、「ステップ 2: コンポーネント設定の変更 (ACR インスタンスの追加)」をご参照ください。

    tokenMode

    説明

    auto

    (推奨) コンポーネントはクラスターの作成時間を検出し、権限モードを自動的に決定します。2023 年 4 月 3 日より前に作成されたクラスターの場合、workerRole モードが使用されます。2023 年 4 月 3 日以降に作成されたクラスターの場合、managedRole モードが使用されます。

    重要

    2023 年 4 月 3 日以降にリリースされた aliyun-acr-credential-helper のバージョンでは、コンポーネントが依存する RAM ロールをカスタマイズするための設定項目が提供されています。詳細については、「[製品変更] aliyun-acr-credential-helper が依存する権限の変更に関するお知らせ」をご参照ください。

    managedRole

    コンポーネントは、「前提条件」セクションで権限が付与されている AliyunCSManagedAcrRole ロールを使用して権限を取得します。

    workerRole

    コンポーネントは、クラスターのワーカー RAM ロールを使用して権限を取得します。ワーカー RAM ロールに特定の権限を付与する必要があります。

    コンポーネントモードとして workerRole を選択

    権限モードとして workerRole を選択する場合、クラスターのワーカー RAM ロールには次の権限が必要です。権限を付与する方法の詳細については、「RAM ロールに権限を付与する」をご参照ください。

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

    ロールの偽装を使用してアカウント間でイメージをプルするには、このモードを選択します。

ステップ 2: コンポーネント設定の変更 (ACR インスタンスの追加)

シークレットフリーコンポーネントがインストールされた後、イメージをプルする前に、[acr-configuration] ConfigMap を設定して ACR インスタンスを追加する必要があります。これは、コンソールまたは kubectl を使用して実行できます。

コンソール

  1. クラスター ページで、変更したいクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[構成] > [ConfigMap] を選択します。

  2. [ConfigMap] ページで、[名前空間] ドロップダウンリストから [kube-system] を選択します。次に、[acr-configuration] ConfigMap をクリックし、次の表の説明に従って設定を変更します。

    キー

    説明

    watch-namespace

    シークレットを使用せずにイメージをプルしたい名前空間。

    acr-api-version

    デフォルト値を維持します。

    expiring-threshold

    ローカルキャッシュ資格情報の有効期限のしきい値。

    acr-registry-info

    コンテナイメージのインスタンス情報の配列で、複数行の YAML 文字列形式です。各インスタンスはトライアドとして設定されます。

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

      重要

      Personal Edition ACR インスタンスの場合は、このパラメーターを空のままにします。Enterprise Edition ACR インスタンスの場合は、このパラメーターは必須です。

    • regionId: ACR インスタンスのリージョン ID。リージョン ID は Container Registry コンソールで取得できます。

      重要

      このパラメーターは、リージョン間でイメージをプルする場合に必要です。以下の設定例をご参照ください。

    • domains: シークレットフリープラグインが ACR インスタンスへのアクセスに使用するドメイン名。デフォルトでは、instanceId の ACR インスタンスのすべてのドメイン名が入力されます。個別のドメイン名を指定するには、コンマ (,) で区切ります。

    リージョン間プル用の設定例

    異なるリージョンで複数の ACR インスタンスを使用する場合、各 ACR インスタンスの ID とリージョンを指定する必要があります。

    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"      

    service-account

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

kubectl

  1. 次のコマンドを実行して、次の表の説明に従って acr-configuration を編集します。

    kubectl edit cm acr-configuration -n kube-system

    キー

    説明

    service-account

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

    デフォルト値: default

    説明

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

    acr-registry-info

    Container Registry インスタンスに関する情報。各インスタンスは、YAML ファイル内の文字列型の 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

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

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

    説明

    値を本番環境の名前空間に設定することをお勧めします。値を all またはクラスターのシステムコンポーネントの名前空間に設定すると、名前空間内のイメージのプルに失敗する可能性があります。

    expiring-threshold

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

    デフォルト値: 15m

    説明

    デフォルト値を使用することをお勧めします。デフォルト値は、キャッシュされた Secret が期限切れになる 15 分前に Secret が更新されることを指定します。

ステップ 3: イメージのプル

シークレットフリーコンポーネントをインストールして設定した後、ワークロードを作成するときにコンポーネントに関連付けられているサービスアカウントを指定します。これにより、シークレットなしでイメージをプルできます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      serviceAccountName: my-service-account # シークレットフリーコンポーネントに関連付けられているサービスアカウントを指定します。
      containers:
      - name: nginx
        image: ******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest # ACR イメージのアドレスを指定します。
        ports:
        - containerPort: 80

作成後すぐにサービスアカウントを使用する機能を有効にする方法

重要

作成後すぐにサービスアカウントを使用する機能を有効にするには、シークレットフリーコンポーネントを v23.02.06.1-74e2172-aliyun 以降にアップグレードする必要があります。

Webhook 機能を有効にすると、シークレットフリーコンポーネントは Webhook を使用してクラスター内のサービスアカウントの変更を監視します。新しいサービスアカウントが作成されると、コンポーネントはすぐにシークレットフリーの Secret をそれに注入します。この機能は、Helm Chart を使用してサービスアカウントとデプロイメントを同時に作成する場合など、サービスアカウントを作成後すぐに使用する必要があるシナリオで役立ちます。この機能はコンポーネントのパフォーマンスに影響を与えるため、他のシナリオで有効にすることはお勧めしません。

この機能を有効にするには、次のフィールドを [acr-configuration] に追加します:

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

設定項目

説明

enable

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

  • true: 有効化。

  • false: 有効化しない。

failure-policy

この機能で例外が発生した場合にサービスアカウントを処理するためのポリシー。

  • Ignore: 例外を無視します。サービスアカウントは正常に作成されますが、イメージをプルするための Secret がアタッチされない場合があります。

  • Fail: 例外が発生した場合、サービスアカウントの作成を中断します。ビジネスデプロイメントが失敗する可能性があるため、これは推奨されません。

重要

クラスター API Server の制限により、timeout-seconds15 に設定され、failure-policyFail に設定され、毎秒 10 個のサービスアカウントが継続的に作成される場合、サービスアカウントの作成に失敗する可能性があります。

timeout-seconds

この機能の単一のサービスアカウント作成リクエストのタイムアウト期間。タイムアウト期間を超えると、システムは failure-policy 設定に基づいて応答します。デフォルト値は 10 です。単位は秒 (s) です。

よくある質問

シークレットフリーコンポーネントを設定してもイメージのプルが失敗する

シークレットフリーコンポーネントの設定が正しくないために、イメージのプルが失敗することがあります。例:

  • シークレットフリーコンポーネントのインスタンス情報が ACR インスタンスと一致しない。

  • イメージのプルに使用されるイメージアドレスが、コンポーネントのインスタンス情報のドメイン名と一致しない。

このトピックの手順に従って問題をトラブルシューティングしてください。

コンポーネントが正しく設定されているにもかかわらずプルが失敗する場合、ワークロード YAML に手動で入力された imagePullSecrets フィールドとシークレットフリーコンポーネントとの間に競合がある可能性があります。この問題を解決するには、手動で imagePullSecrets フィールドを削除し、その後 Pod を削除して再作成します。

imagePullSecrets の使用方法

2024 年 9 月 9 日以降に作成された ACR Personal Edition インスタンスは、シークレットフリーコンポーネントをサポートしていません。新しい ACR Personal Edition インスタンスの場合、ユーザー名とログインパスワードを Secret に保存し、それを imagePullSecrets フィールドで使用することをお勧めします。

重要
  • シークレットフリーコンポーネントは、手動で入力された imagePullSecrets フィールドと同時に使用することはできません。

  • Secret はワークロードと同じ名前空間にある必要があります。

imagePullSecrets の使用例

次のコマンドを実行し、パラメーターを独自のものに置き換えて、ユーザー名とパスワードから Secret を作成します。

kubectl create secret generic image-secret-1 \
  --docker-server=<registry-server> \
  --docker-username=<name> \
  --docker-password=<password> \
  --docker-email=<email>

ワークロードで Secret を使用する:

apiVersion: apps/v1
kind: Deployment 
metadata:
  name: nginx-test
  namespace: default 
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx 
    spec:
      imagePullSecrets:
      - name: image-secret-1  # 前のステップで作成した Secret を使用します
      containers:
      - name: nginx 
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # ACR リンクに置き換えます

関連ドキュメント