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를
사용하지 않습니다.