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를 통해 요청을 인증하기 때문에, 이 문제가 발생하는 원인은 주로 다음 세 가지로 좁혀볼 수 있다.
- AWS CLI Authenticator
- IAM 권한
- kubectl 설정 및 kubeconfig 파일
각 원인에 대해 하나씩 확인하며 문제를 해결해보고자 했다.
1. AWS CLI 인증 확인
일단 AWS CLI가 올바르게 인증되었는지 확인하기 위해 아래 명령을 실행했다.
aws sts get-caller-identity
명령 결과는 올바른 AWS 계정과 IAM 사용자를 반환했으므로, AWS CLI 인증에는 문제가 없음을 확인할 수 있었다.
2. IAM 사용자 또는 역할에 필요한 권한 확인
EKS 클러스터에 접근하려면 IAM 사용자 또는 역할에 아래 정책이 포함되어야 한다.
- AmazonEKSClusterPolicy
- AmazonEKSWorkerNodePolicy
IAM 콘솔에서 사용자의 정책을 확인한 결과, 필요한 권한이 모두 포함되어 있었다. 따라서 IAM 권한 문제도 원인이 아니었다.
3. kubectl 설정 및 kubeconfig 파일 확인
EKS 클러스터를 설정하기 전에 로컬에서 Minikube를 사용한 적이 있었기에, kubeconfig 파일이 올바르게 구성되지 않았을 가능성을 의심해봤다. 따라서 아래 명령을 통해 현재 kubectl 컨텍스트를 확인했다.
kubectl config current-context
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 명령을 실행했을 때 정상적으로 클러스터 노드 정보를 가져올 수 있었다.
'Kubernetes' 카테고리의 다른 글
Kubernetes 클러스터의 OIDC 제공자를 AWS 계정과 연결하기 (1) | 2024.12.09 |
---|---|
멀티스테이지 빌드를 통한 EKS와 Docker 아키텍처 불일치 오류 해결 (0) | 2024.12.09 |
Kubernetes Service의 EXTERNAL-IP 미할당 문제 해결하기 - NodePort와 LoadBalancer는 어떤 차이가 있을까? (0) | 2024.12.09 |
EKS 클러스터에서 Deployment 및 Service 생성 문제 해결하기 (1) | 2024.12.08 |