Amazon EKS 클러스터에서 Kubernetes Service에 액세스할 때 HTTP 503(서비스를 사용할 수 없음) 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 실행하는 Kubernetes Service에 연결할 때 HTTP 503(서비스를 사용할 수 없음) 오류가 발생합니다.

간략한 설명

HTTP 503 오류는 서버 쪽 오류입니다. 로드 밸런서용으로 구성된 Amazon EKS 클러스터에 있는 Kubernetes Service 포드에 연결할 때 오류가 발생합니다.

HTTP 504 오류를 해결하려면 Amazon EKS에서 HTTP 504 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

HTTP 503 오류를 해결하려면 다음 문제 해결 단계를 완료하세요.

해결 방법

포드 레이블이 Kubernetes Service 선택기에 지정된 값과 일치하는지 확인

1.    다음 명령을 실행하여 선택기의 값을 가져옵니다.

$ kubectl describe service service_name -n your_namespace

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

예제 출력:

Name:                     service-name
Namespace:                pod-name
Labels:                   none
Annotations:              none
Selector:                 app.kubernetes.io/name=namespace
Type:                     NodePort
IP Families:              none
IP:                       10.100.17.189
IPs:                      10.100.17.189
Port:                     unset  80/TCP
TargetPort:               80/TCP
NodePort:                 unset  31560/TCP
Endpoints:                none
Session Affinity:         none
External Traffic Policy:  Cluster
Events:                   none

이전 출력에서 예제 선택기 값은 app.kubernetes.io/name=namespace입니다.

2.    app.kubernetes.io/name=namespace 레이블의 포드가 있는지 확인합니다.

$ kubectl get pods -n your_namespace -l "app.kubernetes.io/name=namespace"

예제 출력:

No resources found in your_namespace namespace.

검색한 값을 가진 리소스를 찾을 수 없는 경우 HTTP 503 오류가 발생합니다.

Kubernetes Service에 대해 정의된 포드가 실행 중인지 확인

Kubernetes Service 선택기의 레이블을 사용하여 포드가 있으며, 실행 중 상태인지 확인합니다.

$ kubectl -n your_namespace get pods -l "app.kubernetes.io/name=your_namespace"

출력:

NAME                               READY   STATUS             RESTARTS   AGE
POD_NAME                           0/1     ImagePullBackOff   0          3m54s

포드가 Kubernetes 배포에 대한 준비 프로브를 통과할 수 있는지 확인

1.    애플리케이션 포드가 준비 프로브를 통과할 수 있는지 확인합니다. 자세한 내용은 Kubernetes 웹 사이트에서 Configure liveness, readiness, and startup probes를 참조하세요.

2.    포드의 준비 프로브를 확인합니다.

$ kubectl describe pod pod_name -n your_namespace | grep -i readiness

참고: pod_name을 포드 이름으로, your_namespace를 네임스페이스로 바꿉니다.

예제 출력:

Readiness:      tcp-socket :8080 delay=5s timeout=1s period=2s #success=1 #failure=3
Warning  Unhealthy  2m13s (x298 over 12m)  kubelet            Readiness probe failed:

이전 출력에서 준비 프로브 실패를 확인할 수 있습니다.

참고: 이 단계에서는 애플리케이션이 올바른 경로 및 포트에서 수신 중인 경우에만 유용한 출력을 제공합니다. curl -Ivk 명령으로 curl 출력을 확인하고 서비스 수준에서 정의된 경로가 유효한 응답을 받는지 확인합니다. 예를 들어 200ms가 좋은 응답입니다.

Classic Load Balancer의 용량 확인

간헐적인 HTTP 503 오류가 발생하면 Classic Load Balancer에 요청을 처리할 용량이 충분하지 않은 것입니다. 이 문제를 해결하려면 Classic Load Balancer에 충분한 용량이 있고 작업자 노드가 요청 비율을 처리할 수 있는지 확인합니다.

인스턴스가 등록되었는지 확인

등록된 인스턴스가 없는 경우에도 HTTP 503 오류가 발생합니다. 이 문제를 해결하려면 다음 해결 방법을 시도합니다.

  • 작업자 노드의 보안 그룹에 노드 포트에서 작업자 노드에 대한 포트 액세스를 허용하는 인바운드 규칙이 있는지 확인합니다. 또한, 노드 포트 범위에서 네트워크 트래픽을 차단하는 NAT 규칙이 없는지도 확인합니다.
  • Classic Load Balancer에 대해 지정된 사용자 지정 보안 그룹이 작업자 노드에서 인바운드 액세스를 허용하는지 확인합니다.
  • 서브넷에서 지정한 모든 가용 영역에 작업자 노드가 있는지 확인합니다.

관련 정보

Classic Load Balancing을 사용하도록 구성된 EC2 인스턴스에서 실행 중인 웹 서버에 연결할 때 HTTP 5xx 오류가 발생하는 이유는 무엇입니까?

HTTP 503: 서비스를 사용할 수 없음

Classic Load Balancer 모니터링

Application Load Balancer 모니터링

Classic Load Balancer 문제 해결: HTTP 오류

AWS 공식
AWS 공식업데이트됨 2년 전