내용으로 건너뛰기

Amazon EKS 클러스터의 API 서버 엔드포인트와 관련한 연결 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

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

해결 방법

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

신규 또는 기존 클러스터의 kubectl 명령 오류 해결

kubeconfig 파일이 클러스터에 연결되는지 확인

다음 단계를 완료하십시오.

  1. 클러스터와 연결하는 데 올바른 kubeconfig 파일을 사용했는지 확인합니다. 자세한 내용은 Kubernetes 웹 사이트에서 kubeconfig 파일을 사용하여 클러스터 액세스 구성을 참조하십시오.

  2. 다음 명령을 실행하여 kubeconfig 파일의 클러스터 컨텍스트를 나열합니다.

    kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

    출력 예시:

    Cluster name Server "example-cluster-name" https://"example-cluster-endpoint".eks.amazonaws.com
  3. kubeconfig 파일의 클러스터 이름과 엔드포인트가 올바른지 확인합니다. 클러스터 이름이나 엔드포인트가 올바르지 않은 경우, 다음 명령을 실행하여 kubeconfig 파일에서 클러스터 컨텍스트를 업데이트합니다.

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

    참고: example-cluster-name을 업데이트하려는 클러스터의 이름으로 바꾸고, example-region을 AWS 리전으로 바꾸십시오.

  4. 디바이스에서 포트 443의 다음 telnet 명령을 실행하여 API 서버 엔드포인트 연결을 확인합니다.

    telnet example-server-endpoint 443

    참고: example-server-endpoint를 API 서버 엔드포인트로 바꾸십시오.
    다음 출력 예시에서 포트 433은 서버 엔드포인트 D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com과 연결할 수 있습니다.

    $ 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.

디바이스가 포트 433을 통해 API 서버 엔드포인트에 연결할 수 없는 경우 다음 섹션의 해결 단계를 완료하십시오.

DNS 리졸버 확인

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

nslookup example-server-endpoint

참고: example-server-endpoint를 API 서버 엔드포인트로 바꾸십시오.

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

요구 사항에 따라 다음 작업 중 하나를 수행하십시오.

  • CIDR 블록으로 퍼블릭 API 서버 엔드포인트 액세스를 제한한 경우 클라이언트 컴퓨터의 IP 주소가 허용된 CIDR 범위 내에 속하는지 확인합니다.
  • Amazon Virtual Private Cloud(Amazon VPC) 외부에서 액세스해야 하는 경우 CIDR 제한이 있는 퍼블릭 엔드포인트를 사용합니다.

API 서버 엔드포인트의 액세스 조합이 액세스 요구 사항을 충족하는지 확인하십시오.

참고: API 서버 엔드포인트를 프라이빗으로 설정하고 외부 액세스를 위해 AWS VPN을 구성하는 것이 가장 좋습니다. 자세한 내용은 프라이빗 전용 API 서버에 액세스를 참조하십시오.

엔드포인트 액세스가 퍼블릭에서 프라이빗으로 변경된 후 클러스터의 kubectl 명령 오류 해결

다음 작업을 수행하십시오.

  • 배스천 호스트 또는 연결된 네트워크를 사용하여 Amazon EKS API 엔드포인트에 액세스하는지 확인합니다. 연결된 네트워크는 피어링된 VPC, AWS Direct Connect 및 VPN을 포함합니다.
    참고: 프라이빗 액세스 모드에서는 클러스터의 VPC 또는 연결된 네트워크 내부에서만 Amazon EKS API 엔드포인트에 액세스할 수 있습니다.
  • 보안 그룹 또는 네트워크 액세스 제어 목록(네트워크 ACL)이 Kubernetes API 서버에 대한 요청을 차단하는지 확인합니다.
    참고: 피어링된 VPC를 사용하는 경우 컨트롤 플레인 보안 그룹이 포트 443에서 피어링된 VPC의 액세스를 허용하는지 확인하십시오.

엔드포인트 액세스 설정을 퍼블릭에서 프라이빗으로 변경할 수 없을 때 실패 상태로 멈춘 클러스터 문제 해결

AWS Identity and Access Management(IAM)에 권한 문제가 있는 경우 클러스터는 실패 상태로 전환됩니다.

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

작업이 차단되지 않은 경우 AWS 계정에 API 직접 호출을 차단하는 AWS Organizations 서비스 제어 정책 (SCP)이 있는지 확인합니다. 조직 또는 계정 수준에서 IAM 사용자의 권한을 차단하는 암시적 거부나 명시적 거부가 없는지 확인하십시오. 거부 문은 계정 관리자가 사용자에게 */* 권한이 있는 AdministratorAccess IAM 정책을 연결하더라도 권한을 차단합니다. AWS Organizations SCP는 IAM 엔터티의 권한을 재정의합니다.

AWS 공식업데이트됨 6달 전