Helm으로 Kubernetes에 설치
프로덕션 등급 Helm 차트로 TRUSCA를 배포하려는 Kubernetes 운영자.
kubectl, Helm 3, 기본 클러스터 관리(Ingress, StorageClass, cert-manager)
숙련도를 전제합니다. 단일 호스트를 운영한다면
Docker Compose 설치가 더 간단합니다.
Helm 차트(charts/trustedoss, 차트 버전 0.10.0)는 포털 전체를 배포합니다.
FastAPI 백엔드, Celery 워커와 beat 스케줄러, React 프론트엔드, TLS가 적용된
Ingress, 데이터베이스 마이그레이션 Job을 포함합니다. PostgreSQL과 Redis는
클러스터 내부에 번들(평가용)하거나 외부 관리형 데이터스토어를 가리킬 수
있습니다(프로덕션 권장).
워커 파드는 Trivy DB를 포함하며 ghcr.io/aquasecurity/trivy-db에서(또는 env.trivy.dbRepository 미러에서) 다운로드·갱신합니다. 외부 취약점 엔진은 필요하지 않습니다. 취약점 데이터 (Trivy DB) 참조.
차트가 배포하는 것
| 워크로드 | 종류 | 비고 |
|---|---|---|
| backend | Deployment | FastAPI API. AUTO_MIGRATE=false — 마이그레이션은 Job이 수행합니다. |
| worker | Deployment (+ 선택적 HPA) | Celery 워커 (cdxgen / scancode / Trivy). |
| beat | Deployment (replicas: 1) | Celery 스케줄러 — 싱글턴. |
| frontend | Deployment | nginx 위 React SPA (:8080). |
| postgres | StatefulSet | 선택적 번들 (postgres.bundled). |
| redis | Deployment | 선택적 번들 (redis.bundled). |
| migrate | Job (pre-install / pre-upgrade 훅) | owner 역할로 alembic upgrade head. |
| ingress | Ingress | cert-manager TLS; API + SPA 라우팅. |
사전 요구사항
- 네임스페이스와 워크로드를 생성할 권한이 있는 Kubernetes 클러스터와
kubectl컨텍스트. - Helm 3.
- 인그레스 컨트롤러(차트 기본 클래스는
nginx). - 기본 TLS 구성을 위한
letsencrypt-prod이름의ClusterIssuer가 있는 cert-manager(ingress.annotations로 재정의 가능). - 다중 노드 클러스터에서는 공유 스캔 워크스페이스용
ReadWriteManyStorageClass(workspace.persistence.storageClassName). 단일 노드 클러스터는 파드별emptyDir폴백을 사용할 수 있습니다.
설치 전 차트 검증
배포 전에, 클러스터 없이 in-repo 차트를 로컬에서 렌더링하여 values·템플릿 오류를 잡습니다(Helm 3+, 저장소 루트에서 실행):
SECRET=$(openssl rand -hex 32)
helm lint charts/trustedoss \
--set env.secret.secretKey="$SECRET" \
--set postgres.auth.password=throwaway \
--set ingress.host=trustedoss.example.com
helm template trustedoss charts/trustedoss --namespace trustedoss \
--set env.secret.secretKey="$SECRET" \
--set postgres.auth.password=throwaway \
--set ingress.host=trustedoss.example.com \
>/dev/null
helm lint는 차트 구조 문제를 보고하고, helm template은 최소 필수 values로
모든 매니페스트를 완전히 렌더링하므로 0이 아닌 종료 코드는 차트가 설치되지
않음을 뜻합니다. 여기 --set 값은 일회용이며 — 실제 설치는 아래에서 본인의
시크릿을 사용합니다.
빠른 시작 (번들 데이터스토어, 평가용)
PostgreSQL과 Redis를 클러스터 내부에서 실행합니다 — 빠르게 띄울 수 있지만 프로덕션 데이터에는 권장하지 않습니다.
helm install trustedoss oci://ghcr.io/trustedoss/charts/trustedoss \
--version 0.10.0 \
--namespace trustedoss --create-namespace \
--set env.secret.secretKey="$(openssl rand -hex 32)" \
--set postgres.auth.password="$(openssl rand -hex 24)" \
--set ingress.host=trustedoss.example.com \
--set env.corsAllowedOrigins=https://trustedoss.example.com
trustedoss.example.com을 자신의 호스트명으로 바꾸고, 해당 호스트의 DNS가 인그레스
컨트롤러를 가리키는지 확인하십시오.
클러스터 내부 PostgreSQL과 Redis는 기본값이 소박하고 단일 레플리카입니다. 시험 이상의 용도라면 외부 관리형 데이터스토어(아래)를 사용하십시오.
프로덕션 (외부 관리형 데이터스토어 — 권장)
클러스터 내부 번들 대신 PostgreSQL은 Cloud SQL / RDS, Redis는 Memorystore / ElastiCache를 권장합니다. values 파일을 제공하십시오.
# values.prod.yaml
postgres:
bundled: false
redis:
bundled: false
env:
database:
url: postgresql+asyncpg://app:***@cloudsql-proxy:5432/trustedoss
# DDL/owner 역할을 런타임 역할과 분리하는 경우:
ownerUrl: postgresql+asyncpg://owner:***@cloudsql-proxy:5432/trustedoss
redis:
url: redis://memorystore:6379/0
secret:
# 네 개 키를 모두 담은 사전 생성 Secret (아래 참고)
existingSecret: trustedoss-prod-secrets
corsAllowedOrigins: https://trustedoss.example.com
ingress:
host: trustedoss.example.com
설치합니다.
helm install trustedoss oci://ghcr.io/trustedoss/charts/trustedoss \
--version 0.10.0 \
--namespace trustedoss --create-namespace \
-f values.prod.yaml
env.secret.existingSecret을 설정하면 차트는 자체 Secret을 렌더링하지
않습니다. 참조하는 Secret은 네 개 키를 모두 담아야 하며, 그렇지 않으면 파드가
시작되지 않습니다.
DATABASE_URL_APPDATABASE_URL_OWNERREDIS_URLSECRET_KEY(최소 32자)
env.corsAllowedOrigins는 SPA를 제공하는 정확한 오리진을 열거해야 합니다 —
프로덕션에서 와일드카드 금지. 브라우저가 사용할 모든 scheme + host를 나열하십시오.
마이그레이션 동작 방식
Helm pre-install + pre-upgrade 훅 Job이 owner DB 역할
(DATABASE_URL_OWNER)로 alembic upgrade head