본문 바로가기
K8S

[kubernetes] API groups 를 활용하여 리소스 제어

by Rainbound-IT 2025. 3. 4.
반응형

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 스토리지 관리

 

반응형

댓글