Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Amazon EKS 클러스터에 연결할 수 없는 이유가 무엇인가요?
Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터를 생성했는데, 클러스터에 연결이 안 됩니다.
간략한 설명
EKS 클러스터에 연결하지 못하는 경우 다음과 같은 몇 가지 이유가 있을 수 있습니다.
- 클러스터에 kubeconfig 파일을 만들지 않은 경우.
- Amazon EKS API 서버 엔드포인트에 연결할 수 없는 경우.
해결 방법
kubeconfig 파일을 만들지 않은 경우
Amazon EKS 클러스터를 생성한 후에는 AWS Command Line Interface(AWS CLI)를 사용해 kubeconfig 파일을 구성해야 합니다. 이 구성을 통해 kubectl 명령줄을 사용하여 클러스터에 연결할 수 있습니다. 다음 해결 방법은 AWS CLI update-kubeconfig 명령을 사용해 클러스터용 kubeconfig 파일을 생성하는 방법을 설명합니다. AWS CLI를 사용하지 않고 kubeconfig 파일을 수동으로 업데이트하려면 Amazon EKS 클러스터에서 kubeconfig 파일을 생성 또는 업데이트를 참고하세요.
**참고:**AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
- 시스템에 AWS CLI 버전 1.16.308 이상이 설치되어 있는지 확인합니다.
$ aws --version
**중요:**시스템에 Python 버전 2.7.9 이상이 설치되어 있어야 합니다. 그러지 않으면 오류 메시지가 나타납니다.
팁: macOS용 yum, apt-get 또는 homebrew와 같은 패키지 관리자를 사용해 AWS CLI를 설치할 수 있습니다.
- 현재 ID를 확인하여 Amazon EKS 클러스터에 권한이 있는 올바른 보안 인증 정보를 사용하고 있는지 확인합니다.
aws sts get-caller-identity
참고: Amazon 클러스터를 생성할 수 있는 AWS Identity and Access Management(AWS IAM) 엔터티 사용자나 역할에는 클러스터가 생성될 때 자동으로 권한이 부여됩니다. 이 권한은 컨트롤 플레인의 클러스터 RBAC 구성에서 부여됩니다. 또 aws-auth ConfigMap에서도 IAM 사용자나 역할에 Amazon EKS 액세스 권한을 부여할 수 있습니다. 기본적으로 Kubernetes용 AWS IAM 인증기에서는 구성된 AWS CLI나 AWS SDK ID를 사용합니다. 자세한 내용은 클러스터에서 IAM 사용자 및 역할 액세스 켜기를 참고하세요.
- 클러스터에서 kubeconfig 파일을 생성하거나 업데이트합니다.
aws eks --region example_region update-kubeconfig --name cluster_name
참고: example_region을 내 AWS 리전 이름으로 변경합니다. cluster_name을 내 클러스터 이름으로 바꿉니다.
기본적으로 Linux용 구성 파일은 홈 디렉터리의 kubeconfig 경로($HOME/.kube/config)에 생성됩니다. 이 파일은 해당 위치에 있는 기존 kubeconfig와 병합될 수도 있습니다. Windows의 경우 %USERPROFILE%\.kube\config에 파일이 있습니다.
KUBECONFIG 환경 변수를 설정하거나(Kubernetes 웹 사이트에서) 다음 --kubeconfig 옵션을 사용해 다른 경로를 지정할 수도 있습니다.
$ kubectl get pods --kubeconfig ./.kube/config
참고: kubectl 명령 실행 시, 인증할 때 Amazon 리소스 이름(ARN)을 --role-arn 옵션을 사용해 지정할 수 있습니다. 아니면 기본 AWS CLI이나 AWS SDK 보안 인증 정보 체인에 있는 IAM 엔터티가 사용됩니다. 자세한 내용은 update-kubeconfig을 참고하세요. 또는 Amazon EKS 클러스터에서 kubeconfig 파일을 생성 또는 업데이트의 수동으로 kubeconfig 파일 생성에 안내된 6단계를 완료하세요.
- 구성 테스트:
$ kubectl get svc
출력 예시:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
참고: 이 외의 권한 부여나 리소스 유형 오류가 발생하는 경우 무단 또는 액세스 거부(kubectl)를 참고하세요.
Amazon EKS API 서버 엔드포인트에 연결할 수 없는 경우
- 올바른 Amazon EKS API 서버 URL로 연결 중인지 확인합니다. 그러려면 kubectl 상세도를 켜고 다음 명령을 실행하세요.
$ kubectl get svc --v=9
다음과 같은 출력이 나타납니다.
I0110 16:43:36.920095 48173 loader.go:373] Config loaded from file: /Users/abs/.kube/config I0110 16:43:36.936844 48173 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500' I0110 16:43:37.362185 48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }] I0110 16:43:37.402538 48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed I0110 16:43:37.500276 48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds I0110 16:43:37.500302 48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms I0110 16:43:37.500308 48173 round_trippers.go:577] Response Headers: I0110 16:43:37.500316 48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564 I0110 16:43:37.500323 48173 round_trippers.go:580] Cache-Control: no-cache, private I0110 16:43:37.500329 48173 round_trippers.go:580] Content-Type: application/json I0110 16:43:37.500334 48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f I0110 16:43:37.500340 48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c I0110 16:43:37.500345 48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT
- 다음 명령을 실행해 Amazon EKS API 서버에 공용 액세스할 수 있는지 확인합니다.
$ aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig
다음과 같은 출력이 나타납니다.
{ "subnetIds": [ "subnet-abc1", "subnet-abc2", "subnet-abc3", "subnet-abc4", "subnet-abc5", "subnet-abc6" ], "securityGroupIds": [ "sg-abc7" ], "clusterSecurityGroupId": "sg-abc7", "vpcId": "vpc-abc9", "endpointPublicAccess": true, "endpointPrivateAccess": false, "publicAccessCidrs": [ "0.0.0.0/0" ] }
-
위 출력에서 endpointPublicAccess가 true인 경우 publicAccessCidrs 목록의 모든 소스 IP 주소를 허용 목록에 추가해야 합니다. 그러려면 다음을 따르세요.
-
Amazon EKS 콘솔을 엽니다.
-
업데이트할 클러스터를 선택합니다.
-
네트워킹 탭에서 네트워킹 관리를 선택합니다.
-
공용을 선택합니다.
-
고급 설정의 CIDR 차단에서 허용 목록에 추가하려는 공용 CIDR 범위를 모두 입력합니다.
-
변경 사항 저장을 선택합니다.
위 출력에서 endPointPrivateAccess가 true인 경우, kubectl 요청이 클러스터의 네트워크 내에서 오는지 확인해야 합니다. kubectl 요청이 Amazon Virtual Private Cloud(VPC) 외에서 오는 경우, 다음과 같은 시간 제한 오류가 발생합니다.
$ kubectl get svc --v=9 I0110 17:15:58.889798 50514 loader.go:373] Config loaded from file: /Users/example-user/.kube/config I0110 17:15:58.896715 50514 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500' I0110 17:15:59.374499 50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }] I0110 17:16:14.285027 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout I0110 17:16:29.191768 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout I0110 17:16:29.196959 50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500 in 30300 milliseconds I0110 17:16:29.197724 50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms I0110 17:16:29.197768 50514 round_trippers.go:577] Response Headers: I0110 17:16:29.199254 50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout
또 클러스터 보안 그룹을 업데이트하여 소스 IP나 CIDR 범위가 허용 목록에 포함되었는지 확인합니다. 그러면 kubectl 클라이언트가 Amazon EKS API 서버 엔드포인트에 연결되도록 할 수 있습니다.
관련 정보
Amazon EKS API 서버에 연결할 때 “서버에 로그인해야 합니다(승인되지 않음)” 오류를 해결하려면 어떻게 해야 하나요?

관련 콘텐츠
- 질문됨 7달 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전