Amazon EKS 클러스터의 API 서버 엔드포인트 관련 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 12월 10일

kubectl 명령을 실행할 수 없습니다. 또한 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 엔드포인트 액세스 설정을 퍼블릭에서 프라이빗으로 변경했습니다. 그러자 내 클러스터가 실패 상태로 응답하지 않습니다.

간략한 설명

Kubernetes API 서버 엔드포인트에 문제가 있는 경우 다음 단원 중 하나의 단계를 완료합니다.

  • 새 클러스터 또는 기존 클러스터에 대해 kubectl 명령을 실행할 수 없습니다.
  • 엔드포인트 액세스를 퍼블릭에서 프라이빗으로 변경한 후 클러스터에 대해 kubectl 명령을 실행할 수 없습니다.
  • 클러스터가 실패 상태로 응답하지 않고 엔드포인트 액세스 설정을 퍼블릭에서 프라이빗으로 변경할 수 없습니다.

참고: Kubernetes API 서버 엔드포인트에 대한 액세스를 설정하려면 Amazon EKS의 API 서버에 대한 퍼블릭 및 프라이빗 액세스를 설정하려면 어떻게 해야 합니까?를 참조하세요.

해결 방법

새 클러스터 또는 기존 클러스터에 대해 kubectl 명령을 실행할 수 없습니다.

1.    클러스터에 연결하는 데 올바른 kubeconfig 파일을 사용하고 있는지 확인합니다. 자세한 내용은 kubeconfig 파일을 사용하여 클러스터 액세스 구성(쿠버네티스 웹 사이트의)을 참조하세요.

2.    각 클러스터에서 kubeconfig 파일의 여러 컨텍스트를 확인합니다.

출력 예:

kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Cluster name    Server
new200.us-east-2.eksctl.io       https://D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com

기존 kubeconfig 파일에 올바른 클러스터 세부 정보가 없으면 다음 명령을 사용하여 올바른 세부 정보가 포함된 파일을 생성합니다.

aws eks update-kubeconfig --name cluster name --region region

참고: cluster name을 클러스터 이름으로 바꾸고 region을 AWS 리전으로 바꿉니다.

3.    포트 443에서 텔넷을 사용하여 디바이스에서의 API 서버 엔드포인트 연결을 검증합니다.

출력 예:

echo exit | telnet D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com 443
Trying 18.224.160.210...
Connected to D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.

텔넷이 작동하지 않으면 다음 단계를 사용하여 문제를 해결하세요.

DNS 확인자 확인

API 서버가 확인하지 못하면 DNS 확인자에 문제가 있는 것입니다.

kubectl 명령이 실패한 동일한 디바이스에서 다음 명령을 실행합니다.

nslookup APISERVER endpoint

참고: APISERVER endpoint를 API 서버 엔드포인트로 바꿉니다.

API 서버 엔드포인트에 대한 퍼블릭 액세스를 제한했는지 확인

퍼블릭 API 서버 엔드포인트에 대한 액세스를 제한하기 위해 CIDR 블록을 지정한 경우 프라이빗 엔드포인트 액세스도 활성화하는 것이 좋습니다.

4.    API 서버 엔드포인트 액세스 동작을 확인합니다. 클러스터 엔드포인트 액세스 수정을 참조하세요.

엔드포인트 액세스를 퍼블릭에서 프라이빗으로 변경한 후 클러스터에서 kubectl 명령을 실행할 수 없습니다.

1.    배스천 호스트 또는 연결된 네트워크(예: 피어링된 VPC, AWS Direct Connect 또는 VPN)를 사용하여 Amazon EKS API 엔드포인트에 액세스하고 있는지 확인합니다.

참고: 프라이빗 액세스 모드에서는 클러스터의 VPC 내에서만 Amazon EKS API 엔드포인트에 액세스할 수 있습니다.

2.    보안 그룹 또는 네트워크 액세스 제어 목록으로 인해 API 호출이 차단되는지 여부를 확인합니다.

피어링된 VPC에서 클러스터에 액세스하는 경우, 제어 영역 보안 그룹이 피어링된 VPC에서 제어 영역 보안 그룹으로의 포트 443을 통한 액세스를 허용하는지 확인합니다. 또한 피어링된 VPC 간에 포트 53이 서로 열려 있는지 확인합니다. 포트 53은 DNS 확인에 사용됩니다.

클러스터가 실패 상태로 응답하지 않고 엔드포인트 액세스 설정을 퍼블릭에서 프라이빗으로 변경할 수 없습니다.

AWS Identity and Access Management(IAM)의 권한 문제로 인해 클러스터가 실패 상태일 수 있습니다.

1.    사용자의 IAM 역할에 AssociateVPCWithHostedZone 작업을 수행할 권한이 있는지 확인합니다.

참고: 작업이 차단되지 않은 경우 API 호출을 차단하고 클러스터가 실패하도록 하는 AWS Organizations 정책이 사용자의 계정에 적용되는지 여부를 확인합니다.

2.    IAM 사용자의 권한이 계정 위의 어떤 수준에서도 암시적 또는 명시적으로 차단되지 않았는지 확인합니다.

참고: IAM 사용자 권한은 Allow 정책 문에 포함되어 있지 않으면 암시적으로 차단됩니다. Deny 정책 문에 포함된 경우에는 명시적으로 차단됩니다. 계정 관리자가 */* 권한이 부여된 AdministratorAccess IAM 정책을 사용자에게 연결하더라도 권한이 차단됩니다. AWS Organizations 정책의 권한은 IAM 엔터티에 대한 권한보다 우선합니다.