Container Service for Kubernetes (ACK) Pro、ACK Serverless Pro、およびACK Edgeクラスターでは、managed-aliyun-acr-credential-helperコンポーネントを使用して、Container Registry Enterprise EditionおよびContainer Registry Personal Editionインスタンスからイメージをプルできます。 このトピックでは、managed-aliyun-acr-credential-helperを使用して一般的なシナリオでプライベートイメージをプルする方法について説明します。
前提条件
Kubernetes 1.22以降を実行するACK Pro、ACK Serverless Pro、ACK Edge、またはContainer Compute Service (ACS) クラスターが作成されます。
Container Registry Enterprise Editionインスタンスが作成されました。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。
Container Registryには、関連するAlibaba Cloudサービスにアクセスするために必要な権限があります。 詳細については、「クラウドリソースへのアクセス許可」をご参照ください。
ユーザー側のバージョンのmanaged-aliyun-acr-credential-helperはクラスターにインストールされていません。
managed-aliyun-acr-credential-helperを使用してAlibaba Cloudアカウント間でイメージをプルする場合、クラスターはKubernetes 1.22以降を実行するACK Serverless Pro、ACK Pro、またはACSクラスターである必要があります。
使用上の注意
managed-aliyun-acr-credential-helperコンポーネントは、Container Registryコンソールで設定を読み取り、プライベートイメージを取得します。 managed-aliyun-acr-credential-helperコンポーネントを設定した後、コンポーネントはクラスターにシークレットを生成し、設定で指定したサービスアカウントにシークレットを関連付けます。 既定では、このサービスアカウントを使用するすべてのポッドは、コンポーネントによって生成されたシークレットを使用してイメージをプルします。 これにより、画像をプルするときに他のシークレットを使用する必要がなくなります。
managed-aliyun-acr-credential-helperコンポーネントのインストール
managed-aliyun-acr-credential-helperコンポーネントをインストールしている場合は、そのコンポーネントが最新バージョンであることを確認してください。 それ以外の場合は、コンポーネントを更新します。 コンポーネントを更新しても、ビジネスに悪影響はありません。 詳細については、「コンポーネントの管理」をご参照ください。
aliyun-acr-credential-helperコンポーネントの詳細については、「aliyun-acr-credential-helper」をご参照ください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (管理対象) カードを見つけ、カードの右下隅にある [インストール] をクリックし。
[aliyun-acr-credential-helperのインストール] ページで、AcrInstanceInfoの横にある [追加] をクリックして、シークレットを使用せずにイメージを取得するACRインスタンスを1つ以上追加します。 Container Registry Personal Editionインスタンスからイメージを取得する場合は、AcrInstanceInfoの横にある + Addをクリックする必要もあります。 ただし、instanceIdパラメーターを設定する必要はありません。
次の表に、ACRインスタンスを指定するパラメーターを示します。
パラメーター
説明
値
InstanceId
Container RegistryインスタンスのID。 インスタンスIDは、Container Registryコンソールで取得できます。
Container Registry Enterprise Editionインスタンスの場合、このパラメーターの値は
cri-
で始まります。Container Registry Personal Editionインスタンスの場合は、パラメーターを空のままにします。
regionId
Container RegistryインスタンスのリージョンID。 Container RegistryコンソールでリージョンIDを取得できます。 クラスターがContainer Registryインスタンスと同じリージョンにない場合は、このパラメーターを指定する必要があります。 クラスターがContainer Registryインスタンスと同じリージョンにある場合は、このパラメーターを空のままにすることができます。
たとえば、中国 (杭州) リージョンのリージョンIDは
cn-Hangzhou
です。ドメイン
デフォルトでは、Container Registry Enterprise Editionインスタンスのすべてのドメイン名が表示されます。 特定のドメイン名を指定できます。 複数のドメイン名はコンマ (,) で区切ります。
example1.com,example2.com
assumeRoleARN
Container Registryインスタンスを所有するAlibaba Cloudアカウントが引き受けるRAMロールのAlibaba Cloudリソース名 (ARN) 。
acs:ram::aaa
expireDuration
Alibaba Cloudアカウント間でイメージをプルするために使用されるシークレットの有効期間。
デフォルト値は 3600 です。 有効な値は 3600~43200 です。 単位は秒です。 アカウントBのRAMロールのMaxSessionDurationパラメーターを43200に設定します。
rrsaRoleARN
クラスターを所有するAlibaba Cloudアカウントが引き受けるRAMロールのARN。
acs:ram::bbb
rrsaOIDCProviderRoleARN
クラスターで使用されるOpenID Connect (OIDC) プロバイダーのARN。
acs:ram::ccc
Container Registryインスタンスのパラメーターを設定した後、クラスターのパラメーターを設定する必要があります。 次の表に、クラスターのパラメーターを示します。
パラメーター
説明
値
watchNamespace
シークレットを使用せずにイメージを取得する名前空間。
デフォルト値:
Default
。all
の値は、Container Registryインスタンスのすべての名前空間を指定します。 複数の名前空間を設定できます。 複数の名前空間は、コンマ (,) で区切ります。 パラメーターのビジネス名前空間を設定することを推奨します。 可能であれば、クラスターのシステムコンポーネントが格納されているすべて
または名前空間にパラメーターを設定しないでください。 そうしないと、システムコンポーネントイメージがプルされない可能性があります。serviceAccount
managed-aliyun-acr-credential-helperコンポーネントによって生成されたシークレットに関連付けられているサービスアカウント。
デフォルト値:
Default
。説明複数のサービスアカウントを指定できます。 サービスアカウントはコンマ (,) で区切ります。 アスタリスク (*) の値は、指定された名前空間内のすべてのサービスアカウントを指定します。
expiringThreshold
キャッシュされたシークレットが期限切れになるまでの期間。
デフォルト値:
15分
。 デフォルト値を使用することを推奨します。 デフォルト値は、キャッシュされたシークレットが有効期限の15分前に自動的に更新されることを指定します。RRSAを有効にするかどうかを指定します
チェックボックスをオンにして、クラスターおよびmanaged-aliyun-acr-credential-helperコンポーネントのサービスアカウントのRAMロール (RRSA) 機能を設定すると、この機能が有効になります。
デフォルトでは、このオプションは選択されていません。 RRSAを設定してこのチェックボックスをオンにすると、Alibaba Cloudアカウント間でContainer Registryインスタンスからイメージをプルできます。
次の表に、プライベートイメージを取得するシナリオを示します。
設定方法 | シナリオ |
既定では、managed-aliyun-acr-credential-helperコンポーネントはこのメソッドを使用してプライベートイメージをプルします。 この方法は、クラスターとContainer Registryインスタンスが同じAlibaba Cloudアカウントに属している場合に適用されます。 | |
この方法は、クラスターとContainer Registryインスタンスが異なるリージョンにある場合に適用できます。 | |
この方法は、RRSAを設定してAlibaba Cloudアカウント間でイメージをプルする場合に適用されます。 |
シナリオ1: 同じアカウント内の画像をプルする
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。
左側のナビゲーションウィンドウで、
を選択します。[アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (Managed) カードを見つけ、カードの右下隅にある [設定] をクリックします。
aliyun-acr-credential-helper Parametersダイアログボックスで、[追加] をクリックします。 instanceIdフィールドに、Container Registry Enterprise EditionインスタンスのIDを入力します。 [OK] をクリックします。
シナリオ2: リージョン間で画像をプルする
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。
左側のナビゲーションウィンドウで、
を選択します。[アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (Managed) カードを見つけ、カードの右下隅にある [設定] をクリックします。
aliyun-acr-credential-helper Parametersダイアログボックスで、[追加] をクリックします。 instanceIdフィールドに、Container Registry Enterprise EditionインスタンスのIDを入力します。 regionIdフィールドに、Container Registry Enterprise EditionインスタンスのリージョンIDを入力します。 [OK] をクリックします。
シナリオ3: アカウント間で画像をプルする
RRSAを設定してアカウント間でイメージをプル
RRSA機能を使用して、クラスター内のポッドでアクセス制御を実行できます。
Kubernetes 1.22以降を実行するACK Basicクラスター、ACK Proクラスター、ACK Serverless Proクラスターでのみ、Container Registry Enterprise Editionインスタンス (Basic EditionおよびAdvanced Editionインスタンスを含む) からイメージをプルするようにRRSAを設定できます。
RRSA機能を有効にすると、managed-aliyun-acr-credential-helperによって生成されたシークレットを使用して、Container Registry Personal Editionインスタンスのプライベートイメージをプルすることはできません。 RRSA機能を有効にすると、AccessKeyペア方式など、このトピックで説明されている他の認証方式を使用することはできません。
managed-aliyun-acr-credential-helperのRRSA機能を有効にするには、ACKコンソールの [クラスタ情報] ページの [基本情報] タブの [クラスタ情報] セクションで [RRSAの有効化] をクリックしてRRSAを有効にし、managed-aliyun-acr-credential-helperのRRSAを設定する必要があります。 managed-aliyun-acr-credential-helperにRRSAを設定し、ACKコンソールの [クラスター情報] ページの [基本情報] タブでRRSAを有効にする場合は、RRSAの設定後にaliyun-acr-credential-helperに対応するポッドを削除する必要があります。 これにより、RRSAが有効になります。
クラスターのRRSA機能を有効にします。 詳細については、「RRSAの有効化」をご参照ください。
アカウント間でContainer Registryリソースにアクセスするために必要なRAM権限を付与します。
クラスターでRRSA機能を有効にした後、次の手順を実行して、RRSA for managed-aliyun-acr-credential-helperを有効にする必要があります。 たとえば、現在のクラスターはアカウントAにあり、Container RegistryインスタンスはアカウントBにあります。Container Registryインスタンスからイメージを取得する場合は、アカウントAのクラスターにアカウントBのContainer Registryリソースにアクセスする権限を付与する必要があります。
アカウントaのRAMロールの設定
アカウントaでRAMロールを作成し、AliyunSTSAssumeRoleAccessポリシーをRAMロールにアタッチします。 このポリシーは、アカウントAのロールを引き受ける権限をRAMロールに付与します。RAMロールの信頼ポリシーを変更します。
例の <oidc_issuer_url> をクラスターのOIDCプロバイダーのURLに置き換えます。 URLは、ACKコンソールの [クラスター情報] ページの [基本情報] タブで取得できます。
例の <oidc_provider_arn> を、クラスターのOIDCプロバイダーのARNに置き換えます。 ARNは、ACKコンソールの [クラスター情報] ページの [基本情報] タブで取得できます。
{ "Statement": [ { "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "oidc:aud": "sts.aliyuncs.com", "oidc:iss": "<oidc_issuer_url>", "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper" } }, "Effect": "Allow", "Principal": { "Federated": [ "<oidc_provider_arn>" ] } } ], "Version": "1" }
アカウントBのRAMロールの設定
アカウントBでContainer Registry関連の権限を持つRAMロールを作成します。RAMロールの名前をクリックします。 [信頼ポリシー] タブで、信頼ポリシーの [プリンシパル] フィールドにアカウントAのRAMロールのARNを入力します。 次のポリシーをアカウントBのRAMロールにアタッチします。このポリシーは、アカウントBのRAMロールに、Container Registryインスタンスの情報を取得し、インスタンスからイメージをプルする権限を付与します。
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] }
RAMロールのMaxSessionDurationパラメーターを設定できます。 このパラメーターの有効値は3600〜43200秒です。 acr-configuration ConfigMapを設定するときは、次の手順7でexpireDurationパラメーターを設定する必要があります。 MaxSessionDurationとexpireDurationに同じ値を指定することを推奨します。 expireDurationの値は、MaxSessionDurationの値以下にすることができます。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。
左側のナビゲーションウィンドウで、
を選択します。[アドオン] ページで、[セキュリティ] タブをクリックし、[セキュリティ] セクションでaliyun-acr-credential-helper (管理対象) カードを見つけ、カードの右下隅にある [設定] をクリックします。
aliyun-acr-credential-helper Parametersダイアログボックスで、[追加] をクリックし、assumeRoleARN、expireDuration、rrsaRoleARN、およびrrrsaOIDCProviderRoleARNパラメーターの値を指定します。 [OK] をクリックします。