kubectl 명령을 실행할 수 없습니다. 또한 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 엔드포인트 액세스 설정을 공개에서 비공개로 변경했습니다. 이제 클러스터가 실패 상태에서 멈췄습니다.
간략한 설명
문제에 따라 다음 섹션 중 하나에 나와 있는 단계를 완료하세요.
참고: Kubernetes API 서버 엔드포인트에 대한 액세스를 설정하려면 클러스터 엔드포인트 액세스 수정을 참조합니다.
해결 방법
새 클러스터 또는 기존 클러스터에서 kubectl 명령을 실행할 수 없습니다.
kubeconfig 파일이 클러스터에 연결되는지 확인
다음 단계를 완료합니다.
- 클러스터와 연결할 때 올바른 kubeconfig 파일을 사용하는지 확인합니다. 자세한 내용을 보려면 Kubernetes 웹사이트에서 kubeconfig 파일을 사용하여 클러스터 액세스 구성하기를 참조하세요.
- 각 클러스터에서 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 리전으로 바꿉니다.
- 포트 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 블록을 지정한 경우, 비공개 엔드포인트 액세스도 활성화하는 것이 좋습니다.
API 서버 엔드포인트 액세스 동작을 확인합니다. 클러스터 엔드포인트 액세스 수정을 참조합니다.
엔드포인트 액세스를 공개에서 비공개로 변경한 후에는 클러스터에서 kubectl 명령을 실행할 수 없습니다.
이 문제를 해결하려면, 다음 단계를 완료하세요.
- 바스티온 호스트 또는 피어링된 Virtual Private Cloud(VPC), AWS Direct Connect 또는 VPN과 같은 연결된 네트워크를 사용하여 Amazon EKS API 엔드포인트에 액세스하는지 확인합니다.
참고: 프라이빗 액세스 모드에서는 클러스터의 VPC 또는 연결된 네트워크 내에서만 Amazon EKS API 엔드포인트에 액세스할 수 있습니다.
- 보안 그룹 또는 네트워크 액세스 제어 목록이 Kubernetes API 서버에 대한 요청을 차단하는지 확인합니다.
피어링된 VPC를 통해 클러스터에 액세스하는 경우 컨트롤 플레인 보안 그룹이 올바른 액세스를 허용하는지 확인하세요. 피어링된 VPC에서 포트 443에 있는 Amazon EKS 컨트롤 플레인 보안 그룹으로의 액세스를 허용해야 합니다.
클러스터가 실패 상태에 있으며 엔드포인트 액세스 설정을 공개에서 비공개로 변경할 수 없습니다.
클러스터가 실패 상태일 수 있는데, 이는 AWS IAM(신원 및 액세스 관리)의 권한 문제 때문일 수 있습니다.
이 문제를 해결하려면, 다음 단계를 완료하세요.
- 사용자의 IAM 역할이 AssociateVPCWithHostedZone 작업을 수행할 수 있는 권한이 있는지 확인합니다.
참고: 작업이 차단되지 않으면 사용자 계정에 API 호출을 차단하고 클러스터를 실패하게 만드는 AWS Organizations 정책이 있는지 확인합니다.
- 계정 위의 모든 수준에서 IAM 사용자의 권한이 암시적 또는 명시적으로 차단되지 않았는지 확인합니다.
**참고:**IAM 사용자 권한이 허용 정책 문에 포함되지 않은 경우 암시적으로 차단됩니다. 거부 정책 문에 포함된 경우 명시적으로 차단됩니다. 계정 관리자가 AdministratorAccess */* 권한이 있는 IAM 정책을 사용자에게 연결하더라도 권한이 차단됩니다. AWS Organizations 정책의 권한이 IAM 개체에 대한 권한보다 우선합니다.