안녕하세요. 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 필드입니다.
4. 배포 실행 (Deployment)
설정 파일이 준비되었으니 배포 명령을 날립니다. 상황에 따라 명령어가 다릅니다.
Case A: 클러스터를 새로 만드는 경우
Case B: 이미 클러스터는 있고, 노드 그룹만 추가하는 경우
5. 검증 (Verification)
배포가 완료되었다면 우리가 만든 이미지가 정말 적용됐는지 확인해 봐야겠죠?
1) kubectl로 노드 상태 확인
터미널에서 아래 명령어를 실행합니다.
체크 리스트:
[ ] 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 파이프라인을 구축해서 배포 시간을 획기적으로 줄여보세요.
