Kubernetes/Kubernetes Basics

📌 Kubernetes 멀티 테넌시 환경 구축하기

ygtoken 2025. 3. 3. 07:39
728x90

 

1️⃣ 멀티 테넌시(Multi-Tenancy)란?

 

멀티 테넌시는 하나의 Kubernetes 클러스터에서 여러 팀, 프로젝트, 고객(테넌트)이 서로 독립적으로 애플리케이션을 운영할 수 있도록 하는 방식입니다.

 

✅ 하나의 클러스터에서 여러 사용자(테넌트)를 지원

✅ 테넌트 간 리소스 격리 & 보안 강화

운영 비용 절감 (여러 개의 클러스터를 운영하는 비용 절감 가능)

 

📌 멀티 테넌시 환경 예시

Kubernetes 클러스터
   ├── Team A (Namespace 1)
   │      ├── 애플리케이션 A1
   │      ├── 애플리케이션 A2
   │      ├── 데이터베이스 A
   │
   ├── Team B (Namespace 2)
   │      ├── 애플리케이션 B1
   │      ├── 애플리케이션 B2
   │      ├── 데이터베이스 B
   │
   ├── Team C (Namespace 3)

팀별, 프로젝트별로 독립된 환경을 유지할 수 있음!

 


 

2️⃣ Kubernetes에서 멀티 테넌시 운영 방식

 

Kubernetes에서 멀티 테넌시를 구현하는 대표적인 방식은 다음과 같습니다.

운영 방식설명적합한 환경

네임스페이스 기반 멀티 테넌시 각 테넌트마다 별도의 네임스페이스를 할당 소규모 멀티 테넌시 환경
물리적 클러스터 분리 각 테넌트별로 별도의 클러스터 운영 고도의 보안이 필요한 환경
RBAC(Role-Based Access Control) Kubernetes RBAC을 이용한 접근 제어 동일 클러스터 내 보안 강화
네트워크 정책(NetworkPolicy) 네임스페이스 간 네트워크 트래픽 격리 보안이 필요한 환경

✅ 목적에 따라 적절한 멀티 테넌시 운영 전략을 선택하는 것이 중요합니다!

 


 

3️⃣ 네임스페이스 기반 멀티 테넌시 구축

 

📌 네임스페이스를 활용하면 각 테넌트(팀, 프로젝트)마다 독립적인 환경을 제공할 수 있습니다.

 


 

✅ Step 1: 테넌트별 네임스페이스 생성

 

📌 Team A & Team B 네임스페이스 생성

kubectl create namespace team-a
kubectl create namespace team-b

 

📌 네임스페이스 목록 확인

kubectl get namespaces

✅ 각 팀마다 별도의 네임스페이스를 할당하여 격리!

 


 

✅ Step 2: 네임스페이스별 리소스 할당 (ResourceQuota 설정)

 

각 네임스페이스가 과도한 리소스를 사용하지 않도록 제한할 수 있습니다.

 

📌 ResourceQuota 설정 (quota-team-a.yaml)

apiVersion: v1
kind: ResourceQuota
metadata:
  name: team-a-quota
  namespace: team-a
spec:
  hard:
    pods: "10"               # 최대 10개의 Pod 실행 가능
    requests.cpu: "2"        # 최대 2 vCPU 사용 가능
    requests.memory: "4Gi"   # 최대 4GB 메모리 사용 가능

 

📌 적용 명령어

kubectl apply -f quota-team-a.yaml

✅ 각 팀이 사용할 수 있는 리소스를 제어하여 과도한 사용을 방지 가능!

 


 

✅ Step 3: RBAC을 활용한 접근 제어

 

각 팀이 자신의 네임스페이스에만 접근할 수 있도록 **RBAC(Role-Based Access Control)**을 설정합니다.

 

📌 Team A 전용 권한 설정 (rbac-team-a.yaml)

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: team-a
  name: team-a-role
rules:
- apiGroups: [""]
  resources: ["pods", "services", "deployments"]
  verbs: ["get", "list", "create", "delete"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: team-a
  name: team-a-binding
subjects:
- kind: User
  name: user-team-a
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: team-a-role
  apiGroup: rbac.authorization.k8s.io

 

📌 적용 명령어

kubectl apply -f rbac-team-a.yaml

Team A는 자신의 네임스페이스에만 접근 가능하고, 다른 팀의 네임스페이스에는 접근할 수 없음!

 


 

✅ Step 4: 네트워크 정책(NetworkPolicy) 설정

 

📌 네임스페이스 간 트래픽을 격리하기 위해 NetworkPolicy를 설정할 수 있습니다.

 

📌 Team A 네임스페이스 트래픽 제한 (network-policy-team-a.yaml)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: team-a-policy
  namespace: team-a
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: team-a
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: team-a

 

📌 적용 명령어

kubectl apply -f network-policy-team-a.yaml

Team A의 Pod는 같은 네임스페이스 내에서만 통신 가능!

 


 

4️⃣ 멀티 테넌시 운영을 위한 추가 도구

 

Kubernetes에서 멀티 테넌시를 더욱 효과적으로 운영하기 위해 추가적인 도구를 사용할 수도 있습니다.

도구설명

Capsule 네임스페이스 기반 멀티 테넌시를 관리하는 오픈소스
OpenShift 엔터프라이즈 Kubernetes 솔루션, 강력한 RBAC 지원
Kyverno 정책 기반 Kubernetes 보안 솔루션
Istio 서비스 메시를 통한 네트워크 격리 및 인증

규모가 큰 환경에서는 추가적인 도구를 활용하여 멀티 테넌시를 강화할 수 있음!

 


 

📌 결론: Kubernetes 멀티 테넌시 운영 전략 요약

운영 방식설명적합한 환경

네임스페이스 기반 네임스페이스별 리소스 & 보안 격리 소규모 멀티 테넌시
RBAC(Role-Based Access Control) 사용자 접근 제어 설정 보안이 중요한 환경
NetworkPolicy 네트워크 트래픽 격리 테넌트 간 보안 강화
전용 클러스터 테넌트별 개별 Kubernetes 클러스터 운영 고도의 보안 요구 환경

🔥 Kubernetes 멀티 테넌시를 활용하면 하나의 클러스터에서 여러 팀 & 프로젝트를 안전하게 운영 가능!

🔥 네임스페이스, RBAC, NetworkPolicy를 조합하여 최적의 환경을 구축할 수 있음!

 

728x90