시작하며
저는 데브옵스 엔지니어로 현재(2022년 9월)의 회사에 입사한 후, 기존에 막연하게 궁금증을 가져왔던 Istio라는 제품을 주로 담당하게 됐습니다.
공식 문서와 릴리즈 노트 위주로 Istio를 공부하던 중 팀원분께 Istio in Action이라는 책을 추천받게 됐고, 이 책을 통해 조금 두루뭉실했던 이해와 삽질을 바탕으로 했던 판단들이 좀 더 분명해질 수 있었던 것 같습니다.
그 동안은 지루함으로 인해 책을 다소 멀리 하고 짧은 아티클들을 위주로 학습을 해온 반면 올해 제 목표 중 하나는 책을 통해 좀 더 개념을 잘 정리하고 깊이 있게 공부를 해나가는 것이었습니다. 이 책은 그런 저의 목표에 다행히 잘 부합해줬던 것 같고 정말 간단히 리뷰를 해보려합니다.
책에 담긴 내용 간단히 정리
책에 담겨있던 내용들과 함께 제 개인적인 견해, 선호를 담아 간단히 정리해보겠습니다 :)
서비스 메쉬
란 무엇인지Istio
는 무엇인지에 대한 이해를 돕습니다.- 사실 Istio 관련 작업을 진행해오면서도 서비스 메쉬라는 개념이 도대체 무엇인가 의문이었습니다.
- 이 책에 서비스 메쉬라는 이름의 유래나 그 정의가 잘 소개되어있는지는 모르겠는데
Istio
가 뭘 해주는 녀석인지는 상세히 설명된 듯 합니다. - 궁금했던
서비스 메쉬
에 대해 따로 알아본 내용을 정리해보자면- 우선 그 이름의 유래가 궁금했는데 네트워크 형태가 그물망인 메쉬 네트워크에서 유래되어 서비스 간의 통신이 메쉬 네트워크 형태를 띄기 떄문에 서비스 메쉬라고 이름이 붙은 듯 합니다.
- 네트워크가 그물망 형태를 갖는다는 이유는 프록시와 같은 애들에게 각 서비스들의 요청, 응답이 다 전달되는데 이떄 하나의 Gateway에 의존하기보다는 그물망처럼 프록시들 스스로가 자신이 어떤 로직을 수행한 후 어디로 요청을 전달해야하는지를 인지하기 때문입니다.
- 프록시가 모든 서비스들에게 붙다보니 공통된 기능을 인프라 레벨에서 수행할 수 있습니다.
- 서비스마다 공통적으로 필요한 기능이면서 각 서비스들이 해당 기능을 개별적으로 개발할 필요 없이 인프라 레벨에서 공통으로 지원할 수 있는 기능은 무엇이 있는지 알려줍니다.
- 인증, 인가, timeout, retry, circuit breaker, rate limiting 등이 있습니다.
- 해당 기능들을 애플리케이션 내부에서 각각 구현하면 어떤 단점들이 있는지, 인프라 레벨에서 지원하면 어떤 장점들이 있는지 잘 소개되어 있습니다.
- (개인적 의견) 그렇다고해서 Istio로 그런 것을 지원하는 것만이 옳은 선택지다라고는 생각하지 않습니다… 현실적으로 개발 단계에서 해당 기능들을 구현하는 게 더 간단할 수도 있고, 사소하거나 간단한 기능일 수도 있는 부분들을 릴리즈가 빠른 Istio에게 맡기는 것이 옳을지는 갸우뚱입니다. Dev와 Ops가 어우러질 수 있는 시대라고는하나 Istio의 기능에 기대게 되는 순간 그 기능을 테스트해보기 위해서는 Istio가 지원되는 테스트 환경에서 테스트를 진행해봐야할 것이고, 이 경우 보통의 개발자들에게는 번거로움이 될 수 있다고 생각합니다.
- Ingress나 k8s의 기본 Service 리소스만으로는 왜 부족한지, 왜 Istio의 Gateway, VirtualService, DestinationRule 등의 리소스가 필요한지 설명해줍니다.
- VirtualService와 DestinationRule을 이용하 카나리 배포를 손 쉽게 이용할 수도 있고, 앞서 언급한 timeout, retry, circuit breaker의 기능도 인프라 레벨에서 지원이 가능합니다.
- Envoy의 역할과 xDS API에 대해 설명해줍니다.
- 사실 Istio는 Envoy를 추상적이고 선언적으로 관리하게 해주는 도구일 뿐이지 않나 싶습니다.
- 그래서 Envoy라는 애를 잘 이해해야하는데 Envoy가 뭘 하는 애인지, 어떻게 설정할 수 있고 어떻게 설정을 확인할 수 있는지 잘 설명해줍니다.
- 트러블 슈팅 팁들을 알려줍니다!
- 이 부분은 정말 어디서도 찾아보기 힘든 내용이었던 것 같고 실제 트러블슈팅 시에 필요한 개념을 잡는 데에 도움이 많이 됐던 것 같습니다.
- 디버깅 로그를 켜는 법, 그것을 해석하는 법, SNI 이름을 해석하는 법, 과부하의 원인이 될 수 있는 점, 컨트롤 플레인이 동작하지 못할 때 발생할 수 있는 현상 등을 알려줍니다.
- (제가 개인적으로 트러블 슈팅을 좋아하기도 합니다.)
- VM을 우리 Service Registry에 포함시켜 Istio를 구성하는 방법, 다양한 모델의 Multi Cluster을 이용하는 법 등을 설명해줍니다.
- VM 관련된 내용은 그닥 해당 사항이 없을 듯하여 슥슥 넘겼고, 추후에 제가 Istio Multi Cluster을 이용하게 될 수도 있어 흥미로웠습니다.
- Istio를 설치하는 다양한 방법에 대해 소개하고, 주관적이면서도 현실적인 추천안을 제시해줍니다.
- Helm으로 Istio를 설치하는 경우는 어떠한지, 아예 수동으로 따로 설치하는 것은 어떤지, Istioctl을 이용하면 어떤지, control plane과 data plane을 따로 관리하는 방식은 어떤지 등을 설명해줍니다. 이런 내용을 잘 정리해서 설명하는 자료는 거의 찾아보기 힘들었던 것 같습니다.
- 기본적으로 Istio가 제공하는 선언적인 API들 외에 Lua Script나 Wasm을 통해 Envoy의 기능을 확장하는 방법을 알려줍니다.
마치며
“북적북적"이라는 앱을 통해 캡쳐한 저의 2022년 독서 상태입니다. 앞으로 약 2달이 남았는데 남은 2달 동안 한 권을 또 독파해 올해에 총 3권을 읽어보는 게 소박한 목표입니다. 소박하지만 이렇게 점차 늘려가다보면 나중엔 속도도 빨라지고 지식의 양도 복리처럼 늘어나있기를 기대해봅니다.
미래에 누군가 제게 “신입 엔지니어 시절에 주로 뭐 했냐” 묻는다면 이제는 Istio를 빼놓을 수 없을 듯합니다. 😊
Istio의 개념이 궁금은 하지만 직접 다뤄보긴 부담스러운 분들께서는 한 번 진득히 읽어보시면 좋을 듯하고, Istio를 살짝 사용은 해보고있는데 개념이 잘 정리되어있지 않아 한 번 정리를 원하시는 분들은 슥슥 읽어보시면 좋을 듯합니다. 그럼 이로서 Istio in Action의 리뷰를 마치겠습니다.