Terraform으로 EKS Cluster 프로비전(2) - Bastion Host 생성

empty·2020년 9월 15일
1

EKS

목록 보기
3/6
post-thumbnail

서론

프라이빗 서브넷에 Worket Node가 생성되게 되면 접근할 수 있는 방법 중 하나로 Bastion Host 인스턴스를 생성하는 것이다.
Bastion Host로만 Worker Node 인스턴스에 접근할 수 있게 보안그룹에 포트를 뚫어 놓는 것이다.

Bastion Host로 쓰일 EC2 생성 -> Worker Node에 해당 EC2의 SSH 포트를 허용하는 보안그룹을 적용

EKS Cluster 작업순서

  1. VPC 생성
  2. Bastion Host 생성
  3. EKS Cluster 생성 (Module 사용)

1. Security Group을 생성

Worker Node에 SSH로 접속하기 위한 Bastion EC2를 생성한다.

############   Create Bastion Host   ################
resource "aws_security_group" "seunghyeon-bastion-sg" {
  name = "seunghyeon-bastion"
  vpc_id = module.vpc.aws_vpc_id

  ingress {
    from_port = 22
    protocol = "tcp"
    to_port = 22
    cidr_blocks = var.my-ip-address
  }

  egress {
    from_port = 0
    protocol = "-1"
    to_port = 0
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    "Name" = "seunghyeon-EKS-bastion-sg"
  }
}

Bastion Host의 cidr_blocks의 값을 var.my-ip-address변수로 받아오는데 이는 Bastion Host에 허용할 IP를 설정하는 부분이다. 따라서 자신의 IP를 변수값으로 입력하고 설정을 안하면 0.0.0.0/0 으로 설정된다.

2. Bastion EC2 인스턴스 생성

resource "aws_instance" "bastion" {
  ami = "ami-027ce4ce0590e3c98"
  instance_type = "t2.micro"
  subnet_id = element(module.vpc.public_subnets, 0)
  key_name = aws_key_pair.seunghyeon-bastion.id
  vpc_security_group_ids = [
    aws_security_group.seunghyeon-bastion-sg.id
  ]

  tags = {
    "Name" = "seunghyeon-EKS-bastionHost"
  }
}

Bastion은 접속하기 위해 거치는 Proxy같은 느낌이기에 인스턴스 타입은 t2.micro로 설정하고 security group은 위에서 생성한 리소스로 설정한다.

Result

Bastiong Host를 생성하게 되면 Public Subnet1에 EC2 인스턴스가 생성되고 이 인스턴스로 Private Subnet에 있는 Worker Node에 접속할 수 있게 된다.

2개의 댓글

comment-user-thumbnail
2023년 1월 29일

안녕하세요! 질문이 있는데, private의 workernode로 접속하는 건 bastion host가 한다고 말씀하셨는데 그러면 nat gateway는 데이터가 나오는 통로로 사용하는건가요??

1개의 답글