내용으로 건너뛰기

Amazon EKS에 호스팅된 서비스에 연결할 때 연결 시간 초과 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 호스팅되는 서비스에 연결할 때 연결 제한 시간이 초과됩니다.

간략한 설명

가장 일반적인 서비스 연결 문제는 보안 그룹 또는 네트워크 액세스 제어 목록(네트워크 ACL)이 포드 엔드포인트의 트래픽을 제한하기 때문에 발생합니다.

이 문제를 해결하려면 워커 노드 인스턴스 및 로드 밸런서와 연결된 보안 그룹 및 네트워크 ACL을 확인하세요. Network Load Balancer를 사용하는 경우 서비스에서 포드에 대해 올바른 레이블을 선택했는지 확인합니다.

참고: 다음 해결 방법은 액세스할 수 없는 서비스에 적용됩니다. Kubernetes 서비스 유형을 세히 알아보려면 Amazon EKS 클러스터에서 실행 중인 Kubernetes 서비스를 노출하려면 어떻게 해야하나요?를 참조하세요.

해결 방법

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

클러스터 IP

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

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

자세한 내용은 Amazon EKS 보안 그룹 요구 사항 및 고려 사항을 참조하세요.

노드 포트

워커 노드 보안 그룹은 NodePort 서비스 정의에 지정된 포트로 들어오는 트래픽을 허용해야 합니다. 서비스 정의에 지정되지 않은 경우 포트 매개변수의 값은 targetPort 매개변수와 동일합니다. 포트는 Amazon EKS 클러스터의 모든 노드에 노출됩니다.

워커 노드 서브넷에 연결된 네트워크 ACL을 확인합니다. 서비스가 사용하는 포트의 허용 목록에 클라이언트 IP 주소가 있는지 확인합니다.

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

로드 밸런서

다음 사항이 맞는지 확인하세요.

  • 로드 밸런서 보안 그룹은 인바운드 리스너 포트를 허용합니다.
  • 로드 밸런서 보안 그룹은 대상 트래픽 포트에서 아웃바운드 트래픽을 허용합니다.
  • 워커 노드 보안 그룹은 애플리케이션 컨테이너가 실행되는 포트를 통해 로드 밸런서 보안 그룹에서 들어오는 트래픽을 허용합니다.
  • 클라이언트 IP 보존을 사용하는 보안 그룹 연결 없이 Network Load Balancer를 사용하는 경우 워커 노드에서 클라이언트 트래픽을 허용합니다.
  • 워커 노드는 서비스에서 매핑된 포트와 다를 경우 targetPort와 일치하는 트래픽을 허용합니다.
  • 네트워크 ACL을 사용하면 클라이언트 IP 주소가 리스너 포트의 로드 밸런서에 도달할 수 있습니다.
  • 인터넷을 통해 로드 밸런서에 액세스하는 경우 인터넷 연결 로드 밸런서가 생성됩니다.

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

포드가 서비스의 백엔드로 등록되지 않은 경우 타임아웃 오류가 발생할 수 있습니다. 브라우저에서 서비스에 액세스할 때 이런 일이 발생할 수 있습니다. 또는 curl podIP:podPort 명령을 실행할 때 발생할 수 있습니다.

포드의 라벨을 확인하고 서비스에 적절한 라벨 선택기가 있는지 확인합니다. 자세한 내용은 Kubernetes 웹 사이트의 레이블 및 선택기를 참조하세요.

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

명령:

kubectl get pods -o wide

출력 예시:

NAME                    READY   STATUS    RESTARTS   AGE       IP                           NODE                         NOMINATED NODE   READINESS GATESnginx-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:            noneSession Affinity:  none
Endpoints:         172.31.33.214:80
....

예제 출력에서 172.31.33.214kubectl get pods -o wide 명령에서 반환된 포드 IP 주소입니다. 172.31.33.214 IP 주소는 Amazon EKS 클러스터에서 실행되는 서비스의 백엔드 역할도 합니다.

AWS 공식업데이트됨 2년 전