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

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

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 실행하는 Kubernetes Service에 연결할 때 HTTP 504(게이트웨이 시간 초과) 오류가 발생합니다.

간략한 설명

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

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

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

해결 방법

로드 밸런서의 유휴 제한 시간이 올바르게 설정되었는지 확인

로드 밸런서가 대상에 대한 연결을 설정했지만 유휴 제한 시간이 경과하기 전에 대상이 응답하지 않았습니다. 기본적으로 Classic Load BalancerApplication Load Balancer의 유휴 제한 시간은 60초입니다.

1.    Classic Load Balancer 또는 Application Load Balancer에 대한 Amazon CloudWatch 지표를 검토합니다.

참고: 대기 시간 데이터 포인트가 현재 구성된 로드 밸런서 제한 시간 값과 동일하고 HTTPCode_ELB_5XX 지표에 데이터 포인트가 있는 경우 하나 이상의 요청이 시간 초과된 것입니다.

2.    HTTP 요청이 유휴 제한 시간 내에 완료될 수 있도록 로드 밸런서에 대한 유휴 제한 시간을 수정하거나 애플리케이션이 더 빠르게 응답하도록 구성합니다.

Classic Load Balancer에 대한 유휴 제한 시간을 수정하려면 service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout 주석을 포함하도록 서비스 정의를 업데이트합니다.

Application Load Balancer에 대한 유휴 제한 시간을 수정하려면 alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds 주석을 포함하도록 수신 정의를 업데이트합니다.

백엔드 인스턴스에 백엔드 연결 오류가 없는지 확인

로드 밸런서가 유휴 제한 시간 값에 도달하기 전에 백엔드 인스턴스가 로드 밸런서에 대한 TCP 연결을 닫으면 로드 밸런서가 요청을 이행하지 못합니다.

1.    Classic Load Balancer에 대한 CloudWatch BackendConnectionErrors 지표와 Application Load Balancer에 대한 대상 그룹의 TargetConnectionErrorCount를 검토합니다.

2.    백엔드 작업자 노드 또는 Pod에서연결 유지 설정을 활성화하고 연결 유지 제한 시간을 로드 밸런서의 유휴 제한 시간보다 큰 값으로 설정합니다.

연결 유지 제한 시간이 유휴 제한 시간보다 작은지 확인하려면 포드 또는 작업자 노드에서 연결 유지 값을 확인합니다. 포드 및 노드에 대한 다음 예제를 참조하세요.

포드의 경우:

$ kubectl exec your-pod-name -- sysctl \

출력:

net.ipv4.tcp_keepalive_time \
    net.ipv4.tcp_keepalive_intvl \
    net.ipv4.tcp_keepalive_probes

노드의 경우:

$ sysctl \

출력:

net.ipv4.tcp_keepalive_time \
    net.ipv4.tcp_keepalive_intvl \
    net.ipv4.tcp_keepalive_probes

백엔드 대상이 휘발성 포트 범위에서 로드 밸런서로부터 트래픽을 수신할 수 있는지 확인

서브넷에 대한 네트워크 ACL(액세스 제어 목록)은 대상에서 휘발성 포트(1024-65535)의 로드 밸런서 노드로의 트래픽을 허용하지 않습니다.

로드 밸런서와 백엔드 대상 간에 데이터가 이동할 수 있도록 보안 그룹 및 네트워크 ACL을 구성해야 합니다. 예를 들어, 로드 밸런서 유형에 따라 이러한 대상은 IP 주소 또는 인스턴스일 수 있습니다.

임시 포트 액세스를 위해 보안 그룹을 구성하려면 노드 및 포드의 보안 그룹 송신 규칙을 로드 밸런서의 보안 그룹에 연결해야 합니다. 자세한 내용은 VPC의 보안 그룹 규칙 추가 및 삭제를 참조하세요.