개요
AWS EKS 클러스터에 Helm Chart를 사용하여 OpenSearch를 배포하는 과정에서 AL2023(Amazon Linux 2023)의 IMDSv2 설정으로 인해 발생한 문제와 해결 과정을 공유한다. 이 글은 나와 비슷한 문제에 직면한 다른 삽질러들에게 도움이 되기를 바란다.
배포 환경
- AWS EKS 클러스터
- Amazon Linux 2023 기반 워커 노드
- Helm Chart를 통한 OpenSearch 배포
- 로컬 터미널에 EKS 클러스터 연동 완료
배포 절차
1. 프로젝트 레포지토리 클론
git clone https://github.com/your-org/ssok-monitoring.git
cd ssok-monitoring/logs/opensearch
2. Helm을 사용하여 OpenSearch 배포
helm install opensearch opensearch/opensearch -f opensearch-values.yaml -n logging
3. 배포 상태 확인
kubectl get pods -n logging
문제 상황
Helm으로 OpenSearch를 배포했지만 Pod가 Pending 상태에서 진행되지 않았다.
배포 확인 명령어를 실행했을 때 다음과 같은 상태가 계속 유지되었다.
kubectl get pods -n logging
NAME READY STATUS RESTARTS AGE
opensearch-cluster-master-0 0/1 Pending 0 5m
원인 분석
1. PVC 상태 확인
먼저 OpenSearch의 Pod가 Pending 상태인 이유를 파악하기 위해 PVC(Persistent Volume Claim) 상태를 확인했다.
kubectl get pvc -n logging
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
opensearch-cluster-master-opensearch-cluster-master-0 Pending gp2 2m23s
PVC도 Pending 상태. 더 자세한 정보를 얻기 위해 PVC를 describe 했다.
kubectl describe pvc opensearch-cluster-master-opensearch-cluster-master-0 -n logging
결과에서 다음과 같은 오류 메시지를 확인할 수 있었다.
failed to provision volume with StorageClass "gp2": rpc error:
code = Internal desc = Could not create volume "pvc-411a6b3d-3db9-4201-a8be-a41356bc7c90":
could not create volume in EC2: operation error EC2: CreateVolume,
get identity: get credentials: failed to refresh cached credentials,
no EC2 IMDS role found, operation error ec2imds: GetMetadata,
request canceled, context deadline exceeded
2. EBS CSI 드라이버 확인
오류 메시지를 분석한 결과, EBS CSI 드라이버가 EC2 메타데이터 서비스(IMDS)에 접근하지 못하고 있음을 확인했다.
드라이버가 설치되어 있는지 확인
kubectl get pods -n kube-system | grep ebs-csi
결과가 나오지 않아 EBS CSI 드라이버가 설치되어있지 않아있었음을 확인.
EBS CSI 드라이버가 설치되어 있지 않았기 때문에 드라이버를 설치했다.
eksctl create addon --name aws-ebs-csi-driver --cluster <your-cluster-name> --force
드라이버 설치 후 확인
kubectl get pods -n kube-system | grep ebs
ebs-csi-controller-9df957f45-hncp5 0/6 ContainerCreating 0 1s
ebs-csi-controller-9df957f45-pv6hb 0/6 ContainerCreating 0 0s
ebs-csi-node-gmms8 0/3 ContainerCreating 0 1s
ebs-csi-node-tnf8n 0/3 ContainerCreating 0 1s
ebs-csi-node-v7wfn 0/3 ContainerCreating 0 1s
3. IAM 권한 추가
EBS CSI 드라이버가 설치되었지만, 여전히 PVC가 Pending 상태였다.
다시 PVC 상태를 확인했더니 비슷한 오류가 계속 발생했다.
failed to provision volume with StorageClass "gp2":
rpc error: code = Internal desc = Could not create volume... no EC2 IMDS role found
EBS CSI 드라이버가 EBS 볼륨을 생성하고 관리할 수 있는 IAM 권한이 없었기 때문에
EKS 워커 노드의 IAM 역할에 AmazonEBSCSIDriverPolicy 정책을 추가했다.
4. IMDSv2 문제 발견
IAM 권한 추가 후에도 문제가 지속되었고, 다음 오류 메시지를 계속 확인할 수 있었다
operation error ec2imds: GetMetadata, request canceled, context deadline exceeded
이 시점에서 AL2023의 IMDSv2 설정과 관련된 문제임을 인식했다.
근본 원인 : AL2023과 IMDSv2
AWS EKS Cluster를 생성하고, 노드 그룹을 생성할때 인스턴스 유형을 Ubuntu로 설정하고 있었지만, EKS에 호환이 높은 Linux 2023 사용이 권장되고 있었다. (애초에 Ubuntu가 없었다)
Amazon Linux 2023(AL2023)은 기본적으로 보안 강화를 위해 IMDSv2만 사용하도록 설정되어 있다(IMDSv2=필수).
IMDSv2는 세션 기반의 인증 방식으로, 보안성이 향상되었지만 기본 설정에서 문제가 발생했다.
IMDSv2의 주요 특징:
- 세션 기반 접근: 토큰을 요청하고 이를 사용해야 메타데이터에 접근 가능
- 응답 홉 제한(hop limit): 기본값은 1로, IP 프로토콜 레벨에서 응답이 통과할 수 있는 네트워크 홉의 수를 제한
문제의 핵심: 컨테이너화된 환경(Kubernetes)에서는 파드가 호스트와 별도의 네트워크 네임스페이스에서 실행되기 때문에, IMDS에 접근하기 위해서는 최소 2개의 네트워크 홉이 필요했다. 그러나 AL2023의 기본 홉 제한은 1이어서, EBS CSI 드라이버가 EC2 메타데이터에 접근할 수 없었다.
해결 방법
EC2 인스턴스의 메타데이터 옵션을 수정하여 문제를 해결했다.
ec2 인스턴스 - 작업 - 메타데이터 옵션 수정 - IMDSv2 : 옵션 선택

참고자료
- Amazon Linux 2023 IMDSv2 문서
- 인스턴스 메타데이터 서비스 사용하기
- IMDSv2 전환 가이드
- EBS CSI 드라이버 설치 가이드
- EBS CSI 드라이버 FAQ
- Amazon EBS로 Kubernetes 볼륨 저장하기
- Amazon EBS CSI 드라이버 IAM 역할 생성
- Amazon EKS, EC2 인스턴스 메타데이터 서비스 v2 지원
- Amazon EKS v1.30에서 IMDS hop limit 구성
- 기존 인스턴스의 인스턴스 메타데이터 옵션 수정
- modify-instance-metadata-options AWS CLI 명령어 레퍼런스
- IMDSv2의 이점 활용 및 AWS 인프라에서 IMDSv1 비활성화
- Amazon EKS 클러스터 보안 모범 사례