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>'
$ oc get crds -l 'olm.operatorframework.io/owner-kind=ClusterExtension,olm.operatorframework.io/owner-name=<cluster_extension_name>'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您还可以搜索所有安装的 CRD,并通过 CRD 名称单独检查它们:
运行以下命令,列出当前在集群中安装的所有可用自定义资源定义(CRD):
oc get crds
$ oc get crds
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在输出中找到您要查找的 CRD。
运行以下命令,进一步检查单个 CRD 以查找其 API 组:
oc get crd <crd_name> -o yaml
$ oc get crd <crd_name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.3. 使用自定义角色绑定授予用户对扩展资源的访问权限 复制链接链接已复制到粘贴板!
作为集群管理员,您可以手动创建和配置基于角色的访问控制(RBAC)策略,以使用自定义角色绑定授予用户对扩展资源的访问权限。
先决条件
- 在集群中安装了集群扩展。
- 您有一个 API 组和资源名称的列表,如"查找由集群扩展公开的 API 组和资源中所述。
流程
如果安装集群扩展不提供默认集群角色,请手动创建一个或多个角色:
考虑 "Common default cluster roles for users" 中描述的角色集合的用例。
例如,创建以下 ClusterRole 对象定义中的一个或多个
ClusterRole
对象定义,将<cluster_extension_api_group>
和<cluster_extension_custom_resource>
替换为安装集群扩展提供的实际 API 组和资源名称:view-custom-resource.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow edit-custom-resource.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow admin-custom-resource.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在
verbs
中设置通配符 (*
) 将允许对指定资源的所有操作。
运行以下命令,为您创建的任何 YAML 文件创建集群角色:
oc create -f <filename>.yaml
$ oc create -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将集群角色关联到特定的用户或组,通过将集群角色绑定到单独的用户或组名称来授予其资源所需的权限:
创建一个对象定义:对于集群角色绑定,授予对所有命名空间的访问权限;对于角色绑定,授予对一个特定命名空间的访问权限。:
以下示例集群角色绑定向在所有命名空间中授予自定义资源的只读
view
访问权限:用户的
ClusterRoleBinding
对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用户的
ClusterRoleBinding
对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下角色绑定将
edit
权限限制到一个特定命名空间:用户的
RoleBinding
对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 将对象定义保存到 YAML 文件中。
运行以下命令来创建对象:
oc create -f <filename>.yaml
$ oc create -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4. 使用聚合集群角色授予用户对扩展资源的访问权限 复制链接链接已复制到粘贴板!
作为集群管理员,您可以配置基于角色的访问控制(RBAC)策略,以使用聚合集群角色授予用户对扩展资源的访问权限。
要自动扩展现有的默认集群角色,您可以通过将以下一个或多个标签添加到 ClusterRole
对象来添加聚合标签:
ClusterRole
对象中的聚合标签
这允许已经具有 view
, edit
, 或 admin
角色的用户与 ClusterRole
对象指定的自定义资源交互,而无需额外的角色或集群角色绑定到特定的用户或组。
先决条件
- 在集群中安装了集群扩展。
- 您有一个 API 组和资源名称的列表,如"查找由集群扩展公开的 API 组和资源中所述。
流程
为集群角色创建对象定义,用于指定集群扩展提供的 API 组和资源,并添加聚合标签以扩展一个或多个现有的默认集群角色:
带有聚合标签的
ClusterRole
对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以为
edit
和admin
创建类似的ClusterRole
对象,使其有适当的动词操作,如create
,update
, 和delete
。通过使用聚合标签,自定义资源的权限将添加到默认角色中。- 将对象定义保存到 YAML 文件中。
运行以下命令来创建对象:
oc create -f <filename>.yaml
$ oc create -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow