궁금한게 많은 개발자 노트

[ AWS ] EKS구축 및 Continuous Deployment 다이어그램 본문

DevOps

[ AWS ] EKS구축 및 Continuous Deployment 다이어그램

궁금한게 많은 개발자 2023. 11. 20. 19:50

AWS를 사용하여 EKS환경을 구축해보면서 어떤 구성요소들이 필요한지 컴포넌트 다이어그램을 대략적으로 그려보았습니다. VPC를 private subnet과 public subnet으로 구분하고, public subnet에 bastion host인 EC2를 배치하고, private subnet에는 EKS를 생성하였습니다.

이를 통해 EKS에 직접 접근은 bastion host를 통해서만 가능하도록 하여 보안을 강화시켰습니다. 또한, worker node에 존재하는 application service pod등으로의 접근은 ALB(ingress)를 통해 가능하도록 하였습니다.

 

EKS provisioned only private subnets

 

만약 data plane에 존재하는 pod들이 외부로 접근/요청이 필요한 경우에는, public subnet에 존재하는 NAT(Network Address Translation) gateway를 통해 외부에서 private subnet에 존재하는 구성 요소들을 알 수 없도록 하였습니다.

또 VPC 내부 resource들과 인터넷 통신을 위해 internet gateway를 두어 외부 인스턴스가 EIP/public IP를 가진 instance에 요청을 보내면 NAT역할을 수행하여 내부 ip로 변환시켜 주는 라우팅 테이블 역할을 합니다. 

기존 업무 시에는 Ansible이란 IaC Tool을 사용하여 EKS를 구축/운영하였는데, 새로운 업무를 통해 Terraform을 사용하여 EKS를 구축 해야 할 일이 생겨 구성 요소들을 정리해봤습니다.

 

Github Actions를 사용한 CD 파이프라인 구축

 

CD파이프라인 구축 시 기존 방식에서 github actions의 역할은 image build, ECR로 image push뿐만 아니라 kubectl을 사용하여 새로 빌드 된 이미지로의 deployment rollout restart까지 해주었습니다.

하지만, 보안을 강화하기 위해 EKS로의 직접 접근/명령을 로컬에서 못하게 막고, 각 VPC마다 deployment instance를 생성하고 해당 instance로의 security group inbound rule을 github actions에서 접근 가능하도록 열어두어 build후 ECR로 image push, rollout요청을 REST API로 하도록 전환하였습니다. 이에 따라 deployment instance에는 rollout request를 처리하는 REST API handler가 필요하게 되었습니다.

Comments