aliyun-acr-credential-helperコンポーネントを使用すると、パスワードを使用せずに、Container Registry Personal EditionおよびEnterprise Editionのインスタンスから自己管理Kubernetesクラスターにプライベートイメージをプルできます。 このトピックでは、2つのシナリオでaliyun-acr-credential-helperを使用して、パスワードを使用せずにプライベートイメージをプルする方法について説明します。
前提条件
クラスター登録プロキシが作成され、外部Kubernetesクラスターがクラスター登録プロキシに接続されます。 詳細については、「ACKコンソールでの登録済みクラスターの作成」および「onectlを使用した登録済みクラスターの作成」をご参照ください。
kubectlクライアントが登録済みクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
使用上の注意
aliyun-acr-credential-helperコンポーネントは、ACKクラスターのkube-system名前空間のacr-configuration ConfigMapから設定を読み取り、プライベートイメージをプルします。 aliyun-acr-credential-helperコンポーネントを設定すると、コンポーネントはクラスターにシークレットを生成し、そのシークレットをacr-configuration ConfigMapで指定したサービスアカウントに関連付けます。 既定では、このサービスアカウントを使用するすべてのポッドは、生成されたシークレットを使用して、パスワードを使用せずにイメージをプルします。
Helmグラフなどのアプリケーションをデプロイするためのサービスアカウントを作成する場合、サービスアカウントはaliyun-acr-credential-helperによって生成されるシークレットに関連付けられる期間を必要とします。 画像を取得する前に、webhook機能を使用してサービスアカウントにシークレットを挿入することをお勧めします。
次の表に、aliyun-acr-credential-helperコンポーネントを使用してパスワードを使用せずにプライベートイメージをプルする場合の制限を示します。
パラメーター | 説明 |
ミラーリング |
|
クラスターとKubernetesのバージョン |
|
注意事項
項目 | 注意 |
imagePullSecrets |
|
ServiceAccount |
|
リージョン | プルするプライベートイメージがACKクラスターのリージョンにあるかどうかを確認します。 デフォルトでは、ACKクラスターのリージョンにあるContainer Registryインスタンスからのみプライベートイメージをプルできます。 リージョン間で画像をプルする場合は、このトピックの「シナリオ2: リージョン間で画像をプルする」を参照してください。 |
YAML 形式 | kube-system名前空間のacr-configuration ConfigMapを変更する場合は、このトピックの例と同じインデントを使用するようにしてください。 このトピックで提供されているYAMLコンテンツをエディターに貼り付け、対応する値を置き換えてから、設定を適用することをお勧めします。 これにより、ConfigMapの形式が有効になります。 |
自己管理クラスターでのaliyun-acr-credential-helperコンポーネントの設定
手順1: aliyun-acr-credential-helperへのRAM権限の付与
onectlの使用
オンプレミスマシンにonectlをインストールします。 詳細については、「onectlを使用した登録済みクラスターの管理」をご参照ください。
次のコマンドを実行して、aliyun-acr-credential-helperにRAM権限を付与します。
onectl ram-user grant -- addon aliyun-acr-credential-helper
期待される出力:
Ram policy ack-one-registered-cluster-policy-aliyun-acr-credential-helper granted to ram user ack-one-user-ce313528c3 successfully.
コンソールの使用
コンポーネントを外部クラスターにインストールする前に、AccessKeyペアを設定して、外部クラスターにAlibaba Cloudリソースへのアクセス権限を付与する必要があります。 AccessKeyペアを設定する前に、RAMユーザーを作成し、RAMユーザーにAlibaba Cloudリソースへのアクセス権限を付与します。
RAMユーザーを作成します。 詳細については、「RAMユーザーの作成」をご参照ください。
カスタムポリシーを作成します。 詳細については、「カスタムポリシーの作成」をご参照ください。
例:
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken" 、 "cr:ListInstanceEndpoint" 、 "cr:PullRepository" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
カスタムポリシーをRAMユーザーにアタッチします。 詳細については、「RAMユーザーへの権限付与」をご参照ください。
RAMユーザーのAccessKeyペアを作成します。 詳細については、「AccessKeyペアの取得」をご参照ください。
AccessKeyペアを使用して、登録済みクラスターにalibaba-addon-Secretという名前のシークレットを作成します。
aliyun-acr-credential-helperコンポーネントをインストールすると、システムは自動的にAccessKeyペアを使用してクラウドリソースにアクセスします。
kubectl -n kube-system create secret generic alibaba-addon-secret -- from-literal='access-key-id=<your access key id>'-- from-literal='access-key-secret=<your access key secret>'
説明<your access key id>
と<your access key secret>
を、前の手順で取得したAccessKeyペアに置き換えます。
手順2: aliyun-acr-credential-helperの更新と設定
パスワードを使用せずに画像をプルするために使用する前に、aliyun-acr-credential-helperをインストールして構成する必要があります。
onectlの使用
次のコマンドを実行して、aliyun-acr-credential-helperをインストールします。
onectl addon install aliyun-acr-credential-helper
期待される出力:
Addon aliyun-acr-credential-helper, version **** installed.
aliyun-acr-credential-helperが既にインストールされている場合は、aliyun-acr-credential-helperが最新バージョンであることを確認してください。 次のコマンドを実行して、aliyun-acr-credential-helperを最新バージョンに更新できます。
onectl addon upgrade aliyun-acr-credential-helper
期待される出力:
Addon aliyun-acr-credential-helper upgraded to version ****.
コンソールの使用
aliyun-acr-credential-helperコンポーネントをインストールした場合は、そのコンポーネントが最新バージョンであることを確認してください。 それ以外の場合は、コンポーネントを更新します。 コンポーネントを更新してもビジネスには影響しません。 詳細については、「コンポーネントの管理」をご参照ください。 aliyun-acr-credential-helperコンポーネントの詳細については、「aliyun-acr-credential-helper」をご参照ください。
aliyun-acr-credential-helperコンポーネントが最新バージョンに更新されると、コンポーネントが依存するRAMロールが変更されます。 コンポーネントは、コンポーネントが依存するRAMロールを指定できるように、tokenModeパラメーターを提供します。 コンポーネントが依存するRAMロールの変更による影響の詳細については、「 [製品の変更] aliyun-acr-credential-helperが依存するアクセス許可の取り消し」をご参照ください。
aliyun-acr-credential-helperコンポーネントが最新バージョンに更新されると、コンポーネントが依存するRAMロールが変更されます。 コンポーネントは、コンポーネントが依存するRAMロールを指定できるように、tokenModeパラメーターを提供します。 コンポーネントが依存するRAMロールの変更による影響の詳細については、「 [製品の変更] aliyun-acr-credential-helperが依存するアクセス許可の取り消し」をご参照ください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
On theアドオンページをクリックし、セキュリティタブ、検索aliyun-acr-credential-helperをクリックし、インストール.
[パラメーター] ページで、tokenModeパラメーターのデフォルト値autoを使用し、[OK] をクリックします。
ACK管理クラスターを最新バージョンに更新すると、aliyun-acr-credential-helperコンポーネントがtokenModeパラメーターを提供します。 コンポーネントのインストール後にパラメーターを変更できます。 コンポーネントが変更されると、システムはコンポーネントのポッドを再作成します。 表に記載されている古いクラスタは、2023年4月3日より前に作成されたクラスタを指し、新しいクラスタは、2023年4月3日以降に作成されたクラスタを指す。 次の表に、tokenModeパラメーターの有効な値を示します。
tokenMode
説明
auto
デフォルト値であるmanagedRoleモードを使用するかどうかを自動的に決定します。 新しいクラスターにはmanagedRoleモードを、古いクラスターにはworkerRoleモードを使用します。
managedRole
managedRoleモードを使用します。
workerRole
workerRoleモードを使用します。
シナリオ1: Container Registry Enterprise EditionおよびContainer Registry Personal Editionインスタンスからプライベートイメージをプルする
ACKを使用すると、Container Registry Enterprise EditionとPersonal Editionから同時に、Container Registry Enterprise Editionから個別に、またはContainer Registry Personal Editionから個別にプライベートイメージをプルできます。 ビジネス要件に基づいてacr-configuration ConfigMapを変更します。 詳細については、「コンポーネントの設定」をご参照ください。 例:
Enterprise Edition
apiVersion:v1 kind:ConfigMap metadata: name:acr-configuration namespace:kube-system selfLink:/api/v1/namespaces/kube-system/configmaps/acr-configuration data: acr-api-version:"2018-12-01" acr-registry-info:|- -instanceId:"cri-xxx" # The default parameter in the console is #-instanceId. You must remove the number sign (#) and configure this parameter. regionId:"cn-hangzhou" expiring-threshold:15m service-account:default watch-namespace:all
パーソナルエディション
apiVersion:v1 kind:ConfigMap metadata: name:acr-configuration namespace:kube-system selfLink:/api/v1/namespaces/kube-system/configmaps/acr-configuration data: acr-api-version:"2018-12-01" acr-registry-info:|- -instanceId:"" # The default parameter in the console is #-instanceId. You must remove the number sign (#) and retain the default value. regionId:"cn-hangzhou" expiring-threshold:15m service-account:default watch-namespace:all
次のいずれかの方法を使用して、acr-configuration ConfigMapを設定できます。
コンソールの使用
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックし、左側のナビゲーションウィンドウで [設定] > [設定] を選択します。
ConfigMapページの上部で、名前空間ドロップダウンリストからkube-systemを選択します。 次に、acr-configuration ConfigMapを見つけ、パラメーターを設定します。
acr-configuration ConfigMapが存在しない場合は、ConfigMapを作成します。 詳細については、「ConfigMapの作成」をご参照ください。 ConfigMapsの更新方法については、「ConfigMapsの管理」をご参照ください。
ConfigMapのキーと値を設定するには、[操作] 列の [編集] をクリックします。
ConfigMapのキーと値を設定するには、[操作] 列の [YAMLの編集] をクリックします。
kubectlの使用
次のコマンドを実行して、acr-configuration ConfigMapの編集ページに移動します。
kubectl edit cm acr-configuration -n kube-system
要件に基づいて、acr-configuration ConfigMapのパラメーターを設定します。
シナリオ2: リージョン間で画像をプルする
Container Registryインスタンスから登録済みクラスターにイメージをプルする場合、Container Registryインスタンスと登録済みクラスターが異なるリージョンにデプロイされている場合は、acr-configuration ConfigMapを変更する必要があります。
たとえば、中国 (北京) リージョンと中国 (杭州) リージョンに同時にデプロイされているContainer Registryインスタンスからイメージをプルする場合は、次のコードブロックに基づいてacr-configuration ConfigMapを変更します。 詳細は、「コンポーネントの設定」をご参照ください。
data:
service-account: "default"
watch-namespace: "all"
expiring-threshold: "15m"
notify-email: "**@aliyuncs.com"
acr-registry-info: |
- instanceId: ""
regionId: cn-beijing
- instanceId: ""
regionId: cn-hangzhou
次のいずれかの方法を使用して、acr-configuration ConfigMapを設定できます。
コンソールの使用
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックし、左側のナビゲーションウィンドウで [設定] > [設定] を選択します。
ConfigMapページの上部で、名前空間ドロップダウンリストからkube-systemを選択します。 次に、acr-configuration ConfigMapを見つけ、パラメーターを設定します。
acr-configuration ConfigMapが存在しない場合は、ConfigMapを作成します。 詳細については、「ConfigMapの作成」をご参照ください。 ConfigMapsの更新方法については、「ConfigMapsの管理」をご参照ください。
ConfigMapのキーと値を設定するには、[操作] 列の [編集] をクリックします。
ConfigMapのキーと値を設定するには、[操作] 列の [YAMLの編集] をクリックします。
kubectlの使用
次のコマンドを実行して、acr-configuration ConfigMapの編集ページに移動します。
kubectl edit cm acr-configuration -n kube-system
要件に基づいて、acr-configuration ConfigMapのパラメーターを設定します。