EKS 노드에서 삭제된 이미지를 ECR로 복구하는 방법

문제 상황: ECR에서 이미지가 삭제된 경우
개발 환경에서 사용 중인 이미지가 ECR에서 삭제되어, 파이프라인 재빌드도 불가능할 때가 있습니다. 그 이미지가 남아있는 유일한 곳이 EKS 노드라면, 직접 노드에서 이미지를 복구해야 합니다.
준비 환경 요약
아래 환경에서 작업을 진행합니다.
EKS 클러스터: 1.30.3
Kubectl: 1.30.1
Containerd: 1.7.11
Runc: 1.1.11
EKS 노드에 접속하는 방법
EKS 노드에 원격으로 접근하려면 AWS 콘솔에서 세션 매니저를 사용하면 편리합니다. 인스턴스의 connect 옵션을 누르면 바로 접속할 수 있습니다.
노드에서 이미지 확인하기
관리자로 권한을 얻은 후, nerdctl 명령어로 노드에 저장된 이미지를 조회할 수 있습니다.
sudo -s
nerdctl images
원하는 이미지를 찾으면, 해당 태그와 레포지토리 주소를 확인하세요.
ECR로 이미지 푸시 시 문제 및 해결법
이미지 복구를 위한 nerdctl push 명령을 실행하면 에러가 발생할 수 있습니다.
첫 에러 메시지는 “failed to create a tmp single-platform image”. → 해결: 명령에
--all-platforms
옵션 추가
nerdctl push [이미지명] --all-platforms
이후 “401 Unauthorized” 에러 발생 → 이 경우는 ECR 인증이 안 된 것. 다음 명령어로 로그인해야 합니다.
aws ecr get-login-password --region eu-west-2 | nerdctl login --username AWS --password-stdin [ECR 주소]
또 “403 Forbidden” 에러가 뜬다면 → 노드의 IAM 역할에
ecr:PutImage
권한을 임시로 추가해 주세요.
권한과 인증 이슈 정리
이미지를 다시 푸시하려면 반드시 ECR에 인증과 적절한 권한이 필요합니다.
ECR 인증: aws ecr get-login-password
이미지 푸시 권한: IAM에서
ecr:PutImage
정책 필요
전체 복구 순서 요약
EKS 노드에 접속
nerdctl로 이미지 확인
ECR 인증 및 권한 처리
--all-platforms
플래그를 이용해 이미지 푸시이미지를 성공적으로 복구!
자주 사용하는 명령어 모음
복구 작업에서 사용한 주요 명령어는 다음과 같습니다.
nerdctl images
nerdctl push [이미지명] --all-platforms
aws ecr get-login-password --region [리전] | nerdctl login --username AWS --password-stdin [ECR 주소]
빠른 이미지 복구 팁
노드에 남아있는 이미지가 마지막 희망일 때, nerdctl과 몇 가지 권한 설정이면 누구나 이미지를 ECR로 복구할 수 있습니다. IAM 정책 추가와 인증을 잊지 마세요!
출처 : Amazon EKS- recover deleted images from EKS node to ECR repository | by Marcin Cuber | Medium