본문 바로가기
스터디 이야기/Terraform

[T101] Terraform - Terraform으로 EKS 배포하기

by lakescript 2024. 7. 27.

 

더보기

이 스터디는 CloudNet@에서 진행하는 T101 스터디를 참여하면서 공부하는 내용을 기록하는 블로그 포스팅입니다.

CloudNet@에서 제공해주는 자료들과 테라폼으로 시작하는 IaC 를 바탕으로 작성되었습니다.

 

AWS EKS Workshop

https://eksworkshop.com/docs/introduction/

 

Introduction | EKS Workshop

Welcome to the AWS Elastic Kubernetes Service (EKS) workshop!

www.eksworkshop.com

 

위의 실습 예제를 참고하여 Terraform으로 Amazon EKS를 배포하는 실습을 진행해보려고 합니다.

 

사전 준비

 

코드 준비

git clone

git clone https://github.com/aws-ia/terraform-aws-eks-blueprints
cd terraform-aws-eks-blueprints/patterns/karpenter

 

 

각각 tf 파일을 한번 확인해보시면 간략하게 딱 필요한 resource만 사용하는 것을 확인하실 수 있습니다.

 

main.tf에 tag추가

locals {
  tags = {
    created-by = "eks-workshop-v2"
    env        = var.cluster_name
    study      = "t101 study"  			# study tag 추가
  }
}

 

Terraform init

terraform init

 

가장 먼저 위의 명령어를 통해 terraform 구성 환경을 받아옵니다.

 

VPC 배포

그냥 바로 terraform apply를 해서 EKS를 배포하면 VPC까지 같이 배포되지만 여기서는 따로 배포해보도록 하겠습니다. 이것이 가능한 이유는 현재 module을 EKS module, VPC module을 따로 사용하고 있기 때문입니다.

 

현재 VPC 확인

aws ec2 describe-vpcs --filter 'Name=isDefault,Values=false' --output yaml

 

위의 aws cli 명령어를 통해 현재 계정에 배포되어있는 VPC 목록을 확인합니다.

 

 

terraform apply -target

terraform apply -target="module.vpc" -auto-approve

 

-target 명령어를 통해 특정 module만 따로 배포하도록 terraform apply 명령을 실행합니다.

terraform apply 명령어에서 -target 옵션특정 리소스를 선택적으로 적용할 수 있도록 해주는 기능입니다. 보통 terraform apply를 실행하면 현재 디렉토리 내에 정의 되어있는 모든 리소스에 대해 변경 사항을 적용하려고 하지만, -target 옵션을 사용하면 특정 리소스나 리소스 그룹에 대해서만 변경을 적용할 수 있습니다.

 

 

그럼 Warning 과 함께 Apply complete라는 문구를 보여주면서 VPC 배포가 완료됩니다.

Warning 경고는 -target 옵션을 사용할 때 전체 구성에서 필요한 모든 변경 사항이 적용되지 않을 수 있음을 사용자에게 경고하는 메시지입니다. -target을 지정하여 따로 배포하는 것은 리소스 간의 종속성 문제와 상태 불일치가 발생할 수 있습니다. 

 

 

배포 후 VPC 확인

aws ec2 describe-vpcs --filter 'Name=isDefault,Values=false' --output yaml

위의 aws cli 명령어를 통해 현재 계정에 배포되어있는 VPC 목록을 확인합니다.

 

 



마찬가지로 aws console에 접근하여 VPC 메뉴에서 생성된 VPC를 확인합니다.

 

terraform state

terraform state list

 

state list 명령어로 배포된 상태 목록을 확인합니다.

terraform state show 'module.vpc.aws_subnet.public[0]'
terraform state show 'module.vpc.aws_subnet.private[0]'

VPC의 subnet을 한번 살펴보겠습니다. 위의 명령어로 vpc내의 public subnet과  pribate subnet을 확인해보겠습니다.

 

 

EKS 배포

EKS를 배포하기 위해 VPC를 배포하였고, 성공적으로 배포되었으니 이제 EKS를 배포해보도록 하곘습니다. 

 

terraform apply

terraform apply --auto-approve

위의 명령어로 terraform으로 구성된 모든 내용을 배포해보도록 하겠습니다.

 

생성에 10분정도 소요되니 명령어를 실행하신 후 AWS Console에서 EKS로 가서 확인해보시면 EKS Cluster가 생성 중임을 확인하실 수 있습니다.

Cluster 접근하기

생성한 Cluster에 접근해보도록 하겠습니다.

EKS 자격증명

aws eks --region <REGION> update-kubeconfig --name <CLUSTER_NAME> --alias <CLUSTER_NAME>

aws cli 명령어로 EKS의 configure를 kube-config에 등록합니다.

cluster 확인

kubectl get-contexts

위의 명령어로 등록된 cluster 목록을 확인합니다.

kubectl cluster-info

cluster-info 명령어로 cluster의 정보를 확인해보겠습니다.

위의 사진처럼 현재 자격증명이 이루어지지 않아 AWS EKS Cluster에 접근할 수 없는 것을 확인하실 수 있습니다.

 

IAM access entry 생성

일반적으로 AWS EKS 클러스터에서는 여러 가지 접근 제어 메커니즘을 통해 사용자가 클러스터 리소스에 접근할 수 있는 권한을 관리하는데, IAM, RBAC (Role-Based Access Control)등 다양한 방법이 있습니다. 이중 여기서는 IAM을 이용한 EKS Clsuter 접근제어를 설정해보겠습니다.

ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
MYIAMUSER=<각자 자신의 IAM User>

Account_ID와 IAM User 이름을 환경 변수로 설정합니다.

aws eks create-access-entry --cluster-name eks-workshop --principal-arn arn:aws:iam::${ACCOUNT_ID}:user/${MYIAMUSER}

위의 명령어로 access-entry를 생성합니다.

그럼 위와 같이 생성된 결과를 반환해줍니다. 

aws eks list-access-entries --cluster-name eks-workshop

list-access-entires 명령어로 현재 생성되어있는 access-entry 목록을 확인합니다.

aws eks associate-access-policy --cluster-name eks-workshop --principal-arn arn:aws:iam::${ACCOUNT_ID}:user/${MYIAMUSER} \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy --access-scope type=cluster

그 후 위의 명령어로 각자 자신의 IAM User에 AmazonEKSClusterAdminPolicy 연동합니다.

그럼 위의 사진과 같이 연동된 정보를 보여주며 연동이 완료됩니다.

 

Cluster 확인

kubectl cluster-info

 

위에서 실패했던 cluster-info 명령을 다시 실행해보겠습니다.

이제는 권한 설정이 되었기 때문에 정살적으로 실행된 결과인 Kubernetes control plane과 CoreDNS의 정보를 확인하실 수 있습니다.

 

node 확인

kubectl get node

 

이렇게 terraform을 통해 EKS를 배포해보았습니다.

 

terraform destroy

terraform destroy -auto-approve

꼭! destroy를 통해 생성했던 리소스를 제거해주셔야 합니다.

 

'스터디 이야기 > Terraform' 카테고리의 다른 글

[T101] Terraform - OpenTofu  (0) 2024.08.01
[T101] 5-2. Terraform - Terraform Runner(Atlantis)  (1) 2024.07.12
[T101] 5-1. Terraform - module  (0) 2024.07.09
[T101] 4-2. Terraform - State  (0) 2024.07.04