Knowledge/Trouble Shooting

Health checks failed with these codes: [404]

똑똑한망치 2024. 7. 13. 23:26
728x90
반응형

☀️문제 상황 (1)

AWS에서 EC2를 생성하고 ELB를 생성하여 80 포트로 (nginx)로 타겟 그룹을 설정하였다.

Load Balancer DNS 이름으로 접근하려고 할 때 

 

위와 같은 문제가 발생했다.

 

로드 밸런싱 -> 대상 그룹으로 가서 대상을 확인했더니

 

상태 확인에 Unhealthy로 빨간불이 들어왔다.

 

 

✅ 첫번째 문제 해결

[변경 전]

 

[변경 후]

 

💡 문제 발생 이유

상태 검사 설정에서 입력한 경로에 요청을 보내고 해당 응답을 확인하여 Health Check의 상태를 결정한다.

즉, [변경 전] 사진에서 경로가 /actuator/health로 설정되어 있지만 현재 내가 AWS에 올린 서버는 테스트 겸 올린 것이기 때문에  존재하지 않는 경로이다. 존재하지 않는 경로이기 때문에 성공 코드로 설정한 200 응답이 오지 않았다.

그렇기 때문에 Unhealthy 상태가 되었던 것이다.

 

☀️문제 상황 (2)

[로드 밸런서] ➡️ [리소스 맵 - 신규] 

를 통해 개요를 살펴봤을 때 정상적으로 리스너가 요청을 읽었고, 규칙을 통해 대상그룹을 정상적으로 찾아갔으며 대상을 정상적으로 찾아간 것을 확인했다.

 

하지만 계속 연결이 되지 않고 어디가 문제인지 하루종일 고민을 했다.

그러던 중 개발자 도구를 통해 해당 에러 내용을 확인했다.

ALB (failed)net::ERR_CONNECTION_TIMED_OUT

 

[참고한 페이지]

https://repost.aws/ko/knowledge-center/elb-troubleshoot-connection-errors

 

ELB ‘Connection timed out’ 오류 문제 해결

Elastic Load Balancing(ELB)을 사용하고 있는데, ‘Connection timed out’ 오류가 수신됩니다. 로드 밸런서와 클라이언트 사이의 연결 제한 시간 문제를 해결하려면 어떻게 해야 합니까?

repost.aws

 

위의 글을 읽어가며 천천히 과정을 따라갔다.

 

해결 방법 (1) - 실패

로드 밸런서 체계가 인터넷에 연결되어 있는지 확인

➡️ 인터넷이 빵빵하게 연결되어 있으므로 이 해결방안은 실패

 

 해결 방법 (2) - 실패

리스너가 로드 밸런서 포트에 대해 구성되었는지 확인

 

80 번 포트가 정상적으로 등록되어 있다. 따라서 이 해결 방안도 실패

 

 해결 방법 (3) - 성공❗

대상 인스턴스의 보안 그룹이 트래픽을 허용하는지 확인 ➡️ 로드 밸런서에 연결된 보안 그룹의 설정을 확인한다.

 

 

default에 80포트와 443 포트는 기본적으로 열려있을것이라 판단하고 default를 아무 생각 없이 설정했다.

 

저 default에 내가 설정했던 80 포트 8080 포트 8000 포트가 열려 있는지 확인하자.

 

어라...? 모든 포트 범위가 다 허용되고 내가 설정한게 없다...? 😡

 

💡 [보안 그룹]을 가보자

보안 그룹이 2개가 있었다.

 

default가 아닌 launch-wizard-1이 내가 설정한 보안 그룹이였다!!!!!!!!!!!!!!!!!!!!!!!!!!

 

즉, 로드 밸런서 설정 시 보안 그룹 설정을 잘못한 것!!!!

🚨 해결!!

 

로드 밸런서의 보안 그룹을 내가 설정했던 보안그룹을 추가하니 정상적으로 작동했다!!!!!!!!!

반응형