
들어가며
Istio Service Mesh 는다양한 장점을 가지고 있지만, 그중 필자가 도입하고자 하는 이유는 두 가지다.
첫 번째, 서비스간 상호작용 추적
운영 중인 서비스간 상호 관계를 파악하기 위한 방법은 전술적 설계 과정의 개발 산출물을 토대로 서비스의 연관성을 확인한 후, Datadog의 이벤트 로그들을 확인하며 검증하는 방법뿐이다. Istio Service Mesh의 Sidecar를 기반으로 한 운영 가시화가 매력적이었다. 또한 Sidecar를 이용하여 상호 작용이 불가능한 서비스 결함을 사전 탐지할 수 있는 점도 좋았다.
두 번째, Circuit breaker 도입
운영 중인 서비스에 Circuit breaker를 도입하기 위함이다. 플랫폼이 Polyglot 한 마이크로 서비스 구조로 변경되어 가는 상황과, Java Spring 기반 Circuit Breaker를 코드에 일일이 작성해야 하는 불편함을 service mesh sidecar를 통해 해결할 수 있다는 점이 좋았다. 이는 올해 프로젝트 진행에 도움을 주셨던 SK Telecom 전문가 분께서도 추천해 주신 내용이다.
또한 당근마켓 배상익님께서 아래 강의에서 언급하신 것처럼 작년보다 올해 Istio 구성이 더욱 간결해져 관리해야 할 내용이 많이 줄어들었다는 점도 좋았다.
강의: https://fastcampus.co.kr/dev_online_istio
MSA 환경의 효율적인 DevOps를 위한 Istio | 패스트캠퍼스
실습으로 배워서 바로 업무에 적용하는 국내 최초 Istio 마스터 클래스 | DevOps/SRE 엔지니어 리드와 함께 45개 실습을 진행하며 가장 최신 버전의 Istio를 손에 익을 때까지 사용해보세요. 구글링해
fastcampus.co.kr
따라서, Service mesh에 대한 간단한 예제를 바탕으로 가이드를 따라 다양한 기능을 사용해 보고, 내년(2023년)에 플랫폼 도입을 목표로 사전 이해를 위해 튜토리얼을 진행한 내용을 정리했다.
테스트 환경
Macbook Pro Apple M1 Pro / 32G / Ventura 13.0.1
(클라우드 학습을 위해 금년도 도입한 최고의 병기.. 라고 여기며 소비를 합리화 하고있다.)
Docker와 Kubernetes 설치
Docker: Accelerated, Containerized Application Development
Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.
www.docker.com
Docker 설치 파일 다운로드 후 설치한다. Docker 설치는 크게 어렵지 않으므로 OS환경에 맞게 다운로드하여 설치한다.

설치된 도커 데스크 톱의 Preference에서 Enable Kubernetes 체크 후 Kubernetes가 설치될 때까지 대기한다.
참고로 Show system containers를 체크하는 것은 추천하지 않는다. (컨테이너가 지저분하게 조회되기 때문이다.)
편의성 (선택사항)
https://kubernetes.io/docs/reference/kubectl/cheatsheet 에 접속하여 Kubectl autocomplete 설정을 하면 편하다. kubectl → k로 쓸 수 있게 해 주며 명령어 자동 완성 기능 역시 사용할 수 있다.
kubectl Cheat Sheet
This page contains a list of commonly used kubectl commands and flags. Kubectl autocomplete BASH source <(kubectl completion bash) # set up autocomplete in bash into the current shell, bash-completion package should be installed first. echo "source <(kubec
kubernetes.io
튜토리얼 환경 설치 및 실행
필자가 설명하려는 Bookinfo 예제는 다음과 같은 순서로 세팅해야 한다.
- Istio 설치
- Namespace에 사이드카 주입 설정
- 예제 설치
- Dashboard 플러그인 설치
- Kiali dashboard 접속
- 트래픽 시뮬레이션
Istio 설치
다음의 사이트에 접속하여 설치 가이드를 따른다. https://istio.io/latest/docs/setup/getting-started/#install
Getting Started
Try Istio’s features quickly and easily.
istio.io
필자가 테스트한 환경은 Kubernetes v1.25.2이고, 최신 Istio의 버전은 v1.16.1이다. 버전 별로 호환성 문제가 발생하기 때문에, 호환성을 잘 체크하고 튜토리얼을 수행한다.
(언급한 강의에서 사용했던 Istio 버전은 v1.11.3이다. 혹시나 해서 Kubernetes v1.25.2에서 해당 버전 구동해보니 오류가 발생했다.)
필자의 설치 과정은 다음과 같다.
Istio 다운로드
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.16.1
다운로드 파일로 이동
cd istio-1.16.1
istioctl 명령어 등록
export PATH=$PWD/bin:$PATH
[선택사항] Ohmyzsh를 사용하는 경우 환경설정에 아래 내용을 등록하지 않으면, 터미널 재실행 시마다 istioctl을 등록해줘야 하는 번거로움이 있다.
vim ~/.zshrc # zsh 환경설정 파일 실행
#다음의 내용은 쿠버네티스 관련 명령어를 쉽게 사용하기 위한 설정
alias k=kubectl
complete -o default -F __start_kubectl k
#다음의 코드 추가 (강조 표시된 경로는 istio 폴더 경로)
export PATH=/Users/devlos/Document/install/istio-1.16.1/bin:$PATH
Istioctl을 이용하여 Istio 설치
istioctl install --set profile=demo -y
Profile의 종류별로 istio-egressgateway, istio-ingressgateway, istiod 세 가지를 다른 방식으로 제공한다. 별도의 Profile 설정 없이 istioctl install을 통해 설치할 경우 default로 설치되어 egressgateway를 사용할 수 없다.

