パスワードレスコンポーネントは、イメージをプルする際の認証プロセスを自動化し、繰り返し imagePullSecrets を設定する必要がなくなります。このトピックでは、パスワードレスコンポーネントのインストール、設定、使用方法、および重要な考慮事項について説明します。
仕組み
パブリック匿名プルを有効にせずに Container Registry (ACR) をイメージソースとして使用する場合、ご利用の Container Service for Kubernetes (ACK) クラスターは、イメージをプルするたびにユーザー名とパスワードを提供して認証する必要があります。一般的な解決策は、これらの認証情報を Kubernetes Secret に保存することですが、このアプローチにはいくつかの欠点があります:
-
Secret は Base64 でエンコードされたプレーンテキストであり、漏洩した場合にセキュリティリスクをもたらします。
-
各ワークロードに対して手動で
imagePullSecretsを指定する必要があります。 -
Secret は名前空間をまたいで使用することはできません。
パスワードレスコンポーネントは、次のように動作します:
-
パスワードレスコンポーネントは、ACR インスタンスから一時的なユーザー名とパスワードを取得します。
-
コンポーネントは、一時的な認証情報を Secret に保存します。
-
コンポーネントは、その設定で指定されたサービスアカウントに Secret を関連付けます。
-
これらのサービスアカウントを使用するワークロードは、デフォルトでイメージをプルできるようになります。
パスワードレスコンポーネントは、複数の名前空間にあるサービスアカウントの管理をサポートし、設定に基づいて一時的なアカウントとパスワードを定期的に更新することで、漏洩のリスクを低減します。ワークロードに手動で imagePullSecrets を追加する必要はありません。パスワードレスコンポーネントは無料で利用できます。
パスワードレスコンポーネントの比較
ACK は、マネージド版とセルフマネージド版の 2 つのエディションで利用可能な aliyun-acr-credential-helper コンポーネントを提供しています。一度にインストールできるのは 1 つのエディションのみです。次の表は、2 つのエディションを比較したものです。
|
項目 |
aliyun-acr-credential-helper (マネージド版) |
aliyun-acr-credential-helper (セルフマネージド版) |
|
サポートされるクラスターバージョン |
ACK マネージドクラスター、ACK サーバーレスクラスター、および Kubernetes 1.22 以降を実行する ACK Edge クラスター |
Kubernetes 1.20 以降を実行するACK マネージドクラスターおよびACK 専用クラスター |
|
主な特徴 |
|
|
クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。
前提条件
-
ご利用のクラスターが、パスワードレスコンポーネントでサポートされているバージョンを実行していること。詳細については、前の表をご参照ください。
-
ACR Enterprise Edition インスタンスを保有しています。
重要-
パスワードレスコンポーネントは、ACR Enterprise Edition インスタンスと、2024 年 9 月 8 日以前に作成された Personal Edition インスタンスのみをサポートします。パスワードレスコンポーネントを使用できない場合は、「imagePullSecrets の使用方法」をご参照ください。
-
-
パスワードレスコンポーネントが使用する RAM ロールに権限が付与されていること。
-
ACR Enterprise Edition インスタンスと ACK クラスター間にネットワーク接続が存在すること。
マネージド版パスワードレスコンポーネントの使用
ステップ 1:コンポーネントのインストール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。
-
アドオン管理 ページで、セキュリティ タブをクリックし、aliyun-acr-credential-helper (Managed) カードを探し、インストール をクリックします。
-
[aliyun-acr-credential-helper コンポーネントのインストール] ページで、[AcrInstanceInfo] 構成およびその他のオプションを表示します。[AcrInstanceInfo] は、コンポーネントに関連付けられている各 ACR インスタンスの構成を指定します。その他のオプションはコンポーネント設定です。デフォルト設定がお客様の名前空間およびサービスアカウントに適している場合は、そのまま使用できます。
コンポーネントがインストールされると、アドオン管理 ページに移動し、aliyun-acr-credential-helper (マネージド型) カードで 設定 をクリックしてコンポーネントの設定を変更できます。

関連付けられた ACR インスタンスの設定:
AcrInstanceInfo
説明
インスタンス ID
ACR インスタンスの ID。Container Registry コンソールで ID を確認できます。
重要Personal Edition インスタンスの場合は、このフィールドを空のままにします。ACR Enterprise Edition インスタンスの場合は、このフィールドは必須です。
リージョン ID
ACR インスタンスが配置されているリージョンの ID。Container Registry コンソールで ID を確認できます。
重要このフィールドは、クロスリージョンのイメージプルに必須です。
ドメイン
パスワードレスコンポーネントが ACR インスタンスへのアクセスに使用するドメイン名。デフォルトでは、指定された ACR インスタンスのすべてのドメイン名 (インターネットおよび VPC) が使用されます。複数のドメイン名を指定するには、カンマ (,) で区切ります。
クロスアカウントのイメージプルの設定
これらの設定は、クロスアカウントのイメージプルに適用されます。この機能が不要な場合は、これらのフィールドを空のままにしてください。
偽装ロールARN
これらの設定は、同一アカウントでのイメージプルには不要です。クロスアカウントでのイメージプルについては、「クロスアカウントでのイメージのプル」をご参照ください。
有効期間
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
説明
自動
(推奨) コンポーネントはクラスターの作成日時を確認し、自動的に権限モードを選択します。2023 年 4 月 3 日より前に作成されたクラスターは workerRole モードを使用します。2023 年 4 月 3 日以降に作成されたクラスターは managedRole モードを使用します。
重要2023 年 4 月 3 日以降にリリースされた aliyun-acr-credential-helper のバージョンでは、コンポーネントが依存する RAM ロールをカスタマイズできる設定項目が提供されています。詳細については、「[製品変更] aliyun-acr-credential-helper コンポーネントが必要とする権限の変更に関するお知らせ」をご参照ください。
マネージドロール
コンポーネントは、「前提条件」セクションで承認した AliyunCSManagedAcrRole ロールを使用して権限を取得します。
ワーカーロール
コンポーネントは、クラスターのワーカー RAM ロールを使用して権限を取得します。ワーカー RAM ロールに特定の権限を付与する必要があります。
重要ロールを引き受けることでアカウント間でイメージをプルするには、このモードを選択します。
ステップ 2:コンポーネント設定の構成
パスワードレスコンポーネントをインストールした後、イメージをプルするには、[acr-configuration] ConfigMap を構成して ACR インスタンスを追加する必要があります。この操作は、コンソールまたは kubectl を使用して行うことができます。
コンソール
クラスターリスト ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
ConfigMap ページで、[kube-system] を 名前空間 ドロップダウンリストから選択します。 次に、[acr-configuration] ConfigMap をクリックし、次の表の説明に従ってその設定を変更します。
パラメーター
説明
監視名前空間
パスワードレスのイメージプルを有効にする名前空間です。デフォルト値は [default] です。すべての名前空間でパスワードレスのイメージプルを有効にするには、値を [all] に設定します。複数の名前空間を指定するには、コンマ (,) で区切ります。ビジネス名前空間のみを指定することを推奨します。システムコンポーネントのイメージプルへの影響を避けるため、
allまたはシステムコンポーネントを含む名前空間の指定は避けてください。acr-api-version
デフォルト値のままにします。
有効期限のしきい値
コンポーネント内の認証情報の有効期限のしきい値。デフォルト値は
15m(15 分) です。acr-registry-info
ACR インスタンス設定の YAML 配列。各インスタンスは一連のパラメーターによって定義されます。
-
instanceId:ACR インスタンスの ID。Container Registry コンソールで ID を確認できます。重要Personal Edition インスタンスの場合は、このフィールドを空のままにします。ACR Enterprise Edition インスタンスの場合は、このフィールドは必須です。
-
regionId:ACR インスタンスが配置されているリージョンの ID。Container Registry コンソールで ID を確認できます。重要このフィールドは、クロスリージョンのイメージプルに必須です。詳細については、以下の設定例をご参照ください。
-
domains:パスワードレスコンポーネントが ACR インスタンスへのアクセスに使用するドメイン名。デフォルトでは、instanceIdで指定された ACR インスタンスのすべてのドメイン名が使用されます。複数のドメイン名を指定するには、カンマ (,) で区切ります。
サービスアカウント
パスワードレスコンポーネントに関連付けられるサービスアカウントです。 複数のサービスアカウントを指定するには、カンマ (,) で区切ります。 これを [default] に設定した場合、コンポーネントは watch-namespace で指定された各名前空間のデフォルトのサービスアカウントに関連付けられます。 これを
"*"に設定した場合、コンポーネントは指定された名前空間のすべてのサービスアカウントに関連付けられます。 -
kubectl
-
次のコマンドを実行して
acr-configurationを編集します。設定の詳細については、次の表をご参照ください。kubectl edit cm acr-configuration -n kube-systemキー
説明
値
service-account
パスワードレスコンポーネントが適用されるサービスアカウント。
デフォルト値は default です。
説明複数のサービスアカウントを指定するには、カンマ (,) で区切ります。これを
"*"に設定すると、コンポーネントは指定された名前空間のすべてのサービスアカウントに適用されます。acr-registry-info
ACR インスタンス設定の YAML 配列。各インスタンスは一連のパラメーターによって定義されます。
説明インスタンス情報の 3 つの要素:
-
instanceId:インスタンス ID。ACR Enterprise Edition インスタンスには必須です。
-
regionId:オプション。デフォルトはクラスターのリージョンです。
-
domains:オプション。デフォルトはインスタンスのすべてのドメイン名です。特定のドメイン名を指定するには、カンマ (,) で区切ります。
ACR Enterprise Edition インスタンスの設定例:
- 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 を使用してクラスター内のサービスアカウントの変更を監視します。新しいサービスアカウントが作成されると、コンポーネントは即座にパスワードレス Secret を注入します。この機能は、Helm チャートを使用してサービスアカウントと Deployment を同時に作成する場合など、サービスアカウントを作成後すぐに使用する必要があるシナリオで役立ちます。この機能はコンポーネントのパフォーマンスに影響を与える可能性があるため、他のシナリオでは推奨されません。
マネージド版コンポーネント
acr-credential-helper-webhook コンポーネントをインストールする必要があります:
ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons をクリックします。
-
Add-ons ページで、セキュリティ タブをクリックし、acr-credential-helper-webhook (Managed) カードを見つけ、次に インストール をクリックします。
セルフマネージド版コンポーネント
この機能を有効にするには、[acr-configuration] ConfigMap に次のフィールドを追加します:
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10
|
パラメーター |
説明 |
|
|
Webhook 機能を有効にするかどうかを指定します。
|
|
|
サービスアカウント作成中に Webhook が例外に遭遇した場合の処理方法を定義するポリシー。
重要
クラスターの API サーバーの制限により、 |
|
|
この機能の単一のサービスアカウント作成リクエストを処理するためのタイムアウト期間。タイムアウトを超えた場合、コンポーネントは |
イメージのプルが失敗する原因
考えられる原因の 1 つは、パスワードレスコンポーネントの設定ミスです。例:
-
パスワードレスコンポーネントのインスタンス情報が ACR インスタンスと一致しない。
-
プルに使用されるイメージアドレスが、パスワードレスコンポーネントのインスタンス情報のドメイン名と一致しない。
このトピックの手順に従って、問題をトラブルシューティングしてください。
コンポーネントが正しく設定されているにもかかわらずイメージのプルが失敗する場合、ワークロードの YAML に手動で入力された imagePullSecrets とパスワードレスコンポーネントとの間に競合が発生している可能性があります。この問題を解決するには、imagePullSecrets フィールドを手動で削除し、古い Pod を削除して再作成します。
imagePullSecrets の使用方法
2024 年 9 月 9 日以降に作成された ACR Personal Edition インスタンスは、パスワードレスコンポーネントをサポートしていません。これらのインスタンスでは、ユーザー名とログインパスワードを Secret に保存し、imagePullSecrets フィールドで使用することを推奨します。
-
パスワードレスコンポーネントは、手動で指定された
imagePullSecretsフィールドと互換性がありません。 -
Secret は、ワークロードと同じ名前空間にある必要があります。
関連ドキュメント
-
パスワードレスコンポーネントを使用してクロスアカウントでイメージをプルする方法については、「クロスアカウントでのイメージのプル」をご参照ください。
-
コンポーネントの変更履歴については、「aliyun-acr-credential-helper」をご参照ください。