1.7. Argo CD プッシュモデル用のカスタマイズされたサービスアカウントの作成
ハブクラスター上に ManagedServiceAccount
リソースを作成することにより、マネージドクラスター上にサービスアカウントを作成します。ClusterPermission
リソースを使用して、特定のパーミッションをサービスアカウントに付与します。
Argo CD プッシュモデルで使用するカスタマイズされたサービスアカウントを作成すると、次の利点があります。
- アプリケーションマネージャーアドオンは、各マネージドクラスター上で実行されます。デフォルトでは、Argo CD コントローラーはサービスアカウントアプリケーションマネージャーを使用して、これらのリソースをマネージドクラスターにプッシュします。
- アプリケーションサブスクリプションアドオンはアプリケーションマネージャーサービスを使用してマネージドクラスターにアプリケーションをデプロイするため、アプリケーションマネージャーサービスアカウントには大規模なアクセスパーミッションのセットがあります。制限された権限セットが必要な場合は、アプリケーションマネージャーサービスアカウントを使用しないでください。
- Argo CD プッシュモデルで使用する別のサービスアカウントを指定できます。Argo CD コントローラーが集中ハブクラスターからマネージドクラスターにリソースをプッシュする場合、デフォルトのアプリケーションマネージャーとは異なるサービスアカウントを使用できます。別のサービスアカウントを使用すると、このサービスアカウントに付与されるアクセス許可を制御できます。
-
サービスアカウントはマネージドクラスター上に存在している必要があります。関連するアクセスパーミッションが割り当てられたサービスアカウントの作成を容易にするには、一元化されたハブクラスターで
ManagedServiceAccount
リソースと新しいClusterPermission
リソースを使用します。
次の手順をすべて完了すると、マネージドサービスアカウントにクラスターのアクセスパーミッションを付与できます。クラスター権限があると、マネージドサービスアカウントには、マネージドクラスターにアプリケーションリソースをデプロイするために必要な権限が与えられます。以下の手順を実行します。
1.7.1. マネージドサービスアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
ハブ上の ManagedServiceAccount
カスタムリソースは、マネージドクラスター上に ServiceAccount
を作成する場合に便利です。ハブクラスターの <managed-cluster>
namespace に ManagedServiceAccount
カスタムリソースが作成されると、マネージドクラスターに ServiceAccount
が作成されます。
マネージドサービスアカウントを作成するには、ManagedServiceAccount アドオンの有効化 を参照してください。
1.7.2. クラスターパーミッションの作成 リンクのコピーリンクがクリップボードにコピーされました!
サービスアカウントの作成時には、パーミッションはそのアカウントに関連付けられません。新規サービスアカウントにパーミッションを付与するには、ClusterPermission
リソースを使用します。ClusterPermission
リソースは、ハブのマネージドクラスター namespace に作成されます。このリソースを使用すると、ロール、マネージドクラスター上のクラスターロールリソースを作成し、RoleBinding
または ClusterRoleBinding
リソースを使用して、サービスアカウントにバインドする場合に便利です。
-
<managed-sa-sample>
サービスアカウントのアクセス許可を、<managed-cluster>
上の mortgage namespace にデプロイされるサンプルの住宅ローンアプリケーションに付与するには、以下の内容を含む YAML を作成します。
-
YAML ファイルを
cluster-permission.yaml
という名前のファイルとして保存します。 -
oc apply -f cluster-permission.yaml
を実行します。 -
サンプル
<clusterpermission>
は、mortgage namespace に<clusterpermission-msa-subject-sample>
というロールを作成します。mortgage
の namespace が存在しない場合は、この namespace を作成します。 -
<managed-cluster>
で作成されたリソースを確認します。
サンプル <clusterpermission>
を作成すると、以下のリソースがサンプルのマネージドクラスターに作成されます。
-
デフォルトの namespace 内の
<clusterpermission-msa-subject-sample>
という名前のRole
が 1 つ。 -
ロールを管理されたサービスアカウントにバインドするための、default namespace にある
<clusterpermission-msa-subject-sample>
と呼ばれるRoleBinding
が 1 つ。 -
mortgage namespace に
<clusterpermission-msa-subject-sample>
と呼ばれるRole
が 1 つ。 -
ロールをマネージドサービスアカウントにバインドするための、mortgage namespace 内の
<clusterpermission-msa-subject-sample>
と呼ばれるRoleBinding
が 1 つ。 -
<clusterpermission-msa-subject-sample>
と呼ばれるClusterRole
が 1 つ。 -
ClusterRole
をマネージドサービスアカウントにバインドするための<clusterpermission-msa-subject-sample>
と呼ばれるClusterRoleBinding
が 1 つ。
1.7.3. 既存のロールを使用してクラスター権限を作成する リンクのコピーリンクがクリップボードにコピーされました!
ClusterPermission
リソースを作成すると、新しいロールが自動的に作成されます。既存のロールで ClusterPermission
リソースを引き続き使用できます。
たとえば、次の YAML サンプルを適用すると、既存の ClusterRole
を使用する ClusterPermission
リソースが作成されます。
1.7.4. サブジェクトを参照するためのクラスター権限リソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
異なるサブジェクトを参照する ClusterPermission
リソースを作成すると、一度に 1 つのサブジェクトのみを操作するのではなく、同時に異なるサブジェクトを操作できます。
例については、指定された subject
フィールドを含む次の YAML を参照してください。
1.7.5. GitOpsCluster リソースでの管理サービスアカウントの使用 リンクのコピーリンクがクリップボードにコピーされました!
GitOpsCluster
リソースは、配置を使用して、選択したマネージドクラスターを Argo CD にインポートします。これには、クラスターへのアクセスに使用される情報を含む Argo CD クラスターシークレットの作成が含まれます。デフォルトでは、Argo CD クラスターシークレットは、アプリケーションマネージャーサービスアカウントを使用してマネージドクラスターにアクセスします。
-
マネージドサービスアカウントを使用するように
GitOpsCluster
リソースを更新するには、マネージドサービスアカウントの名前を指定してManagedServiceAccountRef
プロパティーを追加します。 次のサンプルを
gitops.yaml
ファイルとして保存し、GitOpsCluster
カスタムリソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
ファイルを適用するには
oc apply -f gitops.yaml
を実行します。 openshift-gitops
namespace に移動し、<managed cluster-managed-sa-sample-cluster-secret>
という名前の新しい Argo CD クラスターシークレットがあることを確認します。以下のコマンドを実行します。oc get secrets -n openshift-gitops <managed cluster-managed-sa-sample-cluster-secret>
oc get secrets -n openshift-gitops <managed cluster-managed-sa-sample-cluster-secret>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の出力を参照して確認します。
NAME TYPE DATA AGE <managed cluster-managed-sa-sample-cluster-secret> Opaque 3 4m2s
NAME TYPE DATA AGE <managed cluster-managed-sa-sample-cluster-secret> Opaque 3 4m2s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.6. Argo CD アプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
プッシュモデルを使用して、Argo CD コンソールから Argo CD アプリケーションをデプロイします。Argo CD アプリケーションは、マネージドサービスアカウント <managed-sa-sample>
でデプロイされます。
- Argo CD コンソールにログインします。
- Create a new application をクリックします。
- クラスター URL を選択します。
-
Argo CD アプリケーションに移動し、
<managed cluster>
に伝播したロールやクラスターロールなど、指定のパーミッションがあることを確認します。
1.7.7. ポリシーを使用したマネージドサービスアカウントおよびクラスターパーミッションの作成 リンクのコピーリンクがクリップボードにコピーされました!
When the GitOpsCluster resource is updated with the `ManagedServiceAccountRef`, each managed cluster in the placement of this GitOpsCluster needs to have the service account. If you have several managed clusters, it becomes tedious for you to create the managed service account and cluster permission for each managed cluster. You can simply this process by using a policy to create the managed service account and cluster permission for all your managed clusters
When the GitOpsCluster resource is updated with the `ManagedServiceAccountRef`, each managed cluster in the placement of this GitOpsCluster needs to have the service account. If you have several managed clusters, it becomes tedious for you to create the managed service account and cluster permission for each managed cluster. You can simply this process by using a policy to create the managed service account and cluster permission for all your managed clusters
ManagedServiceAccountRef
リソースと ClusterPermission
リソースをハブクラスターに適用すると、このポリシーの配置はローカルクラスターにバインドされます。これらのリソースを、GitOpsCluster リソースの配置内のすべてのマネージドクラスターのマネージドクラスター namespace に複製します。
ポリシーを使用して ManagedServiceAccount
および ClusterPermission
リソースを作成すると、次の属性が含まれます。
-
ポリシー内の
ManagedServiceAccount
とClusterPermission
オブジェクトテンプレートを更新すると、すべてのマネージドクラスターのManagedServiceAccount
およびClusterPermission
リソースがすべて更新されます。 -
ManagedServiceAccount
およびClusterPermission
リソースを直接更新すると、ポリシーが適用されるため、元の状態に戻されます。 GitOpsCluster の配置に関する決定が変更された場合、ポリシーはマネージドクラスターの namespace 内のリソースの作成と削除を管理します。
- マネージドサービスアカウントとクラスター権限を作成するための YAML のポリシーを作成するには、次の内容を含む YAML を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
YAML ファイルを
policy.yaml
というファイルとして保存します。 -
oc apply -f policy.yaml
を実行します。 -
ポリシーのオブジェクトテンプレートでは、GitOpsCluster に関連付けられた配置の決定を繰り返し処理し、次の
ManagedServiceAccount
およびClusterPermission
テンプレートを適用します。