PodManager_V2
메인 인덱스 | CCG-Platform | GitHub
이 문서는 PodManager_V2 레포의 핵심 정보와 포트폴리오 메모를 한 파일로 정리한 노트입니다.
주요 목적
Kubernetes 클러스터에서 파드 라이프사이클을 관리하기 위한 API 레포입니다. 외부 노출이 없는 API 전용 버전이고, 백엔드 서비스가 이 레포를 호출해 워크스페이스 파드를 만들고 지우는 흐름을 전제로 합니다. 사용자 파드 간 NetworkPolicy 격리도 함께 다룹니다.
주요 기술 스택
| 카테고리 | 스택 |
|---|---|
| 백엔드 | FastAPI (Python) |
| 템플릿 | Jinja2 (YAML templating) |
| 컨테이너 오케스트레이션 | Kubernetes |
| 프록시 | Traefik (IngressRoute CRD) |
| DNS/SSL | Cloudflare + cert-manager |
| 네트워킹 | NetworkPolicy (pod isolation) |
포트폴리오 메모
이 레포에는 Jinja2 템플릿으로 Kubernetes 리소스를 생성하는 API 계층이 들어 있습니다. 외부 웹 서비스와 파드 관리 흐름을 분리했고, NetworkPolicy와 RBAC, 배포 스크립트까지 함께 두어 운영 환경을 어떻게 잡았는지 설명할 수 있습니다.
주요 파일
애플리케이션 코드
manager/src/pod_manager/main.py- FastAPI 앱 진입점manager/src/pod_manager/k8s_manager.py- K8s 리소스 관리manager/src/pod_manager/services.py- 비즈니스 로직manager/src/pod_manager/models.py- Pydantic 모델manager/src/pod_manager/config.py- 설정 관리manager/src/pod_manager/exceptions.py- 사용자 정의 예외manager/src/pod_manager/pod_spec_template.py- Jinja 템플릿 렌더러
템플릿 (Jinja2)
manager/src/pod_manager/templates/pod_spec.yaml.j2- 파드 정의manager/src/pod_manager/templates/service_spec.yaml.j2- 서비스 정의manager/src/pod_manager/templates/ingressroute_spec.yaml.j2- IngressRoutemanager/src/pod_manager/templates/network_policy_spec.yaml.j2- NetworkPolicy
Kubernetes Manifests
k8s/namespace.yaml- 네임스페이스 정의k8s/manager-rbac.yaml- RBAC 설정k8s/manager-deployment.yaml- 배포 사양k8s/network-policies.yaml- 네트워크 격리k8s/traefik-middleware.yaml- Traefik 미들웨어k8s/workspace-ingressroute.yaml- 워크스페이스 라우팅k8s/turn-rest-proxy.yaml- TURN REST 프록시
배포 스크립트
scripts/build.sh- 빌드 및 푸시 자동화scripts/deploy.sh- 배포 자동화scripts/cleanup.sh- 정리 자동화
문서
TEMPLATING.md- Jinja 템플릿 변수 가이드README.md- 여러 설정 가이드
아키텍처 유형
템플릿 기반 리소스 생성이 있는 Kubernetes API:
Web Backend → Pod Manager API → K8s API → User Pods
(Jinja2 templates)
주요 기능
- 순수 RESTful API (UI 없음)
- K8s 리소스용 Jinja2 템플릿
- NetworkPolicy 기반 파드 격리
- 미들웨어로 HTTPS 강제
- 쿠키 기반 라우팅 (8시간 타임아웃)
- 최소 권한 원칙으로 RBAC
- 여러 리소스 정리
API 엔드포인트
POST /api/v1/pods- 파드 생성GET /api/v1/pods/{session_id}- 파드 조회DELETE /api/v1/pods/{session_id}- 파드 삭제GET /api/v1/pods- 모든 파드 목록GET /health- 헬스 체크
관련 레포지토리
- PodManager (원본 버전)
- portal-backend (웹 서비스)
- Selkies (WebRTC 스트리밍)
참고사항
- 템플릿 기반 리소스 생성 흐름이 보입니다.
- K8s 관리 API를 Python으로 어떻게 나눴는지 확인할 수 있습니다.
portal-backend와 연결해서 읽으면 서비스-인프라 경계가 더 분명합니다.