Skip to main content

애플리케이션 개요

Lumie k3s 클러스터는 인프라 운영 및 비즈니스 업무를 지원하기 위해 다수의 자체 호스팅 애플리케이션을 운영합니다. 모든 애플리케이션은 ArgoCD GitOps 파이프라인을 통해 배포되며, Teleport를 통해 외부 접근이 제어됩니다.

배포된 애플리케이션

애플리케이션네임스페이스용도접근 URL
Codercoder클라우드 개발 환경https://coder.lumie-infra.com
HeadlampheadlampKubernetes 대시보드Teleport 경유
OpenClawopenclaw다중 에이전트 AI 플랫폼Teleport 경유
Umamiumami웹 분석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

관련 문서