[0] 아키텍쳐 설계
ㄴ ANSIBLE 셋업 부
| 지금 EC2 방식 | EKS 방식 |
| Ansible로 Nginx 설치·화면 복사 | Web 이미지에 Nginx·HTML·JS·설정 포함 |
| Java 설치·JAR 복사·systemd 등록 | App 이미지에 Java 실행 환경·JAR 포함 |
| app.env 파일 배포 | 실행 시 환경변수·Secret으로 주입 |
| 서버별 설치·재시작 | Deployment로 Pod 생성·업데이트 |
ㄴ 배포 흐름
로컬 또는 GitHub Actions
│
├─ Web 이미지 빌드
└─ App 이미지 빌드
↓
ECR에 이미지 Push
↓
Kubernetes Deployment에 이미지 지정
↓
EKS에서 이미지를 받아 Pod 실행
Nginx의 프록시 대상도 App의 사설 IP 목록 대신 app-service:8080 같은 Kubernetes Service 이름으로 변경하는 거야.
Bastion은 필수는 아니야. EKS API에 접근할 네트워크 경로와 권한이 있는 로컬 PC나 배포 Runner에서 kubectl·Helm으로 배포하면 돼. DB 비밀번호는 이미지에 넣지 않고 실행 시 전달하고.
ㄴ 접속, 관리
② Pod는 보통 SSH 대신 kubectl exec
EKS 접속 설정과 권한이 있는 PC에서 실행하면 돼. 먼저 노드에 SSH로 들어갈 필요는 없어.
# Pod 목록
kubectl get pods -n todo
# 지정한 Pod의 컨테이너 셸 열기
kubectl exec -it -n todo POD이름 -- /bin/sh
# 접속하지 않고 로그 확인
kubectl logs -n todo POD이름
todo는 예시 네임스페이스야. 컨테이너가 여러 개라면 -c 컨테이너이름을 추가해. 셸이 없는 이미지에서는 /bin/sh 접속이 안 되므로 별도 디버깅 컨테이너를 사용해. Kubernetes 문서
Pod 내부 접속은 진단용으로 쓰고, 실제 변경은 이미지나 배포 설정에 반영하는 게 좋아. 내부에서 직접 수정한 파일은 컨테이너가 재생성되면 사라질 수 있어.
1. 준비
ㄴ 디렉토리 설계
aws-eks-project/
├─ terraform/ # AWS 인프라
├─ modules/ # 재사용 모듈 + EKS·ECR 모듈
├─ services/
│ ├─ web/ # 기존 화면 + Dockerfile
│ └─ app/ # 기존 Spring Boot + Dockerfile
├─ kubernetes/ # Deployment·Service·Ingress 등
└─ HANDOFF.md # 기존 구성·검증 결과·EKS 전환 계획
ㄴ GITHUB 연동
ㄴ 기존 모듈 재사용
2. 디렉토리
ㄴ module
ㄴ DB
ㄴ ECR
ㄴ EKS
ㄴ Network
ㄴ Security
ㄴ Services
ㄴ Kubernetes
3. 실행
ㄴ 인프라 프로비저닝
ㄴ k8s 접속 내 로컬 IP
ㄴ k8s 접근 권한 arn role
| IAM 정책의 eks:* | EKS 클러스터 생성·조회·삭제, 접근 권한 설정 |
| EKS Access Policy 또는 Kubernetes RBAC | 클러스터 안의 Pod·Deployment·Service 조회·생성·삭제 |
네 IAM 사용자 또는 Role
↓ EKS Access Entry로 등록
AmazonEKSClusterAdminPolicy 연결
↓
kubectl로 클러스터 전체 관리
ㄴ DB PW
ㄴ 배포
ㄴ 도구 설치
| 도구 | 용도 |
| Docker Desktop | Web/App 이미지 빌드 → ECR push |
| kubectl | EKS에 Deployment·Service·Ingress 적용 |
| Helm | AWS Load Balancer Controller 설치 |
| eksctl | 작성한 가이드에서 Controller용 IAM 권한 연결 |



ㄴ 이미지 빌드
cd C:\terraform\aws-eks-3tier
docker build --platform linux/amd64 -t todo-web:v1 ./services/web
docker build --platform linux/amd64 -t todo-app:v1 ./services/app
docker image ls

ㄴ EKS 노드 연결
aws eks update-kubeconfig --region ap-northeast-2 --name eks-3tier-dev
kubectl get nodes

ㄴ ECR 푸쉬
# ECR 주소 가져오기
cd /drives/c/terraform/aws-eks-3tier
APP_REPO=$(terraform -chdir=terraform output -raw app_repository_url)
WEB_REPO=$(terraform -chdir=terraform output -raw web_repository_url)
REGISTRY="${APP_REPO%%/*}"
echo "$APP_REPO"
echo "$WEB_REPO"
# ECR 로그인
aws ecr get-login-password --region ap-northeast-2 \
| docker login --username AWS --password-stdin "$REGISTRY"
# 이미지 태그 지정 후 업로드
docker tag todo-app:v1 "${APP_REPO}:v1"
docker tag todo-web:v1 "${WEB_REPO}:v1"
docker push "${APP_REPO}:v1"
docker push "${WEB_REPO}:v1"


ㄴ 로드밸런서 컨트롤러
ㄴ 디렉토리
modules/
└─ alb_controller/
├─ main.tf # IAM Role·정책, ServiceAccount, Helm 설치
├─ variables.tf
├─ outputs.tf
└─ locals.tf
addons/
├─ main.tf # alb_controller 모듈 호출
├─ variables.tf
├─ outputs.tf
├─ locals.tf
└─ versions.tf # AWS·Helm 등 Provider 설정
ㄴ 실행
terraform -chdir=addons init
terraform -chdir=addons plan
terraform -chdir=addons apply
ㄴ 체크
# 컨트롤러 정상실행 확인
kubectl rollout status deployment/aws-load-balancer-controller -n kube-system --timeout=180s
ㄴ DB연결 / 배포 / Ingress 적용시 자동 생성됨
kubectl apply -f kubernetes/ingress/ingress.yml
kubectl get ingress -n todo -w
ㄴ DB연결
ㄴ env파일 준비
# 복사
Copy-Item kubernetes/app/app.env.example kubernetes/app/app.env
terraform -chdir=terraform output -raw db_address
# app.env
DB_URL <- endpoint 넣어준다
DB_USERNAME
DB_PASSWORD <- PW 넣어준다
ㄴ Kubernetes Secret 등록
kubectl apply -f kubernetes/namespace.yml
kubectl create secret generic app-db -n todo
\ --from-env-file=kubernetes/app/app.env
\ --dry-run=client -o yaml | kubectl apply -f -
