Authorization
ClusterRoles
Cluster wide permission sets for resources that live outside any namespace.
ClusterRoles define permissions that are not tied to one namespace.
They are needed for cluster-scoped resources, such as nodes, namespaces, persistent volumes, and custom resource definitions. They can also define reusable permission sets that are later bound inside a namespace with a RoleBinding.
ClusterRole vs Role
Use a Role for namespaced access:
Role + RoleBinding -> access inside one namespace
Use a ClusterRole for cluster-scoped resources or reusable rules:
ClusterRole + RoleBinding -> access inside one namespace
ClusterRole + ClusterRoleBinding -> access across the cluster
That distinction is important. A ClusterRole is not automatically granted everywhere. The binding decides where it applies.
Reuse A ClusterRole In One Namespace
Kubernetes includes built-in ClusterRoles such as view, edit, and admin.
Create a service account:
kubectl create serviceaccount namespace-viewer --namespace=lab
Bind the built-in view ClusterRole only in the lab namespace:
kubectl create rolebinding namespace-viewer-binding \
--clusterrole=view \
--serviceaccount=lab:namespace-viewer \
--namespace=lab
Check access in lab:
kubectl auth can-i list pods \
--as system:serviceaccount:lab:namespace-viewer \
--namespace=lab
Expected output:
yes
Check access in default:
kubectl auth can-i list pods \
--as system:serviceaccount:lab:namespace-viewer \
--namespace=default
Expected output:
no
Cluster-Wide Binding
A ClusterRoleBinding applies across the cluster:
kubectl create clusterrolebinding namespace-viewer-cluster-wide \
--clusterrole=view \
--serviceaccount=lab:namespace-viewer
Now that service account can view resources in every namespace where the view role grants access.
Delete the cluster-wide binding after testing:
kubectl delete clusterrolebinding namespace-viewer-cluster-wide
Clean Up
kubectl delete rolebinding namespace-viewer-binding --namespace=lab
kubectl delete serviceaccount namespace-viewer --namespace=lab
Practical Guidance
Use ClusterRoles carefully:
- Use ClusterRoleBindings only when access must be cluster-wide.
- Prefer RoleBindings when reusing a ClusterRole inside one namespace.
- Review built-in roles before using them;
view,edit, andadminare broad. - Treat access to nodes, namespaces, CRDs, admission resources, and RBAC resources as sensitive.
- Avoid binding service accounts to
cluster-adminexcept for tightly controlled platform components.