작성
·
526
1
https://www.inflearn.com/questions/670959
해당 글의 추가 질문 드립니다.
우선 local과 docker에서는 정상 작동하는 것을 확인했습니다.
혹시 apigateway에 - Path=/customer-svc/customers
이런식으로 경로가 설정되어 있다면 각 각의 서비스들이 다른 pod에 배포되어 있을 경우
정상적으로 경로를 찾아 갈 수 있는 건가요??
각 pod 들에는 ClusterIP로 서비스를 연결해 준 상태입니다.
자세히 말하자면
강의에서 docker 배포 목적으로 spring cloud apigateway를 이미지로 만들었던 것을
yaml을 이용하여 쿠버네티스(192.168.1.10)에 배포하였고 이를 nodeport(30502)로 노출 시켰습니다.
그리고 각 각의 서비스들도 마찬가지로 yaml로 배포하였고
ClusterIp로 노출시켜놨습니다.
이렇게 되면 192.168.1.10:30502/customer-svc/customers로 계정 생성 서비스(POST)가 정상적으로 동작하나요??
아니면 단지 apigateway를 이미지 형태로 배포한 것으로 독립된 pod에 있는 customer-svc를 찾아가는 것이 안 되는 건가요..? 그렇기 때문에 500에러가 발생하고요.
apigateway POD의 에러 메세지는 다음과 같습니다
빨간 박스 내용
2022-10-19 19:22:35.106 INFO 1 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
2022-10-19 19:27:35.106 INFO 1 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
2022-10-19 19:29:55.347 INFO 1 --- [or-http-epoll-1] c.p.a.filter.GlobalFilter : Global Filter baseMessage: Spring Cloud Gateway Global Filter
2022-10-19 19:29:55.348 INFO 1 --- [or-http-epoll-1] c.p.a.filter.GlobalFilter : Global Filter Start: request id -> f6eabebe-14
2022-10-19 19:29:59.358 ERROR 1 --- [or-http-epoll-2] a.w.r.e.AbstractErrorWebExceptionHandler : [f6eabebe-14] 500 Server Error for HTTP POST "/customer-svc/customers"
java.net.UnknownHostException: Failed to resolve 'customer-deployment-5bf5fbc484-wxmlh' after 2 queries
at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1047) ~[netty-resolver-dns-4.1.82.Final.jar!/:4.1.82.Final]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
*__checkpoint ⇢ org.springframework.boot.actuate.web.trace.reactive.HttpTraceWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ HTTP POST "/customer-svc/customers" [ExceptionHandlingWebHandler]
해당 내용으로 봤을 때, 쿼리가 간다는 것은 통신은 정상적으로 이루어지는 것 같은데 어떤 문제가 있을까요??
답변 1
0
안녕하세요, 이도원입니다.
K8s에서는 컨테이너화 된 결과물을 POD 형태로 배포하게 됩니다. 작업하신 내용에서는 K8s의 deployment를 이용하여 POD를 배포하신 것 같습니다. 이때 할당되는 이름은 올려주신 내용처럼 'customer-deployment-5bf5fbc484-wxmlh' 와은 형태로 되어 있을 겁니다. apigateway-service에서는 Path를 /customer-svc/customers 이와 같이 설정하였기 때문에, 'customer-deployment-5bf5fbc484-wxmlh' POD와 /customer-svc/customers 로 연결하지 못하기 때문에, UnknownHostException 오류가 발생하는 것 같습니다. K8s에서 deployment를 등록하시고, K8s의 서비스를 등록하실 때, 어떤 매핑정보로 등록하셨는지 확인해 보셔야 할 것 같습니다.
추가로, K8s로 배포하실 경우에는 apigateway-service및 service-discvoery의 역할을 Spring Cloud로 구현하는 것 보다는 자체 리소스(오브젝트)인 ingress, service와 함께 Istio와 같은 Service mesh를 활용하여 구성하는 것이 더 좋습니다.
https://dzone.com/articles/deploying-microservices-spring-cloud-vs-kubernetes
Spring Cloud로 개발하는 MSA 강의는 기본적인 Spring Cloud의 내용과 Docker만을 이용해서 서비스를 개발하고 배포하는 부분만 다루고 있습니다. 추후 강의가 업데이트 되는 시점에는 K8s로 배포하는 부분도 추가해 보도록 하겠습니다.
감사합니다.