3.5. 创建用户定义的集群角色并为应用程序控制器配置用户定义的权限
作为集群管理员,要将用户定义的权限添加到聚合的集群角色中,您必须创建一个或多个用户定义的集群角色,然后为集群范围的 Argo CD Application CD 实例的 Argo CD Application Controller 组件配置用户定义的权限。
先决条件
- 您已启用了为集群范围的 Argo CD Application CD 实例的 Argo CD Application Controller 组件创建聚合的集群角色。
您有以下由 Red Hat OpenShift GitOps Operator 创建和管理的默认集群角色:
-
<argocd_name>-<argocd_namespace>-argocd-application-controller
聚合集群角色带有预定义的aggregateRule
字段 -
<argocd_name>-<argocd_namespace>-argocd-application-controller-view
带有预定义的查看
权限 -
<argocd_name>-<argocd_namespace>-argocd-application-controller-admin
没有预定义权限
-
流程
使用以下命令,创建带有所需标签和权限的新集群角色:
$ oc apply -n <namespace> -f <cluster_role_name>.yaml
其中:
<namespace>
- 指定定义的命名空间的名称。
<cluster_role_name>
指定定义的集群角色 YAML 文件的名称。
用户定义的集群角色 YAML 示例
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: user-application-controller 1 labels: 2 app.kubernetes.io/managed-by: spring-petclinic app.kubernetes.io/name: example app.kubernetes.io/part-of: argocd argocd/aggregate-to-admin: 'true' rules: 3 - verbs: - '*' apiGroups: - '' resources: - namespaces - persistentvolumeclaims - persistentvolumes - configmaps - verbs: - '*' apiGroups: - compliance.openshift.io resources: - scansettingbindings
提示另外,您可以使用 Web 控制台从 Administrator 视角创建用户定义的集群角色。您可以进入 User Management
Roles Create Role,使用前面的 YAML 模板添加权限,然后点 Create。 输出示例
clusterrole.rbac.authorization.k8s.io/user-application-controller created
创建了用户定义的集群角色。
运行以下命令,验证 <
argocd_name>-<argocd_namespace>-argocd-application-controller-admin
集群角色是否继承了用户定义的集群角色的权限:$ oc get ClusterRole/<argocd_name>-<argocd_namespace>-argocd-application-controller-admin -o yaml
其中:
<argocd_name>
- 指定用户定义的集群范围的 Argo CD 实例的名称。
<argocd_namespace>
指定安装 Argo CD 的命名空间。
输出示例
aggregationRule: clusterRoleSelectors: - matchLabels: app.kubernetes.io/managed-by: spring-petclinic argocd/aggregate-to-admin: "true" 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: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: "79202" uid: e2d35b6f-0832-4993-8b24-915a725454f9 rules: - apiGroups: - "" resources: - namespaces - persistentvolumeclaims - persistentvolumes - configmaps verbs: - '*' - apiGroups: - compliance.openshift.io resources: - scansettingbindings verbs: - '*'
提示或者,您可以使用 OpenShift Container Platform Web 控制台从 Administrator 视角进行验证。您可以进入 User Management
Roles,使用 Filter 选项,选择 Cluster-wide Roles,并搜索 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin
集群角色。您必须打开集群角色来检查详情和配置。
运行以下命令,验证
<argocd_name>-<argocd_namespace>-argocd-application-controller
聚合集群角色是否继承来自 <argocd_name>-<argocd_namespace>-argocd-application-controller-admin
和 <argocd_name>-<argocd_namespace>-argocd-application-controller-view
集群角色的权限:$ oc get ClusterRole/<argocd_name>-<argocd_namespace>-argocd-application-controller -o yaml
其中:
<argocd_name>
- 指定用户定义的集群范围的 Argo CD 实例的名称。
<argocd_namespace>
指定安装 Argo CD 的命名空间。
聚合集群角色的输出示例
aggregationRule: clusterRoleSelectors: - matchLabels: app.kubernetes.io/managed-by: spring-petclinic argocd/aggregate-to-controller: "true" 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: "79203" uid: aeeb2ef5-b531-4fe3-a61a-b5ad8dd8ca6e rules: - apiGroups: - "" resources: - namespaces - persistentvolumeclaims - persistentvolumes - configmaps verbs: - '*' - apiGroups: - compliance.openshift.io resources: - scansettingbindings verbs: - '*' - apiGroups: - '*' resources: - '*' verbs: - get - list - watch - nonResourceURLs: - '*' verbs: - get - list
提示或者,您可以使用 OpenShift Container Platform Web 控制台从 Administrator 视角进行验证。您可以进入 User Management
Roles,使用 Filter 选项,选择 Cluster-wide Roles,并搜索聚合的集群角色。您必须打开集群角色来检查详情和配置。