パスワード不要コンポーネントは、コンテナイメージのプル時の認証を自動化し、`imagePullSecrets` の繰り返し設定を不要にします。本トピックでは、パスワード不要コンポーネントのインストール、構成、および使用方法について説明します。また、重要な注意事項も記載しています。
仕組み
パブリック匿名プルが有効になっていない場合、Container Registry (ACR) をイメージソースとして使用するには、ACK クラスターがイメージをプルするたびにユーザー名とパスワードによる認証を行う必要があります。一般的な対応策として、認証情報をシークレットに格納する方法がありますが、この方法には以下の課題があります:
シークレットは Base64 エンコードされたプレーンテキストであり、セキュリティ上の脅威となります。
各ワークロードに対して手動で
imagePullSecretsを追加する必要があります。シークレットは名前空間を跨いで利用できません。
パスワード不要コンポーネントの動作は以下のとおりです:
パスワード不要コンポーネントが ACR インスタンスから一時的な認証情報を取得します。
コンポーネントはこれらの認証情報をシークレットに格納します。
コンポーネントは、構成で指定されたサービスアカウントとそのシークレットを関連付けます。
これらのサービスアカウントを使用するワークロードは、シークレットに格納された一時的な認証情報を利用して自動的にイメージをプルします。
パスワード不要コンポーネントは、複数の名前空間にわたるサービスアカウントを同時に管理でき、構成に基づいて定期的に一時的な認証情報を更新します。これにより、認証情報の漏洩リスクが低減され、ワークロードへの imagePullSecrets の手動追加が不要になります。パスワード不要コンポーネントは、追加コストなしで提供されます。
パスワード不要コンポーネントの比較
ACK では、マネージド版およびセルフマネージド版の `aliyun-acr-credential-helper` コンポーネントが提供されています。いずれか 1 つの版のみを同時にインストールできます。以下の表に、両版の比較を示します。
相違点 | aliyun-acr-credential-helper(マネージド) | aliyun-acr-credential-helper(セルフマネージド) |
サポートされるクラスターバージョン | ACK マネージドクラスター、ACK サーバーレスクラスター、および Kubernetes 1.22 以降を実行する ACK Edge クラスター | ACK マネージドクラスター および Kubernetes 1.20 以降を実行する ACK 専用クラスター |
機能 |
|
|
クラスターのスペックアップについては、「クラスターの手動スペックアップ」をご参照ください。
前提条件
クラスターバージョンがパスワード不要コンポーネントでサポートされています。詳細については、上記の表をご参照ください。
Container Registry (ACR) インスタンスは Enterprise Edition インスタンスです。
重要パスワード不要コンポーネントは、ACR Enterprise Edition インスタンスおよび 2024 年 9 月 8 日以前に作成された ACR Personal Edition インスタンスのみをサポートします。パスワード不要コンポーネントがご利用になれない場合は、「imagePullSecrets の使用方法」をご参照ください。
パスワードレス コンポーネントで使用される RAM ロールに、権限を付与しました。
ACR Enterprise Edition インスタンスと ACK クラスターの間にネットワーク接続が確立されている必要があります。
マネージドパスワード不要コンポーネントの使用
ステップ 1:コンポーネントのインストール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、目的のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで、アドオン をクリックします。
アドオン ページで、セキュリティ タブを選択します。aliyun-acr-credential-helper(マネージド) カードを見つけ、インストール をクリックします。
aliyun-acr-credential-helper のインストール ページでは、AcrInstanceInfo 構成およびその他のオプションを確認できます。AcrInstanceInfo には、コンポーネントに関連付けられた各 ACR インスタンスの構成が含まれます。その他のオプションは、コンポーネントの一般的な設定です。監視対象の名前空間またはサービスアカウントを変更する必要がない場合は、デフォルト設定のままにしてください。
インストール後、コンポーネントの構成を更新できます。アドオン ページで、構成 を aliyun-acr-credential-helper(マネージド) カードからクリックします。

