RBAC : 네임스페이스 리소스에 대한 접근 제어
ClusterRole : 비네임스페이스 리소스에 대한 접근 제어
즉, clusterrole은 네임스페이스의 일부로 구성되는 것이 아님
# 네임스페이스 리소스 확인
kubectl api-resources --namespaced=true
# 비(非)네임스페이스리소스 확인
kubectl api-resources --namespaced=false
# 네임스페이스 리소스 확인
controlplane ~ ➜ kubectl api-resources --namespaced=true
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
..
# 비(非)네임스페이스리소스 확인
controlplane ~ ➜ kubectl api-resources --namespaced=false
NAME SHORTNAMES APIVERSION NAMESPACED KIND
componentstatuses cs v1 false ComponentStatus
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumes pv v1 false PersistentVolume
..
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: monitoring-endpoints
labels:
rbac.example.com/aggregate-to-monitoring: "true"
# When you create the "monitoring-endpoints" ClusterRole,
# the rules below will be added to the "monitoring" ClusterRole.
rules:
- apiGroups: [""]
resources: ["services", "endpointslices", "pods"]
verbs: ["get", "list", "watch"]
kubectl create -f {파일}
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io
kubectl create -f {파일}
또는 빠르게 imperative 방식으로 생성해도 좋다.
공식 문서와 kubectl create clusterrole -h
에 명령어 예시가 존재
kubectl create rolebinding smlee-binding --clusterrole=smlee --user=michelle
kubectl create clusterrolebinding smlee-binding --clusterrole=smlee --user=michelle