Istio 구성에서 Service name에 따른 Route 실패

bo-yoon·2022년 4월 28일
0

환경

aws eks 1.20
istio 1.10

이번에 신규 서비스를 만드면서 어이없는 실수로 인해 istio 로 서비스 호출이 정상적이지 않았던 상황을 공유한다. 나중에 같은 실수하지 않게. 혹은 이 글을 볼 개발자가 이 상황에서 금방 탈출 할 수 있게. 기록은 생명이다 :)



개발에서 흔히 이름 짓는 것이 가장 어렵고 중요하다는 말을 자주 한다.

이번 실수는 test.domain.com/apple 이라는 트래픽이 들어오면 istio-ingressgatewayapplepie-svc로 트래픽을 전송해야 하지만 기존에 있던 apple-svc 로 트래픽을 전송해서 발생한 이슈이다.

즉, 이스티오 환경에서 이름의 유사성으로 인해 발생한 라우팅 이슈이다.


가령 apple-svc 이라는 이라는 쿠버네티스 오브젝트 서비스를 존재하고, 도메인에 /apple/ 이라는 prefix 가 들어 올 경우 virtual Service로 연결되게 설정되어 있다.. istio-system 네임스페이스에 존재하고 있는 istio-ingressgateway-**** 파드에 로그를 확인해보면 다음과 같다.

[2022-04-28T06:57:00.333Z] "GET /apple/test HTTP/1.1" 200 - ~ "test.domain.com" "11.111.11.1" 
outbound|8080||apple-svc.test.svc.cluster.local ~

위와 같이 나오는데 여기서 중요한 것은 apple-svc.test.svc.cluster.local 이다

test.domain.com 으로 /apple 이라는 prefix를 사용해 트래픽이 왔을때 istio-ingressgatewayapple-svc 라는 쿠버네티스 오브젝트 서비스로 트래픽을 전송한다.



그렇다면 applepie-svc 를 만들고 test.domain.com 으로 virtaul Service 를 사용해 /applepie 이라는 prefix를 사용해 트래픽을 전송해보자.

내 생각에는 applepie-svc 로 트래픽을 보낼 것 같지만 실제로는 달랐다. apple-svc 로 트래픽을 보내버렸다.



당연하지만 원인은 이름이 유사해서이다.

appleapplepie 는 이름 중 앞자리 apple이 같다.

따라서 test.domain.com/applepie로 트래픽이 왔을 시 apple 까지만 스캔해서 apple-svc로 트래픽을 보내버렸다.

결론

이름은 구별되게 작성하자

profile
개발 로그 🍎 🍎 🍎

0개의 댓글