1. Infrastructure of EKS
Production 환경에서 일반적으로 구성할 수 있는 AWS Architecture 중 하나를 그려보면 위와 같은 그림을 그릴 수 있다.
1. Route 53으로 Domain Routing
2. ACM으로 HTTPS ssl 검사
3. WAF로 요청에 대한 전반적인 검사
4. EKS의 ALB (혹은 NLB 등)으로 Routing
5. ALB에서 정의된 룰에 따라 EKS Private Subnet의 EKS Container에 요청 전달 및 응답 반환
6. (Optional) Container에서 Database Subnet 의 DB로 CRUD 요청
7. (Optional) Public Subnet의 NAT Gateway로 외부와 통신
2. 기존 Terraform과 Helm의 일반적인 사용법의 문제점
Infrastructure의 IaC를 위해서 Terraform,
Kubernetes (여기서는 EKS)의 IaC를 위해서 Helm을 주로 사용한다.
하지만 Helm은 이미 만들어져 있는 Domain, VPC, EKS Cluster와 Node Group에 대하여 Container와 Ingress(ALB, NLB) 등을 하는 역할을 한다.
또한 Terraform으로는 VPC만을 구성하는 것이 일반적인 사용법이다.
즉, Terraform과 Helm의 일반적인 사용법으로 IaC를 적용한다면,
IaC가 적용되지 않는 부분이 발생한다.
3. 목표
이상적으로는 Terraform과 Helm 만으로 위의 Infrastructure of EKS를 구성하면,
IaC를 모든 구성 요소를 적용하게 되는 것이다.
즉, Terraform과 Helm의 코드 작성 및 변수 설정만 되어 있다면
아래 4개의 명령어 만으로 EKS 인프라를 Fully 구축하는 것이다.
$ terraform init
$ terraform plan
$ terraform apply
$ helm install ...
이를 위한 코드 구현을 포스팅한다.