목차
Resources
Namespaced
쿠버네티스에서 리소스를 그룹화하거나 격리하는 데 Namespace를 사용한다. 네임스페이스 리소스는 다음과 같은 리소스를 포함한다:
•
Pods
•
ReplicaSets
•
Deployments
•
Services
•
Secrets
•
Roles
•
Rolebindings
•
ConfigMaps
•
PVC
모든 Namespaced resource를 확인하려면 kube api-resources 명령을 실행한다.
kubectl api-resources --namespaced=true
Bash
복사
Cluster-Scoped
노드와 같은 리소스는 클러스터 전체에 걸쳐 있으며, 특정 네임스페이스와 연관될 수 없다. 클러스터 범위 리소스는 네임스페이스를 지정하지 않는 리소스이다. 클러스터 범위 리소스에 해당되는 리소스는 다음과 같은 리소스를 포함한다:
•
Nodes
•
Persistent Volumes
•
ClusterRoles
•
ClusterRoleBindings
•
CertificateSigningRequests
•
Namespaces
모든 Cluster-scoped resource를 확인하려면 kube api-resources 명령을 실행한다.
kubectl api-resources --namespaced=false
Bash
복사
ClusterRole
Namespaced에서 사용자에게 리소스에 권한을 부여하는 것은 Role과 RoleBinding을 사용한 것처럼, Cluster-scoped에서는 ClusterRole과 ClusterRoleBinding을 사용하며, 형식도 동일하다.
Create
먼저 클러스터 역할에 대해 생성한다. 아래의 코드는 node에 대해 조회, 생성, 삭제가 가능한 ClusterRole을 생성하는 예시이다.
# cluster-admin-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-administrator
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["list", "get", "create", "delete"]
YAML
복사
Core Group에 포함되는 리소스는 apiGroups를 빈칸으로 둘 수 있다. 빈 칸 자체가 Core Group을 의미한다.
Link User to ClusterRole
ClusterRole을 생성한 후에는 사용자와 연결시켜야 한다. 이때 ClusterRoleBinding을 사용하여 연결시킨다.
# cluster-admin-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-admin-role-binding
subjects:
- kind: User
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-administrator
apiGroup: rbac.authorization.k8s.io
YAML
복사
RoleBinding과 마찬가지로 ClusterRoleBinding의 subjects에서 사용자에 대한 세부정보를 입력하며, roleRef에서 ClusterRole에 대한 정보를 입력한다. 또한 subjects는 리스트 형태를 가진다.
ClusterRole for Namespaced
Kubernetes에서 권한 관리는 리소스의 범위에 따라 달라진다. 일반적으로 ClusterRole과 ClusterRoleBinding은 클러스터 범위 리소스에 사용된다. 그러나 이는 엄격한 규칙이 아니다. ClusterRole은 네임스페이스 리소스에도 적용할 수 있다.
ClusterRole을 네임스페이스 리소스에 생성하면, 사용자는 모든 네임스페이스에서 해당 리소스에 접근할 수 있게 된다. 예를들어 특정 네임스페이스에서만 파드에 접근할 수 있는 권한을 부여하는 역할이 있다면, 사용자는 해당 네임스페이스의 파드에만 접근할 수 있었다. 하지만 ClusterRole을 사용하면, 사용자는 클러스터 내의 모든 파드에 접근할 수 있다.