쿠버네티스에서는 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