반응형
apiGroups는 Kubernetes의 RBAC에서 어떤 API 그룹에 속한 리소스를 제어할 것인지를 결정하는 중요한 요소이다.
API 그룹을 활용하면 특정 유형의 리소스(예: apps, batch, networking.k8s.io 등)에 대한 권한을 효과적으로 관리할 수 있다.
1. apiGroups란?
Kubernetes의 API 그룹은 특정 리소스 그룹을 관리하기 위한 네임스페이스와 같은 개념이다.
API 그룹 | 설명 | 포함된 주요 리소스 |
"" (빈 문자열) | Core API 그룹 (기본 리소스) | pods, services, configmaps, secrets, persistentvolumes, persistentvolumeclaims, namespaces |
apps | 애플리케이션 배포 관련 리소스 | deployments, statefulsets, daemonsets, replicasets |
batch | 배치 작업 관련 리소스 | jobs, cronjobs |
networking.k8s.io | 네트워크 관련 리소스 | ingresses, networkpolicies |
rbac.authorization.k8s.io | RBAC 관련 리소스 | roles, rolebindings, clusterroles, clusterrolebindings |
policy | 보안 정책 관련 리소스 | podsecuritypolicies (K8s 1.21+에서 제거됨) |
storage.k8s.io | 스토리지 관련 리소스 | storageclasses, volumeattachments |
2. apiGroups를 활용한 RBAC 예제
(1) 모든 네임스페이스에서 pods 리소스 조회 권한 부여
**Core API 그룹("")**에 속한 pods를 조회할 수 있도록 ClusterRole을 생성하는 예제이다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-viewer
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: pod-viewer-binding
subjects:
- kind: User
name: example-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: pod-viewer
apiGroup: rbac.authorization.k8s.io
설명
- example-user는 클러스터 전체에서 pods 리소스를 조회 가능.
- apiGroups: [""] → Core API 그룹(pods, services, configmaps 등) 리소스에 적용.
(2) 특정 네임스페이스에서 deployments 및 statefulsets 관리 권한 부여
apps API 그룹을 사용하여 deployments와 statefulsets을 관리할 수 있도록 Role을 생성하는 예제.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: deployment-manager
namespace: my-namespace
rules:
- apiGroups: ["apps"]
resources: ["deployments", "statefulsets"]
verbs: ["get", "list", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: deployment-manager-binding
namespace: my-namespace
subjects:
- kind: ServiceAccount
name: dev-service-account
namespace: my-namespace
roleRef:
kind: Role
name: deployment-manager
apiGroup: rbac.authorization.k8s.io
설명
- dev-service-account가 my-namespace에서 deployments 및 statefulsets을 생성, 수정, 삭제할 수 있음.
- apiGroups: ["apps"] → deployments, statefulsets 같은 애플리케이션 리소스를 관리하는 API 그룹.
(3) 네트워크 정책(NetworkPolicy) 관리 권한 부여
networking.k8s.io API 그룹을 사용하여 networkpolicies를 관리할 수 있도록 설정하는 예제.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: network-policy-admin
rules:
- apiGroups: ["networking.k8s.io"]
resources: ["networkpolicies"]
verbs: ["get", "list", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: network-policy-binding
subjects:
- kind: User
name: network-admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: network-policy-admin
apiGroup: rbac.authorization.k8s.io
설명
- network-admin 사용자가 클러스터 전체에서 networkpolicies를 생성, 수정, 삭제할 수 있음.
- apiGroups: ["networking.k8s.io"] → 네트워크 관련 리소스를 관리하는 API 그룹.
(4) 특정 사용자에게 RBAC(Role 및 RoleBinding) 관리 권한 부여
rbac.authorization.k8s.io API 그룹을 사용하여 roles와 rolebindings을 관리할 수 있도록 설정하는 예제.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: rbac-manager
rules:
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["roles", "rolebindings"]
verbs: ["get", "list", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: rbac-manager-binding
subjects:
- kind: User
name: security-admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: rbac-manager
apiGroup: rbac.authorization.k8s.io
설명
- security-admin 사용자가 클러스터 전체에서 roles와 rolebindings을 관리할 수 있음.
- apiGroups: ["rbac.authorization.k8s.io"] → RBAC 관련 리소스를 관리하는 API 그룹.
(5) PVC(스토리지) 관리 권한 부여
storage.k8s.io API 그룹을 사용하여 storageclasses를 관리할 수 있도록 설정하는 예제.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: storage-admin
rules:
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: storage-admin-binding
subjects:
- kind: User
name: storage-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: storage-admin
apiGroup: rbac.authorization.k8s.io
설명
- storage-user 사용자가 storageclasses를 관리할 수 있음.
- apiGroups: ["storage.k8s.io"] → 스토리지 관련 리소스를 관리하는 API 그룹.
3. 정리
API 그룹 | 포함된 리소스 | 활용 |
"" (core) | pods, services, configmaps, secrets, persistentvolumes | Pod 조회 |
apps | deployments, statefulsets, daemonsets, replicasets | Deployment 관리 |
batch | jobs, cronjobs | 배치 작업 관리 |
networking.k8s.io | ingresses, networkpolicies | 네트워크 정책 관리 |
rbac.authorization.k8s.io | roles, rolebindings, clusterroles, clusterrolebindings | RBAC 관리 |
storage.k8s.io | storageclasses, volumeattachments | 스토리지 관리 |
반응형
'K8S' 카테고리의 다른 글
[Kubernetes] Service Account 개념 및 활용 (0) | 2025.03.04 |
---|---|
[kubernetes] rolebinding과 clusterrolebinding 할당하는 리소스 (0) | 2025.03.04 |
[kubernetes] role이 할당하는 resource 종류 (0) | 2025.03.04 |
[kubernetes] RBAC와 role (0) | 2025.03.04 |
[kubernetes] karpenters의 limit range - default vs defaultRequest (0) | 2025.01.26 |
댓글