5.2. 用户访问扩展资源


在安装集群扩展并由 Operator Lifecycle Manager (OLM) v1 管理后,扩展通常可提供 CustomResourceDefinition 对象(CRD),用于在集群中公开新的 API 资源。默认情况下,集群管理员通常对这些资源具有完全的管理访问权限,而非集群管理员用户或常规用户可能缺少足够的权限。

OLM v1 不会为常规用户自动配置或管理基于角色的访问控制(RBAC),以与安装的扩展所提供的 API 进行交互。集群管理员需要自己定义所需的 RBAC 策略,以便为这样的用户创建、查看或编辑这些自定义资源(CR)。

注意

为用户访问扩展资源描述的 RBAC 权限与必须添加到服务帐户的权限不同,以启用集群扩展本身的基于 OLM v1- 的初始安装。有关安装扩展时的 RBAC 要求的更多信息,请参阅"管理扩展"中的"集群扩展权限"。

5.2.1. 用户的常见默认集群角色

安装集群扩展可能包含默认集群角色,以确定常规用户到扩展提供的 API 资源的基于角色的访问控制(RBAC)。常见集群角色组类似以下策略:

view 集群角色
授予集群中指定 API 资源的所有自定义资源(CR)对象的只读访问权限。适用于需要了解资源的普通用户而无需任何权限修改它们。非常适合监控目的和有限访问查看。
edit 集群角色
允许用户修改集群中的所有 CR 对象。让用户能够创建、更新和删除资源,使其适合必须管理资源的团队成员,但不应控制 RBAC 或管理其他用户的权限。
admin 集群角色
通过集群中指定 API 资源的所有自定义资源对象,提供完整的权限,包括 create, update, 和 delete 操作动词。

5.2.2. 查找集群扩展公开的 API 组和资源

要创建适当的 RBAC 策略来授予用户对集群扩展资源的访问权限,您必须知道哪些 API 组和资源由已安装的扩展公开。作为管理员,您可以使用 OpenShift CLI (oc) 检查集群中安装的自定义资源定义 (CRD)。

先决条件

  • 在集群中安装了集群扩展。

流程

  • 要在指定以特定集群扩展为目标的标签选择器来列出已安装的 CRD,以只查找该扩展拥有的 CRD,请运行以下命令:

    $ oc get crds -l 'olm.operatorframework.io/owner-kind=ClusterExtension,olm.operatorframework.io/owner-name=<cluster_extension_name>'
    Copy to Clipboard Toggle word wrap
  • 另外,您还可以搜索所有安装的 CRD,并通过 CRD 名称单独检查它们:

    1. 运行以下命令,列出当前在集群中安装的所有可用自定义资源定义(CRD):

      $ oc get crds
      Copy to Clipboard Toggle word wrap

      在输出中找到您要查找的 CRD。

    2. 运行以下命令,进一步检查单个 CRD 以查找其 API 组:

      $ oc get crd <crd_name> -o yaml
      Copy to Clipboard Toggle word wrap

作为集群管理员,您可以手动创建和配置基于角色的访问控制(RBAC)策略,以使用自定义角色绑定授予用户对扩展资源的访问权限。

先决条件

  • 在集群中安装了集群扩展。
  • 您有一个 API 组和资源名称的列表,如"查找由集群扩展公开的 API 组和资源中所述。

