パスワードレスコンポーネントは、イメージプル時の認証を自動化し、imagePullSecrets を繰り返し設定する必要をなくします。このトピックでは、パスワードレスコンポーネントのインストール、設定、使用方法、および重要な注意事項について説明します。
仕組み
匿名でのイメージプルを有効にせずに Container Registry (ACR) をイメージソースとして使用する場合、ACK クラスターは各イメージプルを認証するためにユーザー名とパスワードを提供する必要があります。一般的なソリューションは、これらの認証情報を Secret に保存することですが、このアプローチにはいくつかの欠点があります。
Secret は Base64 エンコードされたプレーンテキストであり、漏洩した場合にセキュリティリスクをもたらします。
各ワークロードに対して手動で
imagePullSecretsを指定する必要があります。Secret は名前空間をまたいで共有することはできません。
パスワードレスコンポーネントは次のように動作します。
パスワードレスコンポーネントは、ACR インスタンスから一時的な認証情報を取得します。
コンポーネントは、一時的な認証情報を Secret に保存します。
コンポーネントは、その設定で指定された ServiceAccount に Secret を関連付けます。
これらの ServiceAccount を使用するワークロードは、Secret に保存された一時的な認証情報を使用して自動的にイメージをプルできます。
パスワードレスコンポーネントは、複数の名前空間にまたがる ServiceAccount を管理し、スケジュールに基づいて一時的な認証情報を自動的にリフレッシュします。これにより、セキュリティリスクが軽減され、ワークロードに手動でimagePullSecretsを追加する必要がなくなります。パスワードレスコンポーネントは無料で利用できます。
コンポーネントの比較
ACK は、aliyun-acr-credential-helper コンポーネントをマネージド版とセルフマネージド版の 2 つのエディションで提供しています。一度にインストールできるのは 1 つのエディションのみです。次の表は、2 つのエディションを比較したものです。
項目 | aliyun-acr-credential-helper (マネージド) | aliyun-acr-credential-helper (セルフマネージド) |
サポートされるクラスターバージョン | バージョン 1.22 以降の ACK マネージドクラスター、ACK サーバーレスクラスター、または ACK Edge クラスター | バージョン 1.20 以降の ACK マネージドクラスター または ACK 専用クラスター |
特徴 |
|
|
クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。
前提条件
ご利用のクラスターバージョンがパスワードレスコンポーネントでサポートされていること。詳細については、前の表をご参照ください。
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 インスタンスの設定が含まれています。その他のオプションはコンポーネントの設定です。コンポーネントが監視する名前空間や ServiceAccount を変更する必要がない場合は、デフォルト設定のままにすることができます。
コンポーネントのインストール後、アドオン管理 ページにある aliyun-acr-credential-helper (managed) カードの 設定 をクリックして、その設定を変更できます。
ACR インスタンスの関連付け設定:
AcrInstanceInfo
説明
InstanceId
ACR インスタンスの ID。Container Registry コンソールから ID を取得できます。
重要ACR Personal Edition インスタンスの場合は、このフィールドを空白のままにします。このフィールドは ACR Enterprise Edition インスタンスでは必須です。
regionId
ACR インスタンスがデプロイされているリージョンの ID。Container Registry コンソールから ID を取得できます。
重要このパラメーターは、クロスリージョンでのイメージプルに必須です。
domains
パスワードレスコンポーネントが ACR インスタンスにアクセスするために使用するドメイン名。デフォルトでは、指定された ACR インスタンスのすべてのドメイン名 (インターネットおよび VPC) が含まれます。複数のドメイン名を指定するには、カンマ (,) で区切ります。
クロスアカウントでのイメージプルの設定
これらの設定は、クロスアカウントでのイメージプルに適用されます。この機能が必要ない場合は、フィールドを空白のままにします。
assumeRoleARN
同一アカウントでのプルには設定は不要です。クロスアカウントでのプルについては、「クロスアカウントでのイメージのプル」をご参照ください。
expireDuration
rrsaRoleARN
rrsaOIDCProviderRoleARN
ステップ 2: イメージのプル
パスワードレスコンポーネントをインストールして設定した後、ワークロードを作成する際にコンポーネントに関連付けられた ServiceAccount を指定します。これにより、パスワードレスでのイメージプルが可能になります。
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 # パスワードレスコンポーネントに関連付けられた ServiceAccount を指定します。
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-configuration ConfigMap を設定して ACR インスタンスを追加する必要があります。これは、コンソールまたは kubectl を使用して行うことができます。
コンソール
クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
ConfigMap ページで、名前空間 ドロップダウンリストから kube-system を選択します。次に、acr-configuration ConfigMap をクリックし、次の表の説明に従って設定を変更します。
パラメーター
説明
watch-namespace
パスワードレスでのイメージプルを有効にする名前空間。デフォルト値はdefaultです。すべての名前空間でこの機能を有効にするには、値をallに設定します。複数の名前空間を指定するには、カンマ (,) で区切ります。システムイメージのプルに支障をきたさないように、ビジネス用の名前空間のみを指定し、
allやクラスターシステムコンポーネント用の名前空間の使用は避けることを推奨します。acr-api-version
デフォルト値のままにします。
expiring-threshold
コンポーネント内の認証情報の有効期限のしきい値。デフォルト値は
15m(15 分) です。acr-registry-info
複数行の YAML 文字列形式の ACR インスタンス情報の配列。各インスタンスは 3 つのパラメーターのセットで設定されます。
instanceId:ACR インスタンスの ID。Container Registry コンソールから ID を取得できます。重要ACR Personal Edition インスタンスの場合は、このフィールドを空白のままにします。このフィールドは ACR Enterprise Edition インスタンスでは必須です。
regionId:ACR インスタンスがデプロイされているリージョンの ID。Container Registry コンソールから ID を取得できます。重要このパラメーターは、クロスリージョンでのイメージプルに必須です。設定例については、以下のセクションをご参照ください。
domains:パスワードレスコンポーネントが ACR インスタンスにアクセスするために使用するドメイン名。デフォルトでは、instanceIdで指定された ACR インスタンスのすべてのドメイン名が含まれます。複数のドメイン名を指定するには、カンマ (,) で区切ります。
service-account
パスワードレスコンポーネントに関連付けられた ServiceAccount。複数の ServiceAccount を指定するには、カンマ (,) で区切ります。値をdefaultに設定すると、コンポーネントは指定された各名前空間のデフォルトの ServiceAccount に関連付けられます。値を
"*"に設定すると、コンポーネントは指定された名前空間のすべての ServiceAccount に関連付けられます。
kubectl
次のコマンドを実行して、
acr-configurationConfigMap を編集します。設定の詳細については、次の表をご参照ください。kubectl edit cm acr-configuration -n kube-systemパラメーターキー
説明
値
service-account
パスワードレスコンポーネントが対象とする ServiceAccount。
デフォルト値はdefaultです。
説明複数の ServiceAccount を指定するには、カンマ (,) で区切ります。値を
"*"に設定すると、指定された名前空間のすべての ServiceAccount に適用されます。acr-registry-info
複数行の YAML 文字列形式の ACR インスタンス情報の配列。各インスタンスは 3 つのパラメーターのセットで設定されます。
説明インスタンス情報のパラメーター:
instanceId:インスタンスの ID。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: イメージのプル
パスワードレスコンポーネントをインストールして設定した後、ワークロードを作成する際にコンポーネントに関連付けられた ServiceAccount を指定します。これにより、パスワードレスでのイメージプルが可能になります。
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 # パスワードレスコンポーネントに関連付けられた ServiceAccount を指定します。
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # ACR イメージアドレスを指定します。
ports:
- containerPort: 80よくある質問
ServiceAccount の即時使用の有効化
この機能には、aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun 以降が必要です。
有効にすると、パスワードレスコンポーネントは Webhook を使用してクラスター内の ServiceAccount の変更を監視します。新しい ServiceAccount が作成されると、コンポーネントは即座にパスワードレス Secret を挿入します。これは、Helm Chart が ServiceAccount と Deployment を同時に作成する場合など、作成直後に ServiceAccount を使用するシナリオで役立ちます。この機能はコンポーネントのパフォーマンスに影響を与える可能性があり、一般的な使用は推奨されません。
マネージドコンポーネント
この機能を有効にするには、クラスターに acr-credential-helper-webhook コンポーネントをインストールします。
ACK クラスターページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons をクリックします。
Add-ons ページで、セキュリティ タブをクリックし、acr-credential-helper-webhook (マネージド) カードを見つけて、インストール をクリックします。
セルフマネージドコンポーネント
この機能を有効にするには、acr-configuration ConfigMap に次のフィールドを追加します。
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10パラメーター | 説明 |
| Webhook 機能を有効にするかどうかを指定します。
|
| ServiceAccount 作成中の例外処理ポリシー。
重要 クラスターの API サーバーの制限により、 |
| 単一の ServiceAccount 作成リクエストのタイムアウト期間。タイムアウトを超えた場合、システムは |
イメージプルの失敗のトラブルシューティング
考えられる原因の 1 つは、パスワードレスコンポーネントの設定が正しくないことです。例:
パスワードレスコンポーネントで設定されたインスタンス情報が ACR インスタンスと一致しない。
プルに使用されるイメージアドレスが、コンポーネントのインスタンス情報で指定されたドメイン名と一致しない。
このトピックの手順に従って、問題をトラブルシューティングしてください。
コンポーネントが正しく設定されているにもかかわらずイメージのプルが失敗する場合、ワークロード YAML で手動で指定されたimagePullSecretsフィールドとパスワードレスコンポーネントとの間に競合がある可能性があります。これを解決するには、imagePullSecretsフィールドを手動で削除し、Pod を再作成します。
imagePullSecrets の使用方法
2024 年 9 月 9 日以降に作成された ACR Personal Edition インスタンスは、パスワードレスコンポーネントをサポートしていません。これらのインスタンスでは、ユーザー名とパスワードを Secret に保存し、imagePullSecretsフィールドで参照することを推奨します。
パスワードレスコンポーネントは、手動で指定された
imagePullSecretsフィールドと互換性がありません。Secret はワークロードと同じ名前空間にある必要があります。
関連トピック
パスワードレスコンポーネントを使用してクロスアカウントでイメージをプルするには、「クロスアカウントでのイメージのプル」をご参照ください。
パスワードレスコンポーネントの変更履歴については、「aliyun-acr-credential-helper」をご参照ください。