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

3분 분량
0

kubectl 명령을 실행할 수 없습니다. 또한 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 엔드포인트 액세스 설정을 공개에서 비공개로 변경했습니다. 이제 클러스터가 실패 상태에서 멈췄습니다.

간략한 설명

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

  • 새 클러스터 또는 기존 클러스터에서 kubectl 명령을 실행할 수 없습니다.
  • 엔드포인트 액세스를 공개에서 비공개로 변경한 후 클러스터에서 kubectl 명령을 실행할 수 없습니다.
  • 클러스터가 실패 상태에 머물러 있으며 엔드포인트 액세스 설정을 공개에서 비공개로 변경할 수 없습니다.

참고: Kubernetes API 서버 엔드포인트에 대한 액세스를 설정하려면 클러스터 엔드포인트 액세스 수정을 참조합니다.

해결 방법


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

1.    클러스터와 연결하기 위해 올바른 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 엔드포인트를 APISERVER 엔드포인트로 바꿉니다.

API 서버 엔드포인트에 대한 공개 액세스를 제한했는지 확인합니다.

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

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

엔드포인트 액세스를 공개에서 비공개로 변경한 후에는 클러스터에서 kubectl 명령을 실행할 수 없습니다.

1.    바스티온 호스트 또는 피어링된 VPC, AWS 다이렉트 커넥트 또는 VPN과 같은 연결된 네트워크를 사용하여 Amazon EKS API 엔드포인트에 액세스하고 있는지 확인합니다.

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

2.    보안 그룹 또는 네트워크 액세스 제어 목록이 API 호출을 차단하고 있는지 확인합니다.

피어링된 VPC를 통해 클러스터에 액세스하는 경우, 컨트롤 플레인 보안 그룹이 포트 443의 피어링된 VPC에서 컨트롤 플랜 보안 그룹으로의 액세스를 허용하는지 확인합니다. 또한 피어링된 VPC가 서로 포트 53을 개방했는지 확인합니다. 포트 53은 DNS 확인에 사용됩니다.

클러스터가 실패 상태에 있으며 엔드포인트 액세스 설정을 공개에서 비공개로 변경할 수 없습니다.

클러스터가 실패 상태일 수 있는데, 이는 AWS IAM(신원 및 액세스 관리)의 권한 문제 때문일 수 있습니다.

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

**참고:**작업이 차단되지 않은 경우 사용자 계정에 API 호출을 차단하고 클러스터를 실패하게 만드는 AWS Organizations 정책이 있는지 확인합니다.

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

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


관련 정보

Amazon EKS 보안 그룹 요구 사항 및 고려 사항

비공개 엔드포인트를 사용하는 EKS 클러스터에 대한 DNS 확인

Amazon EKS를 사용하여 Kubernetes 클러스터 공개 엔드포인트에 대한 네트워크 액세스 제한

Amazon EKS 클러스터 엔드포인트 액세스 제어

AWS 공식
AWS 공식업데이트됨 2년 전