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 没有预定义权限

流程

  1. 使用以下命令,创建带有所需标签和权限的新集群角色:

    $ 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

    1
    用户定义的集群角色的名称。
    2
    标签与现有 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 集群角色匹配。
    3
    用户定义的权限,通过 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 集群角色添加到聚合的集群角色中。
    提示

    另外,您可以使用 Web 控制台从 Administrator 视角创建用户定义的集群角色。您可以进入 User Management Roles Create Role,使用前面的 YAML 模板添加权限,然后点 Create

    输出示例

    clusterrole.rbac.authorization.k8s.io/user-application-controller created

    创建了用户定义的集群角色。

  2. 运行以下命令,验证 < 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 集群角色。您必须打开集群角色来检查详情和配置。

  3. 运行以下命令,验证 <argocd_name>-<argocd_namespace>-argocd-application-controller 聚合集群角色是否继承来自 & lt;argocd_name>-<argocd_namespace>-argocd-application-controller-admin 和 &lt ;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,并搜索聚合的集群角色。您必须打开集群角色来检查详情和配置。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.