Amazon EKS에서 호스팅되는 서비스에 연결할 때 연결 시간 초과를 해결하려면 어떻게 해야 합니까?

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

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 호스팅되는 서비스에 연결할 때 연결 시간 초과가 발생합니다.

간략한 설명

Amazon EKS 클러스터에서 서비스에 연결할 수 없는 가장 일반적인 두 가지 이유는 다음과 같습니다.

  • 보안 그룹 또는 네트워크 액세스 제어 목록(네트워크 ACL) 제한으로 인해 트래픽이 포드 엔드포인트에 도달하지 못합니다.
  • 레이블이 일치하지 않기 때문에 서비스가 포드 엔드포인트를 선택하지 않습니다.

이러한 문제를 해결하려면 작업자 노드 인스턴스 및 로드 밸런서와 연결된 보안 그룹 및 네트워크 ACL을 확인합니다. 또한 서비스에 포드에 대한 올바른 레이블이 선택되어 있는지 확인합니다.

참고: 문제 해결은 서비스 유형에 따라 다릅니다. 다음 해결 방법은 액세스할 수 없는 서비스의 문제를 해결할 때 적용할 수 있습니다. Kubernetes 서비스 유형에 대한 자세한 내용은 Amazon EKS 클러스터에서 실행 중인 Kubernetes 서비스를 공개하려면 어떻게 해야 합니까?를 참조하세요.

해결 방법

보안 그룹 및 네트워크 ACL 확인

클러스터 IP

클러스터 IP 서비스 유형은 동일한 Amazon EKS 클러스터에서 실행되는 마이크로서비스 간의 통신에 사용됩니다. 대상 포드가 있는 인스턴스에 연결된 보안 그룹에 클라이언트 포드 인스턴스와의 통신을 허용하는 인바운드 규칙이 있는지 확인합니다.

대부분의 경우 작업자 노드 보안 그룹의 모든 포트를 통해 모든 통신을 허용하는 자체 규칙이 있습니다. 각각 자체 보안 그룹이 있는 여러 노드 그룹을 사용하는 경우 보안 그룹 간의 모든 통신을 허용해야 합니다. 이렇게 하면 여러 노드에서 실행되는 마이크로서비스가 쉽게 통신할 수 있습니다.

자세히 알아보려면 Amazon EKS 보안 그룹 고려 사항을 참조하세요.

노드 포트

작업자 노드 보안 그룹은 NodePort 서비스 정의에 지정된 포트에서 들어오는 트래픽을 허용해야 합니다. 서비스 정의에 지정되지 않은 경우 포트 파라미터의 값은 targetPort 파라미터와 동일합니다. 포트는 Amazon EKS 클러스터의 모든 노드에 노출됩니다.

작업자 노드 서브넷에 연결된 네트워크 ACLS를 확인합니다. 클라이언트 IP 주소가 서비스가 사용하는 포트를 통하는 허용 목록에 있는지 확인합니다.

인터넷을 통해 Kubernetes 서비스에 액세스하는 경우, 노드에 퍼블릭 IP 주소가 있는지 확인합니다. 서비스에 액세스하려면 노드의 퍼블릭 IP 주소와 포트 조합을 사용해야 합니다.

로드 밸런서

로드 밸런서 보안 그룹이 리스너 포트를 허용하는지 확인합니다. 또한 작업자 노드 보안 그룹이 애플리케이션 컨테이너가 실행 중인 포트를 통해 로드 밸런서 보안 그룹에서 들어오는 트래픽을 허용하는지 확인합니다.

서비스 정의에 지정된 포트가 targetPort와 다른 경우 로드 밸런서 보안 그룹에 대한 작업자 노드 보안 그룹의 포트를 통한 수신 트래픽을 허용해야 합니다. 포트와 targetPort는 일반적으로 서비스 정의에서 동일합니다.

네트워크 ACL은 클라이언트 IP 주소가 리스너 포트에서 로드 밸런서에 도달할 수 있도록 허용해야 합니다. 인터넷을 통해 로드 밸런서에 액세스하는 경우 퍼블릭 로드 밸런서를 생성했는지 확인합니다.

서비스가 포드 엔드포인트를 올바르게 선택했는지 확인

포드가 서비스의 백엔드로 등록되지 않은 경우 시간 초과 오류가 발생할 수 있습니다. 이는 브라우저에서 서비스에 액세스하거나 curl podIP:podPort 명령을 실행할 때 발생할 수 있습니다.

포드의 레이블을 확인하고 서비스에 적절한 레이블 선택기가 있는지 (Kubernetes 웹 사이트에서) 확인합니다.

다음 명령을 실행하여 Kubernetes 서비스가 포드를 올바르게 선택하고 등록했는지 확인합니다.

명령:

kubectl get pods -o wide

출력 예:

NAME                    READY   STATUS    RESTARTS   AGE       IP                           NODE                         NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-2rtn8   1/1     Running     0       3h4m   172.31.33.214   ip-172-31-33-109.us-west-2.compute.internal       none          none

명령:

kubectl describe svc your_service_name -n your_namespace

참고: your_service_name을 서비스 이름으로, your_namespace를 네임스페이스로 바꿉니다.

출력 예:

Events:            none
Session Affinity:  none
Endpoints:         172.31.33.214:80
....

앞의 출력 예에서 172.31.33.214kubectl get pods -o wide 명령을 실행하여 얻은 포드 IP 주소입니다. 172.31.33.214 IP 주소는 Amazon EKS 클러스터에서 실행 중인 서비스에 대한 백엔드 역할도 합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?