[aws] 로드밸런서 502 bad gateway

해질녘·2022년 7월 24일
3

해결이 되긴 했는데 너무 많은 것을 고쳐서 왜 잘 됐는지 잘 모르겠다.

상황

aws ecs 파게이트 배포 테스트 중.
로드밸런서로 접속하면 502가 뜸.
잘 찾아서 켜져 있는 머신(eni) dns로 들어가면 접속 가능. (Hello, World!)
설정 고치다보니 503도 뜸...

알아보기

CloudWatch 보니까 로드밸런서에서 5xx 발생. 로드밸런서 문제임

로그 확인

http 2022-07-24T12:14:28.426772Z app/fargate-soona-lb/d7b66fd06f349c8a 59.6.105.96:54513 10.0.8.144:80 -1 -1 -1 502 - 488 679 "GET http://fargate-soona-lb-197690239.ap-northeast-2.elb.amazonaws.com:80/favicon.ico HTTP/1.1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" - - arn:aws:elasticloadbalancing:ap-northeast-2:986249049395:targetgroup/fargate-soona-tg/6e60a24c0389dec0 "Root=1-62dd37a4-173645e730227b6e72e40941" "-" "-" 0 2022-07-24T12:14:28.425000Z "forward" "-" "-" "10.0.8.144:80" "-" "-" "-"

-1 -1 -1 이게 request_processing_time, target_processing_time, response_processing_time 이라고 함

끔찍...

로드밸런서로 접속이 안되니 파게이트에서 계속 머신 죽이고 새로만들고 죽이고 새로만들고 한 150개 정도 그렇게 하고 있었음

살육의 현장을 지켜보지 못하고 서비스 종료

마스터... 나 힘냈어... (별로 도움은 안됐지만..)

시도

포트가 안열렸나 해서 보안 그룹 가서 http, https, 8080(스프링부트) 열었음

안 됨

왜죠

aws 문서

Application Load Balancer 문제 해결

Application Load Balancer 문제 해결

HTTP 502: 잘못된 게이트웨이
가능한 원인들:

로드 밸런서는 연결 설정을 시도할 때 대상에서 TCP RST를 수신했습니다.

로드 밸런서는 연결을 설정하려고 할 때 "ICMP 대상에 연결할 수 없음(호스트에 연결할 수 없음)"과 같은 예기치 않은 응답을 대상으로부터 받았습니다. 로드 밸런서 서브넷에서 대상 포트의 대상으로 트래픽이 허용되는지 확인합니다.

로드 밸런서에 대상에 대한 미해결 요청이 있는 동안 대상이 TCP RST 또는 TCP FIN과의 연결을 닫았습니다. 대상의 연결 유지 기간이 로드 밸런서의 유휴 시간 초과 값보다 짧은지 확인합니다.

대상 응답의 형식이 잘못되었거나 유효하지 않은 HTTP 헤더가 포함되어 있습니다.

로드 밸런서에서 대상에 연결할 때 SSL 핸드셰이크 오류 또는 SSL 핸드셰이크 시간 초과(10초)가 발생했습니다.

등록 취소된 대상에서 처리 중인 요청에 대해 등록 취소 지연 기간이 경과했습니다. 긴 작업을 완료할 수 있도록 지연 시간을 늘립니다.

대상이 Lambda 함수이고 응답 본문이 1MB를 초과합니다.

대상은 구성된 제한 시간에 도달하기 전에 응답하지 않은 Lambda 함수입니다.

대상이 오류를 반환한 Lambda 함수이거나 함수가 Lambda 서비스에 의해 조절되었습니다.

Application Load Balancer HTTP 502 오류 문제는 어떻게 해결합니까?

Application Load Balancer HTTP 502 오류 문제는 어떻게 해결합니까?

액세스 로그 형식

액세스 로그 형식

-1 -1 -1 이게 request_processing_time, target_processing_time, response_processing_time 이라고 함

request processing time

로드 밸런서가 요청을 수신한 시간부터 대상으로 요청을 보낼 때까지 경과된 총 시간(초 단위, 밀리초 단위)입니다.

로드 밸런서가 요청을 대상으로 디스패치할 수 없는 경우 이 값은 -1로 설정됩니다. 이는 유휴 시간 초과 전에 대상이 연결을 닫거나 클라이언트가 잘못된 요청을 보내는 경우 발생할 수 있습니다.

등록된 대상이 유휴 시간 초과 전에 응답하지 않는 경우 이 값을 -1로 설정할 수도 있습니다.

Application Load Balancer에 대해 AWS WAF가 활성화된 경우 클라이언트가 POST 요청에 필요한 데이터를 보내는 데 걸리는 시간이 request_processing_time에 계산됩니다

target_processing_time

로드 밸런서가 대상에 요청을 보낸 시간부터 대상이 응답 헤더를 보내기 시작할 때까지 경과된 총 시간(초 단위, 밀리초 단위)입니다.

로드 밸런서가 요청을 대상으로 디스패치할 수 없는 경우 이 값은 -1로 설정됩니다. 이는 유휴 시간 초과 전에 대상이 연결을 닫거나 클라이언트가 잘못된 요청을 보내는 경우 발생할 수 있습니다.

등록된 대상이 유휴 시간 초과 전에 응답하지 않는 경우 이 값을 -1로 설정할 수도 있습니다.

Application Load Balancer에 대해 AWS WAF가 활성화되지 않은 경우 클라이언트가 POST 요청에 필요한 데이터를 보내는 데 걸리는 시간이 target_processing_time에 계산됩니다.

response_processing_time

로드 밸런서가 대상에서 응답 헤더를 수신한 시간부터 클라이언트에 응답을 보내기 시작할 때까지 경과된 총 시간(초 단위, 밀리초 단위)입니다. 여기에는 로드 밸런서의 대기 시간과 로드 밸런서에서 클라이언트로의 연결 획득 시간이 모두 포함됩니다.

로드 밸런서가 대상에 요청을 보낼 수 없는 경우 이 값은 -1로 설정됩니다. 이는 유휴 시간 초과 전에 대상이 연결을 닫거나 클라이언트가 잘못된 요청을 보내는 경우 발생할 수 있습니다.

애초에 target에 연결이 안 되고 있다 으아아 ㅠㅠ

아마도 해답

target group에 들어가니 타겟 그룹 여러개가 살아 있었고, 그게 제대로 lb에 붙어 있지가 않았다. 로드밸런서에서 연결되는 tg와 파게이트 서비스에서 연결되는 tg를 맞춰주니 제대로 연결 된다.

기타 설정

  • task definition에서 열어준 포트: 8080

  • 보안 그룹 설정: 인바운드 8080, 80 아웃바운드 all

  • 서브넷: vpc 안에 AZ 2개 있고 둘다 퍼블릭 서브넷임

  • 로드밸런서 리스너 HTTP: 80 파게이트 서비스에 해당하는 target group으로 전달하고 있음.

1개의 댓글

comment-user-thumbnail
2023년 2월 10일

안녕하세요 저도 현재 -1 -1 -1 502 - 에러가 떠서 target 확인해봤는데 잘 연결되어있습니다 ㅠㅠ 다른 해결 방안은 없을까요??

답글 달기