아키텍처 개요
Lumie 플랫폼은 OCI(Oracle Cloud Infrastructure) 위의 K3s 클러스터에서 운영됩니다. GitOps(ArgoCD), 자동화된 CI/CD(Tekton), 통합 관측성 스택을 중심으로 설계되었습니다.
클러스터 구성
K3s 클러스터는 마스터 노드 1대와 워커 노드 3대(worker-2, worker-3, worker-4)로 구성됩니다. worker-1은 2026-04에 제거되었습니다.
노드 역할
| 노드 | OCI 계정 | 역할 |
|---|---|---|
| 마스터 | 0214 | K8s Control Plane, Teleport Proxy HA |
| worker-2 | 0214 | 애플리케이션 파드, Traefik Ingress (svclb DaemonSet) |
| worker-3 | 0213 | 애플리케이션 파드, Traefik Ingress (svclb DaemonSet) |
| worker-4 | 0213 | 애플리케이션 파드, Traefik Ingress (svclb DaemonSet) |
마스터 노드는 Teleport가 443 포트를 점유하므로 Traefik svclb DaemonSet에서 제외됩니다.
NLB 구성
| NLB | 예약 IP | 용도 |
|---|---|---|
| 애플리케이션 NLB | 168.107.42.253 | Cloudflare 프록시 경유 → Traefik (앱 트래픽) |
| Teleport NLB | 158.180.89.154 | Teleport Proxy HA (SSH/K8s API 접근) |
dev.lumie-infra.com 및 lumie-edu.com 계열은 Cloudflare 프록시(orange cloud)를 통해 168.107.42.253 NLB로 라우팅됩니다.
도메인 구성
| 도메인 | 용도 |
|---|---|
lumie-edu.com | 서비스 메인 도메인 (프론트엔드, API) |
lumie-infra.com | 인프라 도구 (Teleport, ArgoCD, Grafana 등) |
zot.lumie-infra.com | 내부 컨테이너 이미지 레지스트리 (Zot) |
전체 아키텍처
핵심 컴포넌트
Traefik Ingress
K3s에 내장된 Traefik이 외부 트래픽의 단일 진입점입니다. Kong을 대체하며 JWT/CORS는 Spring Security 애플리케이션 레벨에서 처리합니다.
- StripPrefix Middleware:
applications/lumie/backend/lumie-backend/manifests/strip-prefix.yaml - Ingress className:
traefik - TLS: cert-manager + Let's Encrypt
ArgoCD (GitOps)
lumie-infra 레포지토리가 단일 진실 공급원입니다. 모든 K8s 리소스는 Git 커밋으로 관리되며 ArgoCD가 자동으로 동기화합니다.
lumie-infra/
├── applications/
│ ├── lumie/
│ │ └── backend/
│ │ └── lumie-backend/ ← 단일 백엔드 ArgoCD App
│ └── kustomization.yaml
├── bootstrap/ ← minio, zot, vault
└── networking/
└── traefik.md ← 현행 Ingress 설정
Tekton CI/CD
백엔드 전체가 단일 lumie-springboot-build-deploy 파이프라인으로 통합되었습니다(타임아웃 45분). 워커 서비스(grading, report, analysis, chatbot)는 lumie-worker 레포에서 경로 기반 CEL 필터로 개별 처리됩니다.
| 파이프라인 | 대상 | 트리거 |
|---|---|---|
lumie-springboot-build-deploy | lumie-backend 레포 전체 | Push to main |
lumie-worker-{서비스명} | 각 워커 서비스 경로 | 경로 기반 CEL 필터 |
HashiCorp Vault
애플리케이션 시크릿을 중앙에서 관리합니다. External Secrets Operator가 Vault에서 K8s Secret으로 동기화합니다.
주요 시크릿 경로:
storage/postgresql → DB 자격증명, PgBouncer userlist
platform/rabbitmq → RabbitMQ 비밀번호
platform/redis → Redis 비밀번호
security/jwt → JWT secret key
bootstrap/minio → MinIO access/secret key
applications/ai-svc → DeepSeek API key
관측성 스택
| 컴포넌트 | 역할 |
|---|---|
| OpenTelemetry Collector | 메트릭·트레이스·로그 수집 에이전트 |
| Prometheus | 메트릭 수집 및 알림 규칙 |
| Thanos | 장기 메트릭 저장 (MinIO 백엔드) |
| Grafana | 대시보드 및 시각화 |
| Loki | 로그 집계 |
| Tempo | 분산 트레이싱 |
| Alertmanager | 알림 라우팅 (Slack, PagerDuty 등) |
보안 레이어
| 컴포넌트 | 역할 |
|---|---|
| Traefik | TLS 종단, 외부 트래픽 제어 |
| Spring Security | JWT 검증, CORS, 인가 |
| Vault | 시크릿 중앙 관리 |
| cert-manager | TLS 인증서 자동 발급/갱신 |
| Kyverno | K8s 정책 엔진 (이미지 정책, 레이블 강제 등) |
| Falco | 런타임 이상 행위 감지 |
| Trivy | 컨테이너 이미지 취약점 스캔 |
| Keycloak | SSO / OAuth2 Provider |
스토리지
| 컴포넌트 | 용도 |
|---|---|
| MinIO | 파일 저장소, Thanos 메트릭 백엔드, Velero 백업 대상 |
| Velero | K8s 리소스 및 PVC 정기 백업 |
| Zot | 내부 OCI 컨테이너 이미지 레지스트리 |
네임스페이스 구성
| 네임스페이스 | 용도 |
|---|---|
lumie-backend | 백엔드 모놀리스 (3 replicas) |
lumie-frontend | Next.js 프론트엔드 |
lumie-worker | FastAPI 워커 서비스 4종 |
lumie-dev | 개발 환경 (dev-workspace, pgbouncer, rabbitmq-dev, lumie-dev-db) |
lumie-infra | ArgoCD, Tekton, Vault, Keycloak, Zot 등 인프라 |
monitoring | Prometheus, Grafana, Loki, Tempo, Alertmanager |
kube-system | Traefik, cert-manager, Kyverno 등 |