Overview
쿠버네티스를 제대로 이해하려면 직접 설치해봐야 한다고 생각해 클러스터 구축을 반복 연습했는데, 쿠버네티스 공식 문서를 보면서 CRI·CNI 설치 등 손이 많이 가는 단계가 많아 매번 구축에 시간이 오래 걸렸다. 그래서 설치 절차를 Ansible로 자동화했고, 이를 검증할 서버가 필요해 AWS 인프라를 Terraform으로 구축했다. 콘솔로 수동 구성하던 중 노드 간 통신을 위해 포트를 여러 개 열다 보니 보안이 아쉬워, private 통신 전환과 control-plane 격리로 보안을 버전 단위(v1·v2·v3)로 강화했다. 가용성은 정족수를 고려해 CP 3대·WN 2대로 구성해 한 대가 죽어도 클러스터가 유지되도록 했으나, 단일 AZ라 완전한 HA는 아니며 멀티-AZ 등으로 계속 보완할 예정이다.
아키텍처
## Terraform
격리 — 전 노드 Private + SSM 접근: control-plane과 worker node를 VPC를 이용하여 Private Subnet에 두었고, Public IP·SSH inbound를 제거해 외부에서 직접 도달 가능한 경로 자체를 없앴다. 관리 접근은 SSM Session Manager로 대체했다. 이를 위해 SSM 서비스로 가는 사설 경로로 VPC Interface Endpoint를 두고, 인스턴스에는 SSM에 등록·통신할 권한으로 IAM Role을 부여함으로써 인터넷을 경유하지 않고 AWS 내부망으로만 접속하도록 했다.
아웃바운드 — NAT Instance: cp, worker-node가 속한 라우트 테이블을 VPC IGW로 향하지 않도록 설정했기 때문에 이미지 Pull, 패키지 설치 등을 할 수 없게 되었다. 그래서 Private Subnet이 외부로 나갈 수 있는 경로를 따로 만들어줘야 했다. 처음에는 NAT Gateway를 쓸까 했는데, 24시간 켜두면 월 $42 정도가 나와서 학습용으로는 부담이 컸다. 그래서 저렴한 t3.micro EC2를 NAT 용도로 Public Subnet에 하나 띄우고, Private Subnet 라우트 테이블의 0.0.0.0/0을 이 NAT 인스턴스로 향하게 설정함으로써 노드들의 outbound를 NAT가 대신 중계하도록 만들어주었다.
인바운드 — Reverse Proxy: 외부 인바운드의 유일한 진입점으로 Public Subnet에 Reverse Proxy(Nginx) EC2를 두고, 사용자 요청을 worker의 Ingress NodePort로 포워딩했다. NodePort는 Reverse Proxy SG 출처로만 열어 외부에서 worker의 NodePort로 직접 들어오는 걸 막았다.







