애플리케이션 개요
Lumie k3s 클러스터는 인프라 운영 및 비즈니스 업무를 지원하기 위해 다수의 자체 호스팅 애플리케이션을 운영합니다. 모든 애플리케이션은 ArgoCD GitOps 파이프라인을 통해 배포되며, Teleport를 통해 외부 접근이 제어됩니다.
배포된 애플리케이션
| 애플리케이션 | 네임스페이스 | 용도 | 접근 URL |
|---|---|---|---|
| Coder | coder | 클라우드 개발 환경 | https://coder.lumie-infra.com |
| Headlamp | headlamp | Kubernetes 대시보드 | Teleport 경유 |
| OpenClaw | openclaw | 다중 에이전트 AI 플랫폼 | Teleport 경유 |
| Umami | umami | 웹 분석 | Teleport 경유 |
공통 아키텍처 패턴
GitOps 배포 방식
모든 애플리케이션은 ArgoCD Application 리소스를 통해 관리됩니다. 각 앱의 배포 구성은 applications/<앱 이름>/ 경로 아래에 위치합니다.
applications/
<앱>/
argocd.yaml # ArgoCD Application 정의
kustomization.yaml # Kustomize 진입점 (또는 Helm values 참조)
helm-values.yaml # Helm 값 파일 (Helm 기반 앱)
common-values.yaml # 공통 차트 값 (RBAC, 시크릿, 서비스)
manifests/ # 커스텀 Kubernetes 매니페스트
두 가지 배포 패턴이 사용됩니다:
Kustomize + Helm 패턴 (Coder)
# kustomization.yaml
helmCharts:
- name: coder
repo: https://helm.coder.com/v2
version: 2.31.9
valuesFile: helm-values.yaml
resources:
- manifests/
ArgoCD Multi-Source 패턴 (Headlamp, Umami)
# argocd.yaml
spec:
sources:
- repoURL: https://kubernetes-sigs.github.io/headlamp
chart: headlamp
targetRevision: 0.39.0
helm:
valueFiles:
- $values/applications/headlamp/helm-values.yaml
- repoURL: https://github.com/Lumie-Edu/lumie-infra.git
targetRevision: main
ref: values
시크릿 관리
모든 민감한 설정 값은 Vault Secrets Operator(VSO)의 VaultStaticSecret 리소스를 통해 주입됩니다. Kubernetes Secret을 직접 커밋하지 않습니다.
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: <앱>-vss
spec:
vaultAuthRef: vault/vault-auth
mount: secret
type: kv-v2
path: applications/<앱>
refreshAfter: 1h
destination:
create: true
name: <앱>-secret
transformation:
excludeRaw: true
templates:
<키>: "{{ .Secrets.<VAULT_KEY> }}"
rolloutRestartTargets:
- kind: Deployment
name: <앱>
Vault 경로 규칙:
- 인프라 공통 시크릿:
secret/infrastructure/<앱> - 애플리케이션 전용 시크릿:
secret/applications/<앱> - 공유 API 토큰:
secret/tokens
네트워크 접근 정책
모든 애플리케이션은 네이티브 Ingress를 비활성화하고, Teleport 앱 프록시를 통해 외부 접근을 제공합니다. 이를 통해 단일 인증 게이트웨이와 감사 로그를 확보합니다.
내부 서비스 간 통신은 Kubernetes DNS를 통해 직접 이루어집니다.
데이터베이스 공유 클러스터
별도의 내장 데이터베이스를 사용하지 않고, 공유 CNPG(CloudNativePG) 클러스터를 사용합니다:
- 호스트:
infra-db-rw.infra-db.svc.cluster.local:5432 - 데이터베이스 사용자: 앱별 전용 사용자 (예:
coder,umami,openclaw) - 비밀번호: Vault를 통해 주입
Goldilocks 리소스 최적화
모든 애플리케이션 네임스페이스에는 Goldilocks VPA 권장 사항을 활성화하는 레이블이 부착됩니다:
managedNamespaceMetadata:
labels:
goldilocks.fairwinds.com/enabled: 'true'
공통 보안 설정
컨테이너 보안 컨텍스트는 최소 권한 원칙을 따릅니다:
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
seccompProfile:
type: RuntimeDefault
이미지 레지스트리
외부 이미지는 내부 Zot 레지스트리(zot.lumie-infra.com)로 미러링하여 사용합니다. 이를 통해 외부 레지스트리 장애에 대한 내성을 확보하고 이미지 풀 속도를 향상시킵니다.
ArgoCD 동기화 정책
모든 애플리케이션에 공통 적용되는 ArgoCD 동기화 정책:
syncPolicy:
automated:
prune: true # 제거된 리소스 자동 삭제
selfHeal: true # 드리프트 자동 복구
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
syncOptions:
- CreateNamespace=true