강의

멘토링

로드맵

Inflearn brand logo image

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

김영진님의 프로필 이미지
김영진

작성한 질문수

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

k8s 추가질문

작성

·

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의 에러 메세지는 다음과 같습니다

4. 커스터머 쿼리 에러 로그.png빨간 박스 내용

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

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

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

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를 활용하여 구성하는 것이 더 좋습니다.

image

https://dzone.com/articles/deploying-microservices-spring-cloud-vs-kubernetes

Spring Cloud로 개발하는 MSA 강의는 기본적인 Spring Cloud의 내용과 Docker만을 이용해서 서비스를 개발하고 배포하는 부분만 다루고 있습니다. 추후 강의가 업데이트 되는 시점에는 K8s로 배포하는 부분도 추가해 보도록 하겠습니다.

감사합니다.

김영진님의 프로필 이미지
김영진

작성한 질문수

질문하기