인프런 커뮤니티 질문&답변

S-J L님의 프로필 이미지
S-J L

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Spring Cloud Gateway - Filter 적용

다른서버를 사용하면 lb://MAIN-SERVICE가 작동을 안합니다

해결된 질문

작성

·

616

0

예제를 따라하면서

API-GATEWAY와 EUREKA 는 LOCALHOST로 서버를 열고,

MAIN-SERVICE라는 서비스만 AWS EC2에서 실행하였습니다.

직접 주소를 넣었을때는 잘 작동하는데

배운대로 lib://MAIN-SERVICE 의 형태로 하면 작동을 안합니다!..

혹시 방법이 있을까요?

참고로 모든 서버를 LOCA에서 돌렸을때는 lib이 정상 작동 하였습니다

답변 1

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

EC2에 등록한 서비스의 문제인지, apigateway-service에서 사용하는 Eureka의 서비스명이 문제인지 확인해 보기 위해서, 질문하신 내용에 다시 질문 드립니다.

  1. lb:MAIN-SERVICE가 아니라, http://35.79.145.19:9001 (아마도 EC2 주소 같습니다만)로 직접 설정하면 어떻게 되나요?

  2. 추가로, apigateway-service가 아닌, 웹 브라우저나 Postman에서 직접 해당 주소 (EC2)로 접속 시 서비스가 작동되나요?

위 내용을 확인해 보시고 결과를 공유해 주시면, 다른 원인이 있는지도 확인해 볼 수 있을 것 같습니다.

감사합니다.

S-J L님의 프로필 이미지
S-J L
질문자

  1. 직접설정하면 작동합니다!
    추가적으로 ec2 서버의 탄력적 아이피 주소가 http://35.79.145.16 입니다.
    (test uri : http://35.79.145.16:9001/main-service/swagger-ui/)

    유레카에 연결된 htttp://172.31.43.172는 탄력적 ip가 아니라 ec2 내부 주소? 인 것 같습니다.


  2. 작동합니다!
    1번의 질문에서 localhost:18000/main-service/**로 접근해도 작동이 됩니다.
    브라우저에서 swagger url을 쳐도 작동하고,

    postman을 사용하여 api 호출시에도 잘 됩니다...
    다만 lib://을 쓰는순간 동작이 안되네요..


  3. ureka에 main-service를 클릭하면 나오는 주소가
    http://ip-172-31-43-172.ap-northeast-1.compute.internal:9001/main-service/actuator/info 입니다.
    주소가 왜 저런식으로 맵핑되는지 모르겠으나.. 여기서 actuator을 지우고 swagger 주소를 넣으면 작동이 안됩니다..
    http://ip-172-31-43-172.ap-northeast-1.compute.internal:9001/main-service/swagger-ui/

     

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

1번과 2번이 성공하셨고, 3번 결과로 보아, EC2에 방화벽 문제일 수도 있다는 생각이 듭니다. EC2 인스턴스를 생성하면, 공개 IP와 내부(inernal) IP가 부여되는데, 공개 IP는 재부팅 시 변경되어서 지속적인 서비스를 위해서는 Elastic IP를 사용하게 됩니다. 그러나, 내부 IP는 Elastic IP와 상관없이 변경되지 않고 계속 할당되어 있는 상태이고, 해당 Internal IP를 기반으로 해서 ip-172-31-43-172.ap-northeast-1.compute.internal 과 같은 도메인이 부여 됩니다. 작업하신 EC2 관리 콘솔로 이동하신 다음에 보안그룹(Security Group) Inbound 정책에 9001이 열려 있는지도 확인해 보시면 좋을 것 같습니다.

감사합니다.

S-J L님의 프로필 이미지
S-J L
질문자

안녕하세요... 아직까지 미해결중입니다.

1. 인바운드 9001포트는 계속열려있습니다
포트가 열리지 않았다면, 탄력적 ip:9001로 접속이 되지 않아야 할텐데 그건 되는듯합니다.

2. 혹시 MAIN-SERVICE가 존재하는 프로젝트의 applicaion.yml에서 세팅으로
내부아이피가 아닌 탄력적ip로 eureka와 api-gateway에 등록 시킬 수 있는 방법이 없을까요? 자동으로 내부아이피를 지정해줘서 이런 문제가 발생하는 듯합니다..
이 문제로 너무 골머리를 썩고 있습니다. 도와주세요..!

=========================================

<API-GATEWAY>
imageURI 옵션을 lb://MAIN-SERVICE로 설정

<MAIN-SERVICE>

imageeureka.instance.statue-pare-url을 ec2 내부 서버가 아닌 탄력적 ip로 지정.

<Eureka>

imagestatus가 정상적으로 올라오는것을 확인

 

 하지만 실제로 localhost:18000/main-service/swagger-ui를 해보면 작동이 안됩니다..

 

eureka.instance.status-page-url= http://35.79.145.16:9001/main-service
#eureka.instance.status-page-url-path= /main-service
#eureka.instance.home-page-url-path= /main-service

이런 값을 넣어봐도 잘 작동이 안되서 질문 해봅니다

S-J L님의 프로필 이미지
S-J L
질문자

자문자답

#eureka.instance.hostname=AWS EC2 Elastic Ip 입력

하면 해결됩니다....ㅠㅠ

S-J L님의 프로필 이미지
S-J L

작성한 질문수

질문하기