GitLab을 단일 제어 플레인으로 삼아 OpenTofu로 AWS 인프라를 프로비저닝하고, Argo CD로 GitOps 기반 애플리케이션 배포까지 자동화하는 엔드투엔드 튜토리얼이다. VPC·EKS 클러스터 구성부터 Helm 기반 툴 설치, 샘플 앱 배포까지 모든 과정이 GitLab CI/CD 파이프라인으로 연결된다.
핵심 포인트- OpenTofu(Terraform 오픈소스 포크)로 VPC, 서브넷, EKS 클러스터를 선언적 코드로 프로비저닝한다.
- GitLab 내장 Terraform 상태 백엔드로 별도 S3 없이 상태 파일을 안전하게 관리한다.
- 인프라 파이프라인 완료 후 trigger job이 두 번째 파이프라인을 자동 실행해 Argo CD, CertManager, Ingress NGINX를 EKS에 설치한다.
- Argo CD가 Git을 단일 진실 원천으로 삼아 클러스터의 실제 상태를 desired state와 지속적으로 동기화한다.
- 개발자가 클러스터에 직접 접근하지 않고 머지 리퀘스트만으로 배포·롤백이 가능하다.
상세 정리- 문제 배경: 수동 클라우드 설정은 재현 불가·오류 발생·환경 불일치 문제가 있어 IaC + GitOps 조합으로 대체한다.
- IaC 원칙: 동일 설정을 어디서든 재현 가능(Reproducible), Git으로 변경 이력 추적(Versioned), 사람 개입 없이 자동 실행(Automated)을 목표로 한다.
- GitOps 확장: Argo CD가 Git의 desired state를 클러스터에 지속 반영해 빠른 롤백(커밋 revert)과 드리프트 방지를 동시에 달성한다.
- 인프라 선언: OpenTofu 파일로 VPC, 퍼블릭/프라이빗 서브넷, 인터넷 게이트웨이, 라우팅 테이블, EKS 컨트롤 플레인, 워커 노드 그룹을 코드로 정의한다.
- CI/CD 변수 관리: AWS 키, 리전, 클러스터 이름 등을 GitLab 그룹 변수(protected + masked)로 선언해 하위 프로젝트가 상속하는 방식으로 환경별 설정을 분리한다.
- 파이프라인 체인: 1번 파이프라인(인프라 프로비저닝) 완료 후 `trigger` 잡이 2번 파이프라인을 자동 실행해 수동 개입 없는 엔드투엔드 흐름을 구현한다.
- 툴 설치: 2번 파이프라인이 OpenTofu Helm Provider로 EKS에 Argo CD, CertManager, Ingress NGINX Controller를 선언적으로 배포한다. Ingress NGINX는 Kubernetes 에코시스템에서 deprecated 예정이라 Traefik 등으로의 전환을 권장한다.
- 보안: 개발자가 클러스터에 직접 접근하지 않고 Git 변경 → 파이프라인 → Argo CD 경로로만 배포가 이루어져 접근 권한 노출을 최소화한다.
- 앱 빌드·배포: GitLab CI/CD가 컨테이너 이미지를 빌드해 GitLab Container Registry에 푸시하면 Argo CD가 이를 감지해 EKS 클러스터에 자동 배포한다.
- 롤백: Git 커밋 revert만으로 이전 상태로 복원 가능 — 전통적 배포 스크립트 없이 일관된 운영이 가능하다.
왜 읽나AWS + Kubernetes 인프라를 GitLab 단일 플랫폼으로 통합 관리하려는 DevOps·인프라 엔지니어에게 OpenTofu, Argo CD, EKS를 연결하는 실전 파이프라인 구성 레퍼런스다.