Files
project-gitops/README.md
T

3.9 KiB

Project GitOps

Project Auth의 dev-k3s 배포 상태를 관리하는 GitOps configuration 저장소입니다. 배포 기준 저장소는 내부 Gitea 한 곳입니다.

https://git.learn.hyeonworks.com/donghyeon.kang/project-gitops

애플리케이션 소스 저장소는 이미지를 빌드해 GHCR에 올리고, 이 저장소에는 배포할 immutable digest를 변경하는 PR만 생성합니다. Kubernetes 리소스는 Argo CD만 반영하며, Terraform은 Vault API만 관리합니다.

지원 범위

대상 상태
dev-k3s 지원하는 단일 노드 개발 환경
production 설계되지 않았으며 manifest/Application이 존재하지 않음
Istio 보류; 향후 ambient mode 후보

현재 dev Vault와 PostgreSQL, ingress는 TLS가 적용되지 않은 개발 프로파일입니다. production 용도로 사용할 수 없습니다.

제어 흐름

app CI -> GHCR digest -> GitOps PR -> validation -> main
                                                   |
                                                   v
                                              Argo CD
                                                   |
                                                   v
                                               Kubernetes

IaC PR -> Terraform plan -> approval -> Terraform apply -> Vault API

Argo CD 최초 설치와 root Application seed만 클러스터에 직접 적용합니다. 그 이후 routine deployment는 Git 변경으로만 수행합니다.

저장소 구조

bootstrap/argocd/       최초 Argo CD 설치 버전과 단일 root Application
clusters/dev-k3s/
  projects/             AppProject 권한 경계
  applications/         foundation, platform, workload child Applications
  manifests/            dev-k3s가 실제 소비하는 최종 Kustomize 구성
platform/               Vault와 auth platform의 환경 중립 base
workloads/              auth-server와 api-server의 환경 중립 base
iac/terraform/
  modules/              재사용 Vault 모듈
  live/dev-k3s/         vault-core, vault-database state
  backend/dev-k3s/      secret을 포함하지 않는 backend 예시
policies/               Terraform이 소비하는 Vault ACL
hack/                   bootstrap, validation, 조건부 Vault init entrypoint
docs/                   architecture, ADR, recovery/operation runbook

cluster-specific namespace, host, image, secret reference는 clusters/dev-k3s/manifests/에서 완결합니다. platform/workloads/의 base는 클러스터를 알지 못합니다.

Terraform state

Root 소유 범위 실행 권한
vault-core mounts, auth backends, policies, Kubernetes/JWT roles, app Transit key 제한된 관리자
vault-database PostgreSQL connection과 dynamic database roles vault-database-automation-dev

Vault API 객체 하나는 정확히 한 state만 소유합니다. KV secret payload, Vault init JSON, token, PostgreSQL password는 Git이나 Terraform state에 저장하지 않습니다. backend는 암호화, versioning, access control, locking을 제공해야 합니다.

주요 명령

make validate
make bootstrap KUBE_CONTEXT=<expected-context>

make terraform-plan \
  TF_ROOT=vault-core \
  BACKEND_CONFIG=.local/terraform-backend/dev-k3s/vault-core.s3.hcl

terraform-apply는 동일한 입력과 APPROVE_APPLY=dev-k3s/<root>가 모두 있어야 실행되며 auto-approve를 사용하지 않습니다.

문서