K8s_Cloudwave: Terraform 활용 EKS 생성

Terraform + GitOps + AWS EKS 인프라 코드 정리

Terraform

  • 인프라를 선언형 코드로 생성, 변경, 삭제한다. (AWS 인프라 서비스도 선언 가능)

GitOps

  • Git을 사용하여 인프라를 자동배포 흐름으로 운영
  • 장점: 변경 이력, 감사, 롤백이 쉬움

Terraform이 AWS에 리소스를 만들려면 AWS API 호출 권한이 필요

aws configure                 # AWS CLI 인증키/리전/출력형식 설정(저장)
aws configure list            # 현재 AWS CLI 설정값(키/리전/출력)과 출처 확인
cat ~/.aws/credentials        # 저장된 AWS 자격증명(프로파일별 Access/Secret 키) 내용 확인

 

Terraform 디렉토리 구조 (인프라 모듈 단위)

mkdir -p infra/cwave-aws-eks
cd infra/cwave-aws-eks

파일 구성 (예시)

1) variables.tf : 환경/파라미터 입력창

  • 지역(region), VPC 이름, AZ, Subnet CIDR, EKS 버전 등 바뀔 수 있는 값을 모아둔다.
  • CIDR들은 서로 겹치면 망함(VPC/Subnet 충돌)

2) 000_provider.tf : 플러그인/버전/기본 태그

  • Provider: terraform이 AWS/Helm/K8s와 통신하는 드라이버
  • default_tags로 모든 리소스에 managed_by=terraform 같은 기본 태그 자동 부착
  • provider 버전 고정은 “갑자기 깨지는 업데이트” 방지

3) 100_network.tf : EKS가 올라갈 네트워크 기반(VPC)

  • VPC (10.1.0.0/16)
  • Public Subnet 3개 (AZ a/b/c)
  • Private Subnet 3개 (AZ a/b/c)
  • IGW (Public outbound)
  • NAT GW (Private outbound용)
  • Route Table + Association
  • Public Subnet: 인터넷과 직접 연결(IGW 라우팅)
  • Private Subnet: 인터넷 직접 연결 X, 대신 NAT 통해 outbound만
  • EKS 노드는 보통 Private Subnet에 둔다

4) 200_sg.tf : 보안그룹(네트워크 방화벽)

  • SG는 인바운드(들어오는) / 아웃바운드(나가는) 규칙을 가진다.
  • EKS 노드/클러스터 SG 설계(노드끼리 통신, 컨트롤 플레인 통신).

5) 300_eks.tf : EKS 클러스터 핵심 구성

  • EKS 모듈 사용: EKS 리소스를 직접 만들지 않고 검증된 모듈로 표준 구성을 빠르게 생성
  • Managed Node Group
    • 워커 노드를 Private Subnet에 배치
    • 스케일링(min/max/desired) 자동 관리
  • Cluster Add-ons
    • coredns, kube-proxy, vpc-cni → 필수
    • aws-ebs-csi-driver → EBS PV 사용
    • aws-efs-csi-driver → EFS PV 사용
    • eks-pod-identity-agent → 최신 권한 모델 대응
  • IRSA: Pod에 직접 AWS 권한 부여

6) 400_iam.tf : IAM 역할/정책(권한)

  • EC2 role (ECR PowerUser)
    • EC2가 ECR에 접근 용도
  • AWS Load Balancer Controller IAM 정책
    • ALB/NLB 만들려면 컨트롤러가 AWS에 API 호출해야 함
  • eks_namespace_roles 
    • namespace 단위 role을 생성

7) 500_helm.tf : EKS 위 필수 컨트롤러 설치

  • Terraform이 EKS를 만든 뒤, Helm을 이용해 컨트롤러 배포
  • Helm/Kubernetes provider는 EKS endpoint + 인증 정보 필요

실제 실행 흐름

EKS 생성

# Terraform 초기화
terraform init    
# 현재 인프라 상태와 코드 차이를 비교해 실행될 변경 사항 미리 확인
terraform plan    
# 계획된 변경 사항을 실제 인프라에 적용
terraform apply

 

kubeconfig 업데이트 (kubectl이 EKS를 보게 만들기)

# EKS 클러스터(cwave) 접속 정보를 kubeconfig에 추가/갱신
aws eks update-kubeconfig --region ap-northeast-2 --name cwave
# 클러스터에 등록된 노드(EKS 워커 노드) 상태 확인
kubectl get nodes                                              
# 모든 네임스페이스의 Pod 상태 전체 조회
kubectl get po -A
  • update-kubeconfig는 네 로컬/IDE의 ~/.kube/config에
    • EKS 클러스터 endpoint
    • 인증방식(aws eks get-token)
    • context 정보를 추가해준다.

'K8s' 카테고리의 다른 글

K8s_Cloudwave: ConfigMap & Secret  (0) 2026.01.12
k8s_cloudwave: 볼륨  (1) 2026.01.09
K8s_Cloudwave: K8s 기본 리소스  (0) 2026.01.09
K8s-Cloudwave: 로컬 K8s 생성  (0) 2026.01.08
K8s-Cloudwave: 쿠버네티스 기초  (0) 2026.01.08