본문 바로가기
Kubernetes

EKS 클러스터 인증 문제 해결하기 - IAM Authenticator

by Antraxmin 2024. 12. 8.

EKS 클러스터에 연결하려고 kubectl get nodes 명령을 실행했을 때, 아래와 같은 에러 메시지가 출력되었다. 

E1203 15:24:22.135956    5061 memcache.go:265] couldn't get current server API group list: the server has asked for the client to provide credentials
...
error: You must be logged in to the server (the server has asked for the client to provide credentials)

 

해당 오류는 kubectl이 Kubernetes API 서버와 통신하는 데 필요한 인증 정보를 제공하지 못했다는 것을 의미한다. EKS 클러스터는 AWS IAM Authenticator를 통해 요청을 인증하기 때문에, 이 문제가 발생하는 원인은 주로 다음 세 가지로 좁혀볼 수 있다. 

  1. AWS CLI Authenticator
  2. IAM 권한
  3. kubectl 설정 및 kubeconfig 파일

각 원인에 대해 하나씩 확인하며 문제를 해결해보고자 했다. 

 

1. AWS CLI 인증 확인

일단 AWS CLI가 올바르게 인증되었는지 확인하기 위해 아래 명령을 실행했다. 

aws sts get-caller-identity

명령 결과는 올바른 AWS 계정과 IAM 사용자를 반환했으므로, AWS CLI 인증에는 문제가 없음을 확인할 수 있었다. 

 

2. IAM 사용자 또는 역할에 필요한 권한 확인

EKS 클러스터에 접근하려면 IAM 사용자 또는 역할에 아래 정책이 포함되어야 한다.

  • AmazonEKSClusterPolicy
  • AmazonEKSWorkerNodePolicy

웹 콘솔에서 확인한 IAM 정책

IAM 콘솔에서 사용자의 정책을 확인한 결과, 필요한 권한이 모두 포함되어 있었다. 따라서 IAM 권한 문제도 원인이 아니었다. 

 

3. kubectl 설정 및 kubeconfig 파일 확인

EKS 클러스터를 설정하기 전에 로컬에서 Minikube를 사용한 적이 있었기에, kubeconfig 파일이 올바르게 구성되지 않았을 가능성을 의심해봤다. 따라서 아래 명령을 통해 현재 kubectl 컨텍스트를 확인했다. 

kubectl config current-context

kubeconfig 파일 업데이트

kubeconfig 파일을 재생성하고 kubectl 컨텍스트를 확인해봤지만, 컨텍스트가 EKS 클러스터를 올바르게 가리키고 있는 것으로 보였다. 클러스터 상태 역시 활성화되어 있었다. 그러나 문제는 여전히 해결되지 않았다. kubectl 명령을 여러번 다시 실행했지만, 동일한 오류가 계속 발생했다. 

 

4. AWS IAM Authenticator 문제 해결

문제를 해결하기 위해 추가적인 로그를 확인한 결과, 예상치 못한 원인은 바로 AWS IAM Authenticator에서 발생했다는 것을 알게 되었다. AWS IAM Authenticator는 Kubernetes의 RBAC 권한을 AWS IAM을 통해 제어할 수 있도록 해주는 도구인데, EKS 클러스터와 통신하기 위해 올바르게 설정되어 있어야 정상적으로 동작한다. 

 

분명 중간에 Authenticator를 설치했던 것으로 기억하는데, 설치 과정 자체에서는 문제가 없어서 의심하지 않고 있었다. 관련 파일의 버전과 상태를 확인하기 위해 명령을 실행하였는데.. ???

error라는 익숙한 단어가 보였다. 구글링해보니 실행 가능한 바이너리가 아닌 다른 형식으로 다운로드된 것 같다고 한다. (대체 뭘 다운로드받은거지) 일단 관련된 파일을 모두 지우고 최신 바이너리를 다운로드받았다.

curl -o aws-iam-authenticator https://github.com/kubernetes-sigs/aws-iam-authenticator/releases/latest/download/aws-iam-authenticator-darwin-amd64
chmod +x aws-iam-authenticator
mv aws-iam-authenticator /usr/local/bin/
aws-iam-authenticator help

 

명령 결과가 정상적으로 출력되는 것을 확인했다.

다시 kubectl get nodes 명령을 실행했을 때 정상적으로 클러스터 노드 정보를 가져올 수 있었다. 

 


생각보다 복잡한 오류가 아니어서 조금 현타오긴 했지만.. 원인을 찾아내서 다행이다.