関連付けられた 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
ステップ 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:コンポーネントのインストール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、目的のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで、アドオン をクリックします。
アドオン ページで、セキュリティ タブをクリックします。aliyun-acr-credential-helper を見つけ、インストール をクリックします。
パラメーター設定 ページで、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 ロールに特定の権限を付与する必要があります。
重要ロール偽装を使用した他アカウント間のイメージプルを行う場合に、このモードを選択します。
ステップ 2:コンポーネント構成の変更(ACR インスタンスの追加)
パスワード不要コンポーネントをインストールした後、イメージをプルする前に、acr-configuration ConfigMap を構成して ACR インスタンスを追加する必要があります。これはコンソールまたは kubectl を使用して行えます。
コンソール
クラスター ページで、変更対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ConfigMaps ページで、名前空間 ドロップダウンリストから kube-system を選択します。その後、acr-configuration ConfigMap をクリックし、以下の表に従って構成を変更します。
コンポーネント構成
説明
watch-namespace
シークレットなしでイメージをプルする名前空間です。デフォルト値は default です。all を指定すると、すべての名前空間からシークレットなしでイメージをプルできます。複数の名前空間を構成する場合は、カンマ(,)で区切ります。ビジネス用の名前空間を指定することを推奨します。クラスターのシステムコンポーネントに関連する名前空間や
allを指定すると、クラスターのシステムコンポーネントのイメージプルに問題が発生する可能性があるため、避けてください。acr-api-version
デフォルト値のままにしてください。
expiring-threshold
コンポーネントの認証情報の有効期限切れしきい値です。デフォルト値は
15m(15 分)です。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 インスタンスのすべてのドメイン名が入力されます。個別のドメイン名を指定する場合は、カンマ(,)で区切ります。
service-account
パスワード不要コンポーネントに関連付けられるサービスアカウントです。複数のサービスアカウントを指定する場合は、カンマ(,)で区切ります。default を指定すると、各指定名前空間のデフォルトサービスアカウントに関連付けられます。
"*"を指定すると、指定された名前空間のすべてのサービスアカウントに関連付けられます。
kubectl
以下のコマンドを実行して、下記の構成説明に基づき
acr-configurationを編集します。kubectl edit cm acr-configuration -n kube-system構成キー
構成項目キー
構成値
service-account
パスワード不要コンポーネントを指定されたサービスアカウントに適用します。
デフォルト値は default です。
説明複数のサービスアカウントを指定する場合は、カンマ(,)で区切ります。アスタリスク(
"*")を指定すると、指定された名前空間のすべてのサービスアカウントに適用されます。acr-registry-info
コンテナイメージのインスタンス情報を含む配列で、複数行の YAML 文字列形式です。各インスタンスはトライアドとして構成されます。
説明インスタンス情報のトライアドには以下が含まれます:
instanceId:インスタンス ID。Enterprise Edition インスタンスの場合は必須です。
regionId:任意。デフォルト値はローカルリージョンです。
domains:任意。デフォルトではインスタンスのすべてのドメイン名が使用されます。個別のドメイン名を指定する場合は、カンマ(,)で区切ります。
Enterprise Edition の ACR インスタンスの構成例:
- instanceId: <cri-instanceId> regionId: "cn-hangzhou" domains: "xxx.com,yyy.com"watch-namespace
パスワード不要でイメージをプルする名前空間です。
デフォルト値は default です。all を指定すると、すべての名前空間が対象になります。複数の名前空間を指定する場合は、カンマ(,)で区切ります。
説明ビジネス用の名前空間のみを構成することを推奨します。システムコンポーネントに関連する名前空間や all を構成すると、システムコンポーネントのイメージプルに問題が発生する可能性があるため、避けてください。
expiring-threshold
ローカルキャッシュされた認証情報の有効期限切れしきい値です。
デフォルト値は
15m(15 分)です。
ステップ 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 を使用してクラスター内のサービスアカウントの変更を監視します。新しいサービスアカウントが作成されると、コンポーネントは即座にパスワード不要のシークレットを挿入します。この機能は、Helm Chart のデプロイなど、サービスアカウントを直後に使用する必要があるシナリオに有用です。ただし、この機能はコンポーネントのパフォーマンスに影響を与えるため、他のシナリオでは有効化しないことを推奨します。
マネージドコンポーネント
クラスターに `acr-credential-helper-webhook` コンポーネントをインストールする必要があります:
ACK クラスター ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons をクリックします。
Add-ons ページで、セキュリティ タブを選択します。acr-credential-helper-webhook(マネージド) カードを見つけ、インストール をクリックします。
セルフマネージドコンポーネント
この機能を有効化するには、acr-configuration に以下のフィールドを追加します:
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10構成項目 | 説明 |
| Webhook 機能を有効化するかどうかを指定します。
|
| この機能で例外が発生した場合のサービスアカウントの処理ポリシーです。
重要 クラスターの API Server の制限により、 |
| この機能における単一のサービスアカウント作成要求のタイムアウト期間です。タイムアウト期間を超えた場合、 |
パスワード不要コンポーネントを構成した後も、イメージのプルが失敗するのはなぜですか?
考えられる原因として、パスワード不要コンポーネントの構成ミスが挙げられます。例えば:
パスワード不要コンポーネント内のインスタンス情報が ACR インスタンスと一致していない。
プルに使用するイメージアドレスがコンポーネントのインスタンス情報内のドメイン名と一致していない。
本トピックの手順に従ってトラブルシューティングを行ってください。
コンポーネントの構成が正しいにもかかわらずプルが失敗する場合、ワークロード YAML で手動で指定された imagePullSecrets フィールドとパスワード不要コンポーネントとの間で競合が発生している可能性があります。これを解決するには、imagePullSecrets フィールドを手動で削除し、Pod を削除して再作成してください。
imagePullSecrets の使用方法を教えてください。
2024 年 9 月 9 日以降に作成された ACR Personal Edition インスタンスでは、パスワード不要コンポーネントはサポートされていません。新しい ACR Personal Edition インスタンスでは、ユーザー名およびログインパスワードをシークレットに保存し、imagePullSecrets フィールドで参照することを推奨します。
パスワード不要コンポーネントと手動で指定された
imagePullSecretsフィールドを同時に使用することはできません。シークレットは、ワークロードと同じ名前空間に配置する必要があります。
参考資料
パスワード不要コンポーネントを使用した他アカウント間でのイメージプルの詳細については、「他アカウント間でのイメージプル」をご参照ください。
パスワード不要コンポーネントの変更履歴については、「aliyun-acr-credential-helper」をご参照ください。