AWS 커스텀 골든 이미지(Custom AMI)로
EKS 노드 배포하기

안녕하세요. EKS 운영을 하다 보면 보안 팀에서 "모든 노드는 보안 에이전트가 설치된 상태로 뜨게 해주세요"라는 요청을 받을 때가 있습니다. 이럴 때마다 부트스트랩 스크립트(UserData)로 설치하는 건 부팅 시간이 길어지고 불안정할 수 있죠.

‍

가장 깔끔한 해결책은 필요한 설정이 다 구워진 **Custom Golden Image (AMI)**를 만들고, 이걸 EKS 노드 그룹이 쓰도록 만드는 것입니다.

‍

오늘은 Golden AMI를 생성하고 eksctl 설정 파일에 한 줄 추가하여 이를 배포하는 전체 과정을 정리해 드립니다.

‍

1. 사전 준비물 (Prerequisites)

시작 전에 아래 항목들이 준비되어 있는지 체크해 주세요.

‍

AWS CLI & eksctl & kubectl: 설치된 로컬 PC

권한: EC2와 EKS를 생성할 수 있는 IAM User 또는 Role

네트워크: VPC 및 Subnet ID (기존 VPC를 재사용할 경우)

SSH 키 페어: EC2 접속용

‍

2. 골든 이미지(Golden AMI) 굽기

먼저, 우리만의 이미지를 만듭니다.

베이스 이미지 선택:

AWS 콘솔 > EC2 > AMI 메뉴에서 amazon-eks-node를 검색합니다.

사용하려는 K8s 버전에 맞는 최신 이미지를 선택하세요.

‍

EC2 실행 및 커스터마이징:

위 이미지를 선택해 EC2를 하나 띄웁니다.

SSH로 접속해서 필요한 작업(보안 패치, 모니터링 에이전트 설치, 커널 파라미터 튜닝 등)을 수행합니다.

‍

이미지 생성 (Baking):

작업이 끝난 EC2를 선택하고 **[작업] > [이미지 및 템플릿] > [이미지 생성]**을 클릭합니다.

이미지가 구워질 때까지 기다립니다. (Status: Available)

‍

AMI ID 확보:

생성된 이미지의 ID(예: ami-05c34bb0196f08639)를 복사해 둡니다.

‍

3. eksctl 설정 파일 작성 (YAML)

이제 eksctl에게 "기본 이미지 말고 내가 만든 거 써!"라고 알려줄 차례입니다. test-eks.yaml 파일을 만들고 아래 내용을 작성합니다.

핵심은 managedNodeGroups 섹션의 ami 필드입니다.

‍

apiVersion: eksctl.io/v1alpha5

kind: ClusterConfig

metadata: name: test-custom-ami-cluster region: ap-northeast-2 version: "1.34" # [주의] 베이스 이미지의 K8s 버전과 맞춰주세요 vpc: id: "vpc-06232131...." # 기존 VPC ID 입력 subnets: public: ap-northeast-2a: { id: "subnet-0c5dae..." } ap-northeast-2c: { id: "subnet-0d70be..." } private: ap-northeast-2a: { id: "subnet-084ef3..." } ap-northeast-2c: { id: "subnet-086761..." } managedNodeGroups: - name: test-ng-custom-ami instanceType: t3.medium minSize: 1 maxSize: 1 desiredCapacity: 1 # [핵심] 여기에 커스텀 AMI 정보를 넣습니다. ami: "ami-05c34bb0...." amiFamily: AmazonLinux2023 # OS 계열 명시 (부트스트랩 자동화에 필수) ssh: allow: true publicKeyName: mc-aws # EC2 Key Pair 이름 # 필요한 권한 추가 iam: withAddonPolicies: imageBuilder: true autoScaler: true cloudWatch: true

‍

4. 배포 실행 (Deployment)

설정 파일이 준비되었으니 배포 명령을 날립니다. 상황에 따라 명령어가 다릅니다.

‍

Case A: 클러스터를 새로 만드는 경우

eksctl create cluster -f test-eks.yaml

‍

Case B: 이미 클러스터는 있고, 노드 그룹만 추가하는 경우

eksctl create nodegroup -f test-eks.yaml

‍

5. 검증 (Verification)

배포가 완료되었다면 우리가 만든 이미지가 정말 적용됐는지 확인해 봐야겠죠?

1) kubectl로 노드 상태 확인

터미널에서 아래 명령어를 실행합니다.

‍

kubectl get nodes -o wide

‍

체크 리스트:

[ ] STATUS: Ready 상태인가?

[ ] OS-IMAGE: Amazon Linux 2023 (또는 지정한 Family)으로 뜨는가?

[ ] KERNEL-VERSION: 내가 만든 Golden AMI의 커널 버전과 일치하는가?

2) AWS 콘솔에서 확인 (가장 확실함)

EC2 콘솔 > [인스턴스] 메뉴로 이동합니다.

방금 생성된 EKS 노드를 선택합니다.

하단 상세 정보 탭에서 AMI ID를 확인합니다.

YAML 파일에 적었던 그 ID(ami-05c34bb...)가 맞다면 성공입니다!

마치며

생각보다 간단하죠? eksctl 설정 파일에 ami ID 한 줄만 추가하면, 복잡한 부트스트랩 과정 없이 안전하고 표준화된 노드를 손쉽게 배포할 수 있습니다.

‍

보안 규정 준수(Compliance)를 위해 매번 패치 작업을 반복하고 계셨다면, 이제 Golden AMI 파이프라인을 구축해서 배포 시간을 획기적으로 줄여보세요.

  • 사전 준비물 (Prerequisites)

  • 골든 이미지(Golden AMI) 굽기

  • eksctl 설정 파일 작성 (YAML)

  • 배포 실행 (Deployment)

  • 검증 (Verification)

관련 키워드
클라우드
관련 키워드
클라우드
관련 콘텐츠
Tech Guide
클라우드
보안
AWS
Tech Guide
Tech Guide
클라우드
보안
AWS
Tech Guide
Tech Guide
클라우드
AWS
Tech Guide