Infra
수정·
[Terraform] EKS Cluster 구성하기
Terraform 을 이용한 EKS 클러스터 구성
지난 포스트에서 작성했던 vpc.tf 의 내용을 다음과 같이 수정한다.
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = var.vpc_name
azs = var.availability_zones
cidr = var.vpc_cidr
enable_nat_gateway = true
single_nat_gateway = true
public_subnets = [for index in range(2) :
cidrsubnet(var.vpc_cidr, 4, index)]
private_subnets = [for index in range(2) :
cidrsubnet(var.vpc_cidr, 4, index+2)]
#추가
vpc_tags = {
"kubernetes.io/cluster/${var.cluster_name}" = "shared"
} # 추가
public_subnet_tags = {
"kubernetes.io/cluster/${var.cluster_name}" = "shared"
"kubernetes.io/role/elb" = "1"
}
# 추가
private_subnet_tags = {
"kubernetes.io/cluster/${var.cluster_name}" = "shared"
"kubernetes.io/role/elb" = "1"
}
}
또한 variables.tf 와 terraform.auto.tfvars 파일에 cluster 관련 변수를 추가해준다.
# variables.tf
variable "region" {
description = "AWS service region name"
type = string
default = "ap-northeast-2"
}
variable "availability_zones" {
description = "AWS AZ info"
type = list(string)
default = [ "ap-northeast-2a", "ap-northeast-2c" ]
}
variable vpc_name {
type = string
}
variable vpc_cidr {
type = string
}
#추가
variable cluster_name {
type = string
}
# 추가
variable cluster_version {
type = string
}
# terraform.auto.tfvars
region = "ap-northeast-2"
vpc_name = "your-vpc-name"
vpc_cidr = "10.244.0.0/16"
cluster_name = "your-cluster-name"
cluster_version = "1.24"
위 내용을 작성했다면 eks cluster 에 대한 terraform 파일을 생성한다.
#eks-cluster.tf
data "aws_caller_identity" "current" {}
locals {
iam_role_policy_prefix = "arn:aws::${data.aws_caller_identity.current.account_id}:policy"
terraform_runner_cidr = "your.ip.addr.ipv4/32"
}
module "eks" {
source = "terraform-aws-modules/eks/aws"
cluster_name = var.cluster_name
cluster_version = var.cluster_version
cluster_endpoint_private_access = true # vpc 내부에서 접속 가능
cluster_endpoint_public_access = false # vpc 외부에서 접속 불가능
cluster_addons = {
coredns = {
resolve_conflict = "OVERWRITE"
}
kube-proxy = {}
vpc-cni = {
resolve_conflict = "OVERWRITE"
}
}
create_aws_auth_configmap = true
manage_aws_auth_configmap = true # 관리형 노드그룹을 사용
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
# 추가 - 외부 접근 허용
cluster_security_group_additional_rules = {
ingress = {
description = "EKS Cluster allows 443 port."
type = "ingress"
from_port = 443
to_port = 443
protocol = "TCP"
cidr_blocks = [local.terraform_runner_cidr]
source_node_security_group = false
}
}
}
작성이 완료되었다면 인프라를 적용한다.
$ terraform apply
약 15-20분 사이의 시간이 걸리므로 대기 후 coredns addon 을 제외한 다른 모든 리소스가 생성되었으면 새로운 터미널에서 다음 명령어를 입력하여 kubeconfig 을 구성한다.
$ aws eks update-kubeconfig --name your-cluster-name --region ap-northeast-2
kubeconfig 파일은 $HOME/.kube/config 에 저장된다. eks가 구성된 vpc 의 public subnet 대역에 ec2 인스턴스를 생성한 후 kubectl을 이용하여 Cluster API Server 와 통신을 시도해보자.
$ kubectl get nodes
No resources found
정상 동작을 확인하였다.