[TIL] Kubernetes 스토리지 & 보안 정리-2025.09.01
2025. 9. 1. 16:37ㆍ대외활동/인공지능사관학교
728x90
반응형
SMALL

1. PV와 PVC (PersistentVolume / PersistentVolumeClaim)
- 필요성: 컨테이너는 기본적으로 상태가 없는(stateless) 구조라 데이터가 사라짐 → DB, MQ 등은 영속 스토리지가 필요.
- 개념
- PV: 관리자가 제공한 실제 스토리지 리소스 (NFS, AWS EBS, iSCSI 등).
- PVC: 사용자가 필요한 스토리지 요청 (용량, 접근 모드, StorageClass).
- 바인딩 조건: 용량, 접근 모드, VolumeMode, StorageClass, Selector, VolumeName 등이 일치해야 함.
- 실습 예제: hostPath 기반 MariaDB
- mariadb-pv.yaml (PV 생성), mariadb-pvc.yaml (스토리지 요청),
- mariadb-deployment.yaml에서 /var/lib/mysql 마운트,
- 파드 삭제 후에도 데이터 유지 확인.
- 주의점: hostPath는 학습/테스트용 → 프로덕션에서는 클라우드 블록 스토리지나 분산 파일 시스템 권장.
2. NFS 기반 스토리지 실습
- NFS 서버 구성
- Master 노드(server-a)에 /mnt/nfs/html 또는 /mnt/nfs/db_data 공유.
- exports 설정 후 exportfs -a로 반영.
- NFS 클라이언트 설정
- Worker 노드(server-b, server-c)에서 /mnt/nfs/...를 마운트.
- /etc/fstab 등록해 부팅 시 자동 마운트.
- NGINX 예제 (nfs-exam)
- nfs-pv.yaml (RWX PV), nfs-pvc.yaml, nfs-deployment.yaml (3개 파드), nfs-service.yaml (NodePort).
- 웹 브라우저에서 NodePort 접속 → NFS 서버의 index.html 출력 확인.
- MariaDB 예제 (mariadb-nfs)
- RWX 모드의 PV/PVC, mariadb-deployment.yaml에서 /var/lib/mysql 마운트.
- 파드 재시작 후에도 DB 데이터(Charlie, David) 유지됨을 검증.
3. 동적 프로비저닝 (Dynamic Provisioning)
- 개념: PVC가 생성될 때 Kubernetes가 자동으로 PV를 생성 → 관리 효율성↑, 낭비↓.
- 핵심 구성 요소
- StorageClass: 프로비저닝 방식 정의 (provisioner, reclaimPolicy, volumeBindingMode).
- Provisioner: 실제 스토리지 생성 담당 (AWS EBS, GCE PD, NFS, local-path 등).
- 실습 예제 (local-path-provisioner)
- local-storage-class.yaml: provisioner = rancher.io/local-path.
- dynamic-pvc.yaml: 1Gi 요청, StorageClass 지정.
- dynamic-pod.yaml: NGINX가 PVC를 /usr/share/nginx/html에 마운트.
- 검증 포인트
- PVC 생성 시 Pending 상태 → Pod가 스케줄링되면 PV 자동 생성 후 Bound.
- 데이터는 파드 삭제 후에도 유지, PVC 삭제 시 PV까지 자동 삭제.
4. Kubernetes 보안: 인증 & 인가
- 인증(Authentication): “너 누구냐?” → X.509 인증서, ServiceAccount, OIDC 토큰 등.
- 인가(Authorization): “뭐 할 수 있냐?” → RBAC(Role-Based Access Control).
- RBAC 핵심 리소스
- Role / ClusterRole: 권한 정의.
- RoleBinding / ClusterRoleBinding: 권한과 사용자 연결.
- 예제 1: dev-user에 파드 조회 권한 부여
- pod-reader-role.yaml: get, list, watch 권한.
- dev-user-binding.yaml: dev-user와 Role 연결.
- kubectl auth can-i list pods --as dev-user → yes 확인.
- 예제 2: X.509 기반 dev-user 인증
- 개인 키 생성 → CSR 제출 → 관리자 승인 → dev-user.crt 발급.
- kubeconfig에 dev-user 추가, context 전환 후 권한 검증.
- 파드 조회는 가능, Deployment/Service 생성은 거부됨.
- 핵심 원칙: 최소 권한 원칙(Principle of Least Privilege) + 멀티테넌시 보장.
핵심
- 스토리지 계층:
- PV/PVC로 파드와 스토리지를 분리해 데이터 영속성 확보.
- NFS로 멀티 노드 환경에서 공유 스토리지 구현 가능.
- StorageClass 기반 동적 프로비저닝으로 자동화된 관리 가능.
- 보안 계층:
- 인증/인가를 명확히 분리 → RBAC으로 세밀한 권한 제어.
- 실제 환경에서는 기업 계정(OIDC) + RBAC 조합이 일반적.
- 실무적 감각:
- hostPath는 학습용, 프로덕션에서는 RWX 가능한 NFS/클라우드 스토리지 권장.
- 보안 설정은 단순한 접근 제어가 아니라 멀티테넌시 환경 안정성 확보에 직결됨.
728x90
반응형
LIST
'대외활동 > 인공지능사관학교' 카테고리의 다른 글
| [TIL]Kubernetes 리소스 단위, Requests & Limits-2025.09.04 (0) | 2025.09.03 |
|---|---|
| [TIL] Kubernetes 보안 & 커스텀 리소스-2025.09.02 (0) | 2025.09.02 |
| [학습]IT·AI 업계 동향 파악.with GPT/Notion-인공지능사관학교6기 (2) | 2025.08.28 |
| [TIL]Kubernetes Namespace, BusyBox, ConfigMap, Secret-2025.8.28 (1) | 2025.08.28 |
| [TIL] Docker Compose,Docker Replica-2025.8.19 (1) | 2025.08.28 |