참고: https://istio.io/latest/docs/setup/additional-setup/config-profiles/
Installation Configuration Profiles
Describes the built-in Istio installation configuration profiles.
istio.io
Namespace에 사이드카 주입 설정
Default namespace에 Envoy 사이드카 프락시를 자동 삽입 하도록 istio-injection label을 추가한다.
kubectl label namespace default istio-injection=enabled
사이드카: 서비스 인스턴스에 연결되어 애플리케이션 네트워킹, 모니터링, 추적, 로깅 등의 기능을 수행하는 인스턴스다. Envoy 사이드카 프락시는 C++로 작성된 고도로 최적화된 내부 서비스 프락시로써 현재(2022년 말) 애플리케이션 사이드카의 표준으로 언급된다.
예제 설치
아래의 그림과 같이 4개의 Polyglot 한 마이크로 서비스로 이루어진 예제를 설치한다.

가장 먼저 접근하게 되는 Product page 내부에 Review 정보와 Product details 정보를 포함한다. Review 정보는 3개의 버전으로 구성되어있으며 각각 다른 UI를 제공한다. Reviews-v2, v3는 Ratings 서비스에서 정보를 받아온다. 예제에 대한 상세한 가이드 문서는 아래의 링크를 참고한다.
참고: https://istio.io/latest/docs/examples/bookinfo/
Bookinfo Application
Deploys a sample application composed of four separate microservices used to demonstrate various Istio features.
istio.io
애플리케이선 배포
이전 과정에서 다운로드한 Istio 경로에 보면 samlpe이 이미 포함되어 있다. 따라서 해당 resource yaml을 통해 kubernetes에 배포만 하면 된다.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
정상 배포 확인
Service 및 pod들이 정상적으로 실행되었는지 확인한다.
kubectl get services
kubectl get pods
클러스터 외부 접속을 위한 Istio gateway 및 VertualService 설정
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
예제 페이지 정상동작 확인
이 과정까지 정상적으로 진행이 된다면, 다음의 예제페이지로 정상 접속 될 것이다. (http://localhost/productpage)

대시보드 Addon 설치
istio 다운로드 정보에 포함된 Addon들을 설치한다.
kubectl apply -f samples/addons
kubectl rollout status deployment/kiali -n istio-system

다음과 같이 Grafana, Kiali, Prometheus 등의 모니터링 툴들이 자동으로 배포되는 것을 확인할 수 있다.
Kiali 대시보드 접속
다음의 명령어를 사용하여 Kiali 대시보드에 접속하면 아래와 같은 화면을 확인할 수 있다.
istioctl dashboard kiali
다음과 같이 kiali 화면에 접속할 수 있다.

트래픽 시뮬레이션
kiali 대시보드 설정까지 끝났으니, 이제 트래픽을 주며 전체 시스템에서 트래픽이 어떤 식으로 흘러가는지 확인해 볼 수 있다. 우측 컨트롤 박스에서 Graph 탭에 들어간다음 다음과 같은 설정을 추가한다.

컨트롤 박스의 [Traffic Animation]을 활성화시키면 그래프에서 트래픽이 흘러가는 역동적인 모습을 감상할 수 있다.
터미널에서 아래의 명령을 실행하여 100개의 트래픽을 발생시키면 트래픽의 흐름과, Throghput, Traffic Rate, Responsetime 등을 확인할 수 있다. 처리 속도가 너무 빨라서 금방 지나간다면, 1000개로 설정해서 다시 보자.
for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done
데모 동영상: https://youtu.be/I0xRrfgm94s
마치며
이번 글에서는 Bookinfo Application이라는 Istio 공식 예제 데모를 실습해 본 과정을 소개했다. 트래픽의 흐름과 유용한 정보들이 Kiali에서 한눈에 시각화되는 점이 아주 인상적이었다. 또한 사이드카를 namespace 단위로 주입시켜 준다는 점이 편리하게 느껴졌다.
(하지만 커스텀하게 적용해나가게 되면 더 어렵겠지.. 괜찮아)
다음 Istio 관련 포스팅에서는 강의에서 언급되는 실무 환경과 비슷한 데모들을 좀 더 살펴보고 내용을 정리하도록 한다.
'클라우드 컴퓨팅 & NoSQL > Kubernetes' 카테고리의 다른 글
[Kubernetes] DEVOCEAN - 김정기 전문가(SK Telecom)님의 멘토링 (2) | 2022.10.09 |
---|---|
[Kubernetes]Nginx 이미지를 이용한 간단한 쿠버네티스 프로젝트 (0) | 2022.07.13 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #7 (0) | 2021.04.04 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #6 (0) | 2021.04.04 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #5 (0) | 2021.04.03 |