aws eks 1.20
istio 1.10
이번에 신규 서비스를 만드면서 어이없는 실수로 인해 istio 로 서비스 호출이 정상적이지 않았던 상황을 공유한다. 나중에 같은 실수하지 않게. 혹은 이 글을 볼 개발자가 이 상황에서 금방 탈출 할 수 있게. 기록은 생명이다 :)
개발에서 흔히 이름 짓는 것이 가장 어렵고 중요하다는 말을 자주 한다.
이번 실수는 test.domain.com/apple
이라는 트래픽이 들어오면 istio-ingressgateway
가 applepie-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-ingressgateway
는 apple-svc
라는 쿠버네티스 오브젝트 서비스로 트래픽을 전송한다.
그렇다면 applepie-svc
를 만들고 test.domain.com
으로 virtaul Service 를 사용해 /applepie
이라는 prefix를 사용해 트래픽을 전송해보자.
내 생각에는 applepie-svc
로 트래픽을 보낼 것 같지만 실제로는 달랐다. apple-svc 로 트래픽을 보내버렸다.
당연하지만 원인은 이름이 유사해서이다.
apple
과 applepie
는 이름 중 앞자리 apple
이 같다.
따라서 test.domain.com/applepie
로 트래픽이 왔을 시 apple 까지만 스캔해서 apple-svc로 트래픽을 보내버렸다.
결론
이름은 구별되게 작성하자