3.4. 集約されたクラスターロールの作成を有効にする
クラスタースコープの Argo CD インスタンスの Argo CD Application Controller コンポーネントの集約されたクラスターロールの作成を有効にするには、Argo CD カスタムリソース (CR) の YAML ファイルを編集して、対応するフィールドを設定する必要があります。
手順
Argo CD CR で、
.spec.aggregatedClusterRolesフィールドの値をtrueに設定します。Argo CD CR の例:
apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: example namespace: spring-petclinic # ... spec: aggregatedClusterRoles: true # ...各項目の説明:
metadata.name- クラスタースコープのインスタンスの名前を指定します。
metadata.namespace- Argo CD がインストールされている namespace を指定します。
spec.aggregatedClusterRoles-
集約されたクラスターロールの作成を有効にするために、クラスターロールの値を指定します。集約されたクラスターロールの作成を有効にしない場合は、この行を含めないか、値を
falseに設定します。
出力例:
argocd.argoproj.io/example configured次のコマンドを実行して、クラスタースコープの Argo CD インスタンスの
StatusフィールドにPhase: Availableと表示されていることを確認します。$ oc describe argocd.argoproj.io/example -n spring-petclinic出力例:
Name: example Namespace: spring-petclinic Labels: <none> Annotations: <none> API Version: argoproj.io/v1beta1 Kind: ArgoCD Metadata: Creation Timestamp: 2024-08-14T08:20:53Z Finalizers: argoproj.io/finalizer Generation: 3 Resource Version: 60437 UID: 57940e54-d60b-4c1a-bc4a-85c81c63ab69 Spec: Aggregated Cluster Roles: true ... Status: Application Controller: Running Application Set Controller: Unknown Phase: Available Redis: Running Repo: Running Server: Running Sso: Unknown Events: <none>Availableステータスは、クラスタースコープの Argo CD インスタンスが正常で使用可能であることを示します。注記Red Hat OpenShift GitOps Operator は、次のデフォルトのクラスターロールを作成し、管理します。
-
<argocd_name>-<argocd_namespace>-argocd-application-controller集約クラスターロール -
<argocd_name>-<argocd_namespace>-argocd-application-controller-view -
<argocd_name>-<argocd_namespace>-argocd-application-controller-admin
-
次のコマンドを実行して、Operator が Argo CD Application Controller と Argo CD サーバーコンポーネントのデフォルトのクラスターロールとクラスターロールバインディングを作成したことを確認します。
$ oc get ClusterRoles -l app.kubernetes.io/part-of=argocd出力例:
NAME CREATED AT example-spring-petclinic-argocd-application-controller 2024-08-14T08:20:58Z example-spring-petclinic-argocd-application-controller-admin 2024-08-14T09:08:38Z example-spring-petclinic-argocd-application-controller-view 2024-08-14T09:08:38Z example-spring-petclinic-argocd-server 2024-08-14T08:20:59Z$ oc get ClusterRoleBindings -l app.kubernetes.io/part-of=argocd出力例:
NAME ROLE AGE example-spring-petclinic-argocd-application-controller ClusterRole/example-spring-petclinic-argocd-application-controller 54m example-spring-petclinic-argocd-server ClusterRole/example-spring-petclinic-argocd-server 54mviewおよびadminクラスターロールのクラスターロールバインディングは作成されません。これは、viewおよびadminクラスターロールは集約されたクラスターロールに権限を追加するだけで、Argo CD Application Controller への権限を直接設定しないためです。ヒントまたは、OpenShift Container Platform Web コンソールを使用して、Administrator パースペクティブから確認することもできます。User Management
Roles および User Management RoleBindings に移動します。 app.kubernetes.io/part-of:argocdラベルの付いたクラスターロールとクラスターロールバインディングを検索できます。集約クラスターロールが作成されていることを確認するには、次のコマンドを実行してロールの権限をチェックします。
$ oc get ClusterRole/<cluster_role_name> -o yaml各項目の説明:
<cluster_role_name>- 作成されたロールの名前を指定します。
集約されたクラスターロールの出力例:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: argocds.argoproj.io/name: example argocds.argoproj.io/namespace: spring-petclinic kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}} rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: "2024-08-14T08:20:58Z" labels: app.kubernetes.io/managed-by: spring-petclinic app.kubernetes.io/name: example app.kubernetes.io/part-of: argocd name: example-spring-petclinic-argocd-application-controller resourceVersion: "78640" uid: aeeb2ef5-b531-4fe3-a61a-b5ad8dd8ca6e aggregationRule: clusterRoleSelectors: - matchLabels: app.kubernetes.io/managed-by: spring-petclinic argocd/aggregate-to-controller: "true" rules: []各項目の説明:
metadata.name- 集約されたクラスターロールの名前を指定します。
aggregationRule.clusterRoleSelectors- 定義済みのラベルリストを指定します。これは、集約されたクラスターロールが、他のユーザー定義クラスターロールから権限を継承できることを示しています。
rules-
事前定義済みの権限を指定します。ただし、Operator が
<argocd_name>-<argocd_namespace>-argocd-application-controller-viewクラスターロールをすぐに作成すると、対応する定義済みview権限が集約されたクラスターロールに追加されます。
viewクラスターロールの出力例:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: argocds.argoproj.io/name: example argocds.argoproj.io/namespace: spring-petclinic kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}} creationTimestamp: "2024-08-14T09:59:14Z" labels: app.kubernetes.io/managed-by: spring-petclinic app.kubernetes.io/name: example app.kubernetes.io/part-of: argocd argocd/aggregate-to-controller: "true" name: example-spring-petclinic-argocd-application-controller-view resourceVersion: "78639" uid: 068b8867-7a0c-4af3-a17a-0560a00eba41 rules: - apiGroups: - '*' resources: - '*' verbs: - get - list - watch - nonResourceURLs: - '*' verbs: - get - list各項目の説明:
metadata.labels- 既存の集約されたクラスターロールの事前定義済みリストに一致するラベルを定義します。
metadata.name-
viewクラスターロールの名前を指定します。 rules-
事前定義済みの
view権限を指定します。これらの権限は、既存の集約されたクラスターロールに追加されます。
adminクラスターロールの出力例:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: argocds.argoproj.io/name: example argocds.argoproj.io/namespace: spring-petclinic kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}} rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: "2024-08-14T09:59:15Z" labels: app.kubernetes.io/managed-by: spring-petclinic app.kubernetes.io/name: example app.kubernetes.io/part-of: argocd argocd/aggregate-to-controller: "true" name: example-spring-petclinic-argocd-application-controller-admin resourceVersion: "78642" uid: e2d35b6f-0832-4993-8b24-915a725454f9 aggregationRule: clusterRoleSelectors: - matchLabels: app.kubernetes.io/managed-by: spring-petclinic argocd/aggregate-to-admin: "true" rules: null各項目の説明:
metadata.labels- 既存の集約されたクラスターロールの事前定義済みリストに一致するラベルを指定します。
metadata.name-
adminクラスターロールの名前を指定します。 aggregationRule.clusterRoleSelectors-
定義済みのラベルリストを指定します。これは、既存の
<argocd_name>-<argocd_namespace>-argocd-application-controller-adminクラスターロールが、他のユーザー定義クラスターロールから権限を継承できることを示しています。 rules- 1 つ以上のユーザー定義のクラスターロールにまだ権限が定義されていないことを指定します。
ヒントまたは、OpenShift Container Platform Web コンソールを使用して、Administrator パースペクティブから確認することもできます。User Management
Roles に移動し、Filter オプションを使用して Cluster-wide Roles を選択し、集約されたクラスターロール、 view、およびadminクラスターロールを検索できます。詳細と設定を確認するには、クラスターロールを作成する必要があります。クラスター管理者は、1 つ以上のユーザー定義のクラスターロールを作成し、Argo CD Application Controller のユーザー定義のアクセス許可を設定できるようになりました。