- AWS 환경에서 managed K8S를 구축하고, MSA 구성부터 배포까지 모든 것들을 다 해보기 위한 프로젝트입니다.
- Terraform을 통해 EKS Cluster를 구축하고, 모든 App을 자동으로 배포합니다.
- EKS Cluster로 배포되는 MSA Shop은 Gitops 방식의 CI/CD로 배포됩니다.
- 카나리 배포 자동화
- 계속해서 추가 예정 입니다...
(X) 표시는 아직 구현 전
- EKS
- ECR
- Cloud Watch
- ALB
- EFS(X)
- Terraform
- GitAction
- ArgoCD
- Helm
- istio(X)
- flagger(X)
- Nodejs
- React
- Django
- Nginx
- Mysql
- MongoDB
- OIDC provider
Service name | Role | 사용 DB | Helm Chart |
---|---|---|---|
Front | 사용자 UI | X | front |
Cart | 상품을 담을 수 있는 카트 | MongoDB | cart |
User | 로그인/회원가입 및 사용자 정보관리 | MySQL | user |
Product | 상품 등록 및 관리 | MySQL | product |
Rating | 사용자 평점 시스템 | MongoDB | rating |
Order | 상품 주문 | MySQL | order |
- Terraform apply시 EKS 클러스터를 구축합니다.
- 클러스터 구축 완료 후, 인프라 구성에 필요한 helm chart 및 add-on을 설치합니다.
- 설치되는 chart 및 add-on
- ArgoCD
- aws-cloud-watch-metrics
- aws-load-balancer-controller
- coredns
- vpc-cni
- kube-proxy
- 다음과 같은 flow를 통해서 App이 빌드되고 배포됩니다.
- 개발자는 App repository에 tag를 push
- GitAction은 event를 감지하고 동작
- Dockerfile build
- OIDC provider로부터 ID 토큰 발급
- AWS IAM에게 ID 토큰 검증 후, Access 토큰 발급
- AWS IAM으로부터 ECR Push IAM role에 대한 임시 자격 증명 발급
- ECR에 빌드된 이미지 push
- manifest repo에 새로운 이미지에 대한 정보 업데이트
- EKS Cluster에 배포된 ArgoCD는 manifest repo와 sync
- ArgoCD를 통해서 새로운 이미지의 App을 pod로 배포