네임스페이스 관리
Kubernetes 리소스 격리와 멀티테넌시를 위한 네임스페이스 완벽 가이드
Kubernetes 리소스 격리와 멀티테넌시를 위한 네임스페이스 완벽 가이드
목표: 팀/환경별 격리와 리소스 제한을 구현할 수 있는 수준
🏗️ 네임스페이스 개념
graph TB
subgraph "Cluster"
subgraph "production"
P1[Pod]
P2[Service]
P3[Deployment]
end
subgraph "development"
D1[Pod]
D2[Service]
D3[Deployment]
end
subgraph "kube-system"
K1[CoreDNS]
K2[kube-proxy]
K3[metrics-server]
end
end
P1 -.->|"격리"| D1
네임스페이스는 가상 클러스터입니다.
- 같은 네임스페이스 내: Service 이름으로 통신
- 다른 네임스페이스:
service-name.namespace.svc.cluster.local
📋 기본 명령어
# 네임스페이스 목록
kubectl get namespaces
kubectl get ns
# 네임스페이스 생성
kubectl create namespace development
kubectl create ns dev
# 네임스페이스 삭제 (내부 리소스 포함)
kubectl delete namespace development
# 현재 컨텍스트의 네임스페이스 확인
kubectl config get-contexts
# 기본 네임스페이스 변경
kubectl config set-context --current --namespace=development
# 모든 네임스페이스의 리소스 보기
kubectl get pods --all-namespaces
kubectl get pods -A
🎯 주요 네임스페이스
| 네임스페이스 | 용도 | 설명 |
|---|---|---|
| default | 기본 | 리소스 지정 없을 때 사용 |
| kube-system | 시스템 | Kubernetes 시스템 컴포넌트 |
| kube-public | 공개 | 모든 사용자가 읽을 수 있는 리소스 |
| kube-node-lease | 노드 | 노드 하트비트 (Lease) |
🛡️ 리소스 쿼터 (ResourceQuota)
네임스페이스 전체 리소스 제한
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: development
spec:
hard:
# CPU/메모리
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
# 스토리지
requests.storage: 100Gi
persistentvolumeclaims: "10"
# 오브젝트 수
pods: "20"
services: "10"
secrets: "10"
configmaps: "10"
deployments.apps: "10"
# 적용
kubectl apply -f resourcequota.yaml
# 사용량 확인
kubectl get resourcequota -n development
kubectl describe resourcequota compute-quota -n development
⚖️ LimitRange
Pod/컨테이너 기본값 및 제한
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
namespace: development
spec:
limits:
- default:
cpu: "500m"
memory: "512Mi"
defaultRequest:
cpu: "100m"
memory: "128Mi"
max:
cpu: "2"
memory: "2Gi"
min:
cpu: "50m"
memory: "64Mi"
type: Container
동작:
default: limits 미지정 시 적용defaultRequest: requests 미지정 시 적용max/min: 상한/하한 강제
🔐 네트워크 격리 (NetworkPolicy)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: development
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
# development → production 허용
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-dev
namespace: production
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- namespaceSelector:
matchLabels:
env: development
📋 체크리스트
- 네임스페이스 생성/삭제
- ResourceQuota 설정
- LimitRange 설정
- 네트워크 격리 (NetworkPolicy)
- 리소스 사용량 모니터링
- 멀티테넌시 설계
🔗 관련 노트
- 01-06-Service-타입 — 서비스 노출
- 02-04-NetworkPolicy — 네트워크 보안
- 02-09-RBAC-설정 — 권한 관리
마지막 업데이트: 2026-06-01