流程

  1. 如果安装集群扩展不提供默认集群角色,请手动创建一个或多个角色:

    1. 考虑 "Common default cluster roles for users" 中描述的角色集合的用例。

      例如,创建以下 ClusterRole 对象定义中的一个或多个 ClusterRole 对象定义,将 <cluster_extension_api_group><cluster_extension_custom_resource> 替换为安装集群扩展提供的实际 API 组和资源名称:

      view-custom-resource.yaml 文件示例

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: view-custom-resource
      rules:
      - apiGroups:
        - <cluster_extension_api_group>
        resources:
        - <cluster_extension_custom_resources>
        verbs:
        - get
        - list
        - watch
      Copy to Clipboard Toggle word wrap

      edit-custom-resource.yaml 文件示例

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: edit-custom-resource
      rules:
      - apiGroups:
        - <cluster_extension_api_group>
        resources:
        - <cluster_extension_custom_resources>
        verbs:
        - get
        - list
        - watch
        - create
        - update
        - patch
        - delete
      Copy to Clipboard Toggle word wrap

      admin-custom-resource.yaml 文件示例

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: admin-custom-resource
      rules:
      - apiGroups:
        - <cluster_extension_api_group>
        resources:
        - <cluster_extension_custom_resources>
        verbs:
        - '*' 
      1
      Copy to Clipboard Toggle word wrap

      1
      verbs 中设置通配符 (*) 将允许对指定资源的所有操作。
    2. 运行以下命令,为您创建的任何 YAML 文件创建集群角色:

      $ oc create -f <filename>.yaml
      Copy to Clipboard Toggle word wrap
  2. 将集群角色关联到特定的用户或组,通过将集群角色绑定到单独的用户或组名称来授予其资源所需的权限:

    1. 创建一个对象定义:对于集群角色绑定,授予对所有命名空间的访问权限;对于角色绑定,授予对一个特定命名空间的访问权限。:

      • 以下示例集群角色绑定向在所有命名空间中授予自定义资源的只读 view 访问权限:

        用户的 ClusterRoleBinding 对象示例

        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRoleBinding
        metadata:
          name: view-custom-resource-binding
        subjects:
        - kind: User
          name: <user_name>
        roleRef:
          kind: ClusterRole
          name: view-custom-resource
          apiGroup: rbac.authorization.k8s.io
        Copy to Clipboard Toggle word wrap

        用户的 ClusterRoleBinding 对象示例

        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRoleBinding
        metadata:
          name: view-custom-resource-binding
        subjects:
        - kind: Group
          name: <group_name>
        roleRef:
          kind: ClusterRole
          name: view-custom-resource
          apiGroup: rbac.authorization.k8s.io
        Copy to Clipboard Toggle word wrap

      • 以下角色绑定将 edit 权限限制到一个特定命名空间:

        用户的 RoleBinding 对象示例

        apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
        metadata:
          name: edit-custom-resource-edit-binding
          namespace: <namespace>
        subjects:
        - kind: User
          name: <username>
        roleRef:
          kind: Role
          name: custom-resource-edit
          apiGroup: rbac.authorization.k8s.io
        Copy to Clipboard Toggle word wrap

    2. 将对象定义保存到 YAML 文件中。
    3. 运行以下命令来创建对象:

      $ oc create -f <filename>.yaml
      Copy to Clipboard Toggle word wrap

作为集群管理员,您可以配置基于角色的访问控制(RBAC)策略,以使用聚合集群角色授予用户对扩展资源的访问权限。

要自动扩展现有的默认集群角色,您可以通过将以下一个或多个标签添加到 ClusterRole 对象来添加聚合标签

ClusterRole 对象中的聚合标签

# ..
metadata:
  labels:
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
# ..
Copy to Clipboard Toggle word wrap

这允许已经具有 view, edit, 或 admin 角色的用户与 ClusterRole 对象指定的自定义资源交互,而无需额外的角色或集群角色绑定到特定的用户或组。

先决条件

  • 在集群中安装了集群扩展。
  • 您有一个 API 组和资源名称的列表,如"查找由集群扩展公开的 API 组和资源中所述。

流程

  1. 为集群角色创建对象定义,用于指定集群扩展提供的 API 组和资源,并添加聚合标签以扩展一个或多个现有的默认集群角色:

    带有聚合标签的 ClusterRole 对象示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: view-custom-resource-aggregated
      labels:
        rbac.authorization.k8s.io/aggregate-to-view: "true"
    rules:
      - apiGroups:
          - <cluster_extension_api_group>
        resources:
          - <cluster_extension_custom_resource>
        verbs:
          - get
          - list
          - watch
    Copy to Clipboard Toggle word wrap

    您可以为 editadmin 创建类似的 ClusterRole 对象,使其有适当的动词操作,如 create, update, 和 delete。通过使用聚合标签,自定义资源的权限将添加到默认角色中。

  2. 将对象定义保存到 YAML 文件中。
  3. 运行以下命令来创建对象:

    $ oc create -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat