Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.20] 🚀 RBAC 편 #2 | ClusterRole을 활용한 클러스터 전체 권한 설정

ygtoken 2025. 3. 16. 14:46
728x90

 

쿠버네티스에서는 ClusterRole과 ClusterRoleBinding을 활용하여 클러스터 전체에서 권한을 관리할 수 있습니다.

이번 글에서는 ClusterRole을 활용하여 특정 사용자에게 클러스터 전체 리소스 관리 권한을 부여하는 방법

여러 네임스페이스에서 동일한 권한을 적용하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ 클러스터 전체에서 리소스 관리 권한 부여 (ClusterRole)

2️⃣ 여러 네임스페이스에 적용하는 ClusterRoleBinding

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ 클러스터 전체에서 리소스 관리 권한 부여 (ClusterRole)

 

❓ 문제 상황

 

운영팀에서 운영 관리자가 클러스터 전체에서 모든 네임스페이스의 리소스를 관리할 수 있도록 설정해야 하는 요구사항이 생겼습니다.

이 사용자는 모든 네임스페이스의 Deployment, Service, ConfigMap을 생성 및 수정할 수 있어야 합니다.

ClusterRole의 이름은 admin-role이어야 합니다.

사용자는 Deployment, Service, ConfigMap을 생성, 조회, 수정, 삭제할 수 있어야 합니다.

클러스터의 모든 네임스페이스에서 해당 권한이 적용되어야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. ClusterRole을 생성하여 클러스터 전체에서 리소스를 관리할 수 있도록 설정해야 합니다.

apiGroups: ["apps", ""]를 설정하여 Deployment 및 Service 등의 리소스를 포함

resources: ["deployments", "services", "configmaps"]를 설정하여 관리할 리소스 지정

 

2. ClusterRoleBinding을 사용하여 특정 사용자에게 ClusterRole을 적용해야 합니다.

 


✅ 정답 Manifest (클러스터 전체에서 권한을 부여하는 ClusterRole)

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: admin-role  # 클러스터 전체에 적용될 역할
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: [""]
  resources: ["services", "configmaps"]
  verbs: ["get", "list", "create", "update", "delete"]

 

 


📌 적용 후 예상 결과 값

 

1. ClusterRole 생성 확인

kubectl get clusterroles

 

💡 예상 출력 값

NAME                 AGE
admin-role           5s

 

2. admin-user가 모든 네임스페이스에서 Deployment 생성 가능 여부 확인

kubectl auth can-i create deployments --as=admin-user --all-namespaces

 

💡 예상 출력 값

yes

 

 


2️⃣ 여러 네임스페이스에 적용하는 ClusterRoleBinding

 

❓ 문제 상황

 

운영팀에서 admin-user 사용자가 모든 네임스페이스에서 특정 리소스를 관리할 수 있도록 설정해야 합니다.

이를 위해 ClusterRoleBinding을 사용하여 여러 네임스페이스에서 동일한 권한을 적용해야 합니다.

ClusterRoleBinding의 이름은 admin-rolebinding이어야 합니다.

admin-user 사용자가 클러스터 전체에서 admin-role 권한을 가져야 합니다.

모든 네임스페이스에서 동일한 권한이 적용되어야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. ClusterRoleBinding을 생성하여 특정 사용자에게 ClusterRole을 할당해야 합니다.

subjects.kind: User를 설정하여 특정 사용자에게 권한 적용

roleRef를 사용하여 admin-role을 참조

 

2. 사용자는 kubectl get deployments --all-namespaces 명령어를 실행할 수 있어야 합니다.

 


✅ 정답 Manifest (ClusterRoleBinding을 통해 사용자에게 권한 부여)

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-rolebinding  # ClusterRoleBinding 이름
subjects:
- kind: User
  name: admin-user  # 권한을 부여할 사용자
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin-role  # 연결할 ClusterRole 이름
  apiGroup: rbac.authorization.k8s.io

 

 


📌 적용 후 예상 결과 값

 

1. ClusterRoleBinding 생성 확인

kubectl get clusterrolebindings

 

💡 예상 출력 값

NAME                  ROLE          AGE
admin-rolebinding     admin-role    5s

 

2. admin-user 사용자가 모든 네임스페이스에서 Deployment 조회 가능 여부 확인

kubectl auth can-i get deployments --as=admin-user --all-namespaces

 

💡 예상 출력 값

yes

 

3. admin-user 사용자가 모든 네임스페이스에서 Service 삭제 가능 여부 확인

kubectl auth can-i delete services --as=admin-user --all-namespaces

 

💡 예상 출력 값

yes
728x90