apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: example (1)
namespace: spring-petclinic (2)
# ...
spec:
aggregatedClusterRoles: true (3)
# ...
Argo CD Application Controller 的默认集群角色具有一组特定的硬编码权限。Red Hat OpenShift GitOps Operator 管理此集群角色,因此您无法修改它。作为集群管理员,您可以使用以下任何一种方法自定义权限
使用聚合集群角色,您不必通过从头开始创建新的集群角色来定义权限。相反,您可以将多个集群角色组合成一个。
在 Red Hat OpenShift GitOps 1.14 及更高版本中,作为集群管理员,您可以使用聚合集群角色并允许用户轻松地为 Argo CD Application Controller 添加用户定义的权限。
|
您了解 聚合集群角色。
您已在 OpenShift Container Platform 集群上安装 Red Hat OpenShift GitOps。
您已安装 OpenShift CLI (oc
)。
您已安装 Red Hat OpenShift GitOps argocd
CLI。
您已在定义的命名空间中安装了 集群范围的 Argo CD 实例。
您已验证用户定义的集群范围实例是否已配置以下组件的集群角色和集群角色绑定:
Argo CD Application Controller
Argo CD 服务器
Argo CD ApplicationSet Controller(如果创建了 ApplicationSet Controller)
您已禁用集群范围实例的默认集群角色创建。
创建聚合集群角色的过程包括以下步骤:
启用创建聚合集群角色
为 Application Controller 创建用户定义的集群角色并配置用户定义的权限
您可以通过将Argo CD自定义资源 (CR) 中的.spec.aggregatedClusterRoles
字段的值设置为true
来启用聚合集群角色的创建。启用聚合集群角色的创建后,{gitops} 运算符将执行以下操作:
默认情况下,创建一个具有预定义aggregationRule
字段的<argocd_name>-<argocd_namespace>-argocd-application-controller
聚合集群角色。
创建一个相应的集群角色绑定并进行管理。
为 Application Controller 创建和管理view
和admin
集群角色,以将用户定义的权限添加到聚合集群角色中。
要将用户定义的权限配置到<argocd_name>-<argocd_namespace>-argocd-application-controller-admin
集群角色和聚合集群角色中,您必须创建一个或多个用户定义的集群角色,然后为 Application Controller 配置用户定义的权限。
|
要为集群范围的 Argo CD 实例的 Argo CD Application Controller 组件启用聚合集群角色的创建,您必须通过编辑 Argo CD 自定义资源 (CR) 的 YAML 文件来配置相应的字段。
在 Argo CD CR 中,将.spec.aggregatedClusterRoles
字段的值设置为true
。
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: example (1)
namespace: spring-petclinic (2)
# ...
spec:
aggregatedClusterRoles: true (3)
# ...
1 | 集群范围实例的名称。 |
2 | 您希望运行集群范围实例的命名空间。 |
3 | 设置为true 的值将启用聚合集群角色的创建。如果您不想启用聚合集群角色的创建,请不要包含此行或将值设置为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 (1)
Redis: Running
Repo: Running
Server: Running
Sso: Unknown
Events: <none>
1 | Available 状态表示集群范围的 Argo CD 实例运行正常且可用。 |
Red Hat OpenShift GitOps 运算符创建以下默认集群角色并进行管理:
|
通过运行以下命令,验证运算符是否已为 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 54m
不会创建view
和admin
集群角色的集群角色绑定。这是因为view
和admin
集群角色仅向聚合集群角色添加权限,而不直接向 Argo CD Application Controller 配置权限。
或者,您可以从管理员角度使用 OpenShift Container Platform Web 控制台进行验证。您可以分别转到用户管理→角色和用户管理→角色绑定。您可以搜索具有 |
通过检查运行以下命令创建的角色输出的权限来验证是否创建了聚合集群角色。
$ oc get ClusterRole/<cluster_role_name> -o yaml (1)
1 | 将<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 (1)
resourceVersion: "78640"
uid: aeeb2ef5-b531-4fe3-a61a-b5ad8dd8ca6e
aggregationRule: (2)
clusterRoleSelectors:
- matchLabels:
app.kubernetes.io/managed-by: spring-petclinic
argocd/aggregate-to-controller: "true"
rules: [] (3)
1 | 聚合集群角色的名称。 |
2 | 预定义的标签列表指示聚合集群角色可以继承其他用户定义的集群角色的权限。 |
3 | 未设置预定义权限。但是,当运算符立即创建一个<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: (1)
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 (2)
resourceVersion: "78639"
uid: 068b8867-7a0c-4af3-a17a-0560a00eba41
rules: (3)
- apiGroups:
- '*'
resources:
- '*'
verbs:
- get
- list
- watch
- nonResourceURLs:
- '*'
verbs:
- get
- list
1 | 标签与现有聚合集群角色的预定义列表匹配。 |
2 | view 集群角色的名称。 |
3 | 预定义的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: (1)
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 (2)
resourceVersion: "78642"
uid: e2d35b6f-0832-4993-8b24-915a725454f9
aggregationRule: (3)
clusterRoleSelectors:
- matchLabels:
app.kubernetes.io/managed-by: spring-petclinic
argocd/aggregate-to-admin: "true"
rules: null (4)
1 | 标签与现有聚合集群角色的预定义列表匹配。 |
2 | admin 集群角色的名称。 |
3 | 预定义的标签列表指示现有的<argocd_name>-<argocd_namespace>-argocd-application-controller-admin 集群角色可以继承其他用户定义的集群角色的权限。 |
4 | 指定在一个或多个用户定义的集群角色中尚未定义权限。 |
或者,您可以从管理员角度使用 OpenShift Container Platform Web 控制台进行验证。您可以转到用户管理→角色,使用筛选器选项,选择集群范围角色,并搜索聚合集群角色、 |
现在,作为集群管理员,您可以创建一个或多个用户定义的集群角色,并为 Argo CD Application Controller 配置用户定义的权限。
作为集群管理员,要将用户定义的权限添加到您的聚合集群角色中,您必须创建一个或多个用户定义的集群角色,然后为集群范围 Argo CD 实例的 Argo CD Application Controller 组件配置用户定义的权限。
您已为集群范围 Argo CD 实例的 Argo CD Application Controller 组件启用了聚合集群角色的创建。
您有以下默认集群角色由 Red Hat OpenShift GitOps 运算符创建和管理:
具有预定义aggregationRule
字段的<argocd_name>-<argocd_namespace>-argocd-application-controller
聚合集群角色
具有预定义view
权限的<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 文件的名称。
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
1 | 用户定义的集群角色的名称。 |
2 | 标签与现有<argocd_name>-<argocd_namespace>-argocd-application-controller-admin 集群角色的预定义列表匹配。 |
3 | 将要通过<argocd_name>-<argocd_namespace>-argocd-application-controller-admin 集群角色添加到聚合集群角色中的用户定义权限。 |
或者,您可以从**管理员**角度使用 Web 控制台创建用户定义的集群角色。您可以转到**用户管理** → **角色** → **创建角色**,使用前面的 YAML 模板添加权限,然后单击**创建**。 |
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 控制台进行验证。您可以转到**用户管理** → **角色**,使用**筛选器**选项,选择**集群范围角色**,然后搜索 |
通过运行以下命令,验证<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 控制台进行验证。您可以转到**用户管理** → **角色**,使用**筛选器**选项,选择**集群范围角色**,然后搜索聚合集群角色。您必须打开集群角色才能检查详细信息和配置。 |