ydswin

忘记背后,努力面前的,向着标杆直跑

导航

K8s中Role(ClusterRole)资源类型rules字段详解

在Kubernetes(K8s)中,Role资源类型的rules字段用于定义哪些操作(verbs)可以在哪些资源(resources)上执行。Role是一种命名空间级别的资源,它允许你对命名空间内的资源进行细粒度的访问控制。

  1. resources
    resources字段指定了角色可以访问的资源类型。这些资源类型可以是Kubernetes API中定义的任何资源,例如Pods、Services、Deployments、ConfigMaps等。你可以在resources字段中列出多个资源类型,以允许角色访问这些类型的资源。

  2. verbs
    verbs字段定义了角色可以对资源执行的操作。这些操作可以是标准的HTTP方法,如getlistwatchcreateupdatepatchdelete等。通过在verbs字段中列出这些操作,你可以控制角色对资源的具体行为。

rules字段是一个数组,每个元素都是一个规则对象,规则对象中定义了可以执行的操作和适用的资源。下面是一个Role资源定义的示例,其中包含了rules字段:

apiVersion: rbac.authorization.k8s.io/v1  
kind: Role  
metadata:  
  name: pod-reader  
  namespace: default  
rules:  
- apiGroups: [""]  # 空字符串表示核心API群组  
  resources: ["pods"]  # 资源类型是pods  
  verbs: ["get", "list", "watch"]  # 允许的操作是get、list和watch

在这个例子中,我们创建了一个名为pod-reader的Role,它允许用户读取(get、list、watch)命名空间default中的Pods资源。

  • apiGroups字段指定了资源所属的API群组。空字符串("")表示核心API群组,即没有特定群组的资源,如Pods、Services等。对于属于特定群组的资源,你需要在这里指定相应的群组名称。
  • resources字段是一个字符串数组,列出了该规则适用的资源类型。在这个例子中,我们指定了pods资源类型。
  • verbs字段是一个字符串数组,列出了允许在资源上执行的操作。在这个例子中,我们允许getlistwatch操作。

除了这些基本字段外,Role规则还可以包含其他字段,如resourceNames,用于指定规则适用的具体资源对象的名称。

请注意,Role和ClusterRole之间的主要区别在于它们的作用范围:Role仅适用于特定的命名空间,而ClusterRole适用于整个集群。在创建Role或ClusterRole时,你需要根据你的需求选择合适的作用范围。

最后,为了将角色绑定到用户、组或服务账户,你还需要创建RoleBinding(对于命名空间级别的角色)或ClusterRoleBinding(对于集群级别的角色)。这些绑定将角色与主体相关联,从而实现访问控制。

posted on 2024-03-05 13:06  dashery  阅读(83)  评论(0编辑  收藏  举报