-
[MSA] MSA 레파지토리MSA 2022. 11. 30. 15:33
Gateway
application.yml
server: port: 8000 spring: profiles: active: local application: name: gateway cloud: gateway: routes: - id: demo-service # 게이트웨이와 연결될 서비스의 이름 uri: http://demo-service:8001 # #게이트웨이로 연결될 서비스 uri predicates: #게이트웨이로 연결될 서비스의 url 패턴 - Path=/demo/** filters: - RemoveRequestHeader=Cookie - RewritePath=/demo/(?<segment>.*), /$\{segment} - AuthenticationFilter default-filters: - name: 필터명 args: preLogger: true # 사용자 지정 파라미터 postLogger: true # 사용자 지정 파라미터 jwt: secretKey: ${jwt.secret:JwtKey} # 설정된 Route 확인하기 # https://blog.leocat.kr/notes/2020/12/12/spring-cloud-gateway-sample management: endpoints: web: exposure: include: - "gateway" endpoint: gateway: enabled: true
- uri, predicates : 예를 들어 게이트웨이가 로컬에서 실행되고 있다고 하고, localhost:8000/demo/some-request 요청이 들어오면 predicates /demo/** 조건에 걸리게 되고 uri에 맞게 demo-service:8001/demo/some-request 로라우팅 해준다.
- default-filters : 전역 필터를 설정함, 위에서 preLogger, postLogger는 사용자가 정한 이름의 파라미터, 위에서 정의한 필터에서 사용한다.
겪었던 문제들
1. 게이트웨이 설정에서 서비스가 똑같은 포트로 설정되어 있는데 어떻게 게이트웨이는 서비스를 구별해서 리퀘스트를 넘기지?
# gateway application.yml ... # 기존 소스 - id: a-service uri: http://a:8002 # a랑 b의 포트가 서로 다름 - id: b-service uri: http://b:8003 # 개선 소스 - id: a-service uri: http://a:8000 # a랑 b의 포트가 같음 - id: b-service uri: http://b:8000
docker-compose에서의 호스트포트:컨테이너포트는 이해했었으나,위 uri의 주소 http://a, http://b 가 컨테이너의 별칭이라는 것을 몰랐어서 겪었던 일, 결과적으로 gateway는 컨테이너의 별칭:포트를 기반으로 API 요청을 각 서비스에게 전송하기 때문에 위 설정에서 포트가 같아도 상관없다.
로그
- 최초 작성 / 22.11.30
- 겪었던 문제들 1번 추가 / 22.12.01
- default-filters / 22.12.03