Sign In

Curriculum 21: RBAC & Authorization

Roles & ClusterRoles

18 min · 35 XP

Roles and ClusterRoles

Kubernetes uses Role-Based Access Control (RBAC) to regulate who can do what in your cluster. Roles and ClusterRoles define sets of permissions, but they differ in scope.

Role vs ClusterRole

A Role grants permissions within a single namespace. A ClusterRole grants permissions cluster-wide or across all namespaces.

Defining a Role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: development
  name: pod-reader
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get"]

Each rule specifies three things:

  • apiGroups -- the API group for the resource ("" means the core API group)
  • resources -- which resource types the rule applies to
  • verbs -- which actions are allowed (get, list, watch, create, update, patch, delete)

Defining a ClusterRole

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: node-viewer
rules:
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "list"]

ClusterRoles have no namespace field because they apply cluster-wide.

Managing Roles with kubectl

# List roles in a namespace
kubectl get roles -n development

# List all cluster roles
kubectl get clusterroles

# Describe a role to see its rules
kubectl describe role pod-reader -n development

# Create a role imperatively
kubectl create role pod-manager \
  --verb=get,list,create,delete \
  --resource=pods \
  -n development

Key Takeaways

  • Roles are namespace-scoped; ClusterRoles are cluster-scoped
  • Rules combine apiGroups, resources, and verbs to define permissions
  • Use ClusterRoles for cluster-wide resources like nodes or for reusable permission sets