서비스 메쉬(Service Mesh)는 마이크로서비스 아키텍처에서 서비스 간의 통신을 제어하고 관찰하며 보안을 강화하기 위한 인프라 계층이다. Istio는 이러한 서비스 메쉬를 구현하는 대표적인 오픈소스 도구이다. 본 글에서는 Istio의 설치부터 샘플 애플리케이션 배포, 그리고 트래픽 관리의 기초를 다룬다. 환경은 minikube로 진행했다.
1. Istio 설치 및 환경 구성
Istio 설치는 공식 스크립트를 통해 수행한다. 설치 후 실행 파일의 경로를 환경 변수에 추가.
curl -L https://istio.io/downloadIstio | sh -
export PATH="$PATH:/home/ygbaek/istio-1.29.0/bin"
설치가 완료되면 istioctl x precheck 명령을 통해 현재 쿠버네티스 클러스터가 Istio를 설치하기에 적합한 상태인지 확인한다. 'No issues found' 메시지가 출력되면 설치 준비 완료.
2. 모니터링 및 시각화 도구 설치
Istio는 서비스 간의 관계를 시각화하고 메트릭을 수집하기 위한 여러 애드온을 제공한다. samples/addons 디렉토리에 포함된 매니페스트를 적용하여 Kiali, Prometheus, Grafana, Jaeger 등을 설치한다.
kubectl apply -f samples/addons
설치된 구성 요소는 istio-system 네임스페이스에서 확인할 수 있다.
Kiali는 서비스 간의 연결 관계(Graph)를 시각적으로 보여주는 도구이다. 다음 명령어로 Kiali 대시보드에 접속할 수 있다.
istioctl dashboard kiali
3. 사이드카 주입 및 샘플 앱 배포
Istio가 트래픽을 가로채고 제어하기 위해서는 각 Pod에 istio-proxy라는 사이드카 컨테이너가 함께 실행되어야 한다. 이를 위해 특정 네임스페이스에 자동 주입 설정을 적용한다.
kubectl label namespace default istio-injection=enabled
이후 Istio에서 제공하는 샘플 애플리케이션인 Bookinfo를 배포한다.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml


4. 외부 접속 설정 (Gateway)
클러스터 외부에서 내부 서비스에 접속하기 위해서는 Istio Ingress Gateway를 설정해야 한다. 게이트웨이와 가상 서비스(VirtualService) 설정을 적용한다.
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Minikube 환경에서는 다음 명령어로 게이트웨이의 URL을 확인할 수 있으며, 필요한 경우 포트 포워딩을 통해 접속한다.
kubectl port-forward -n istio-system svc/istio-ingressgateway 38080:80
http://localhost:38080/productpage에 접속하여 애플리케이션이 정상 작동하는지 확인한다.
5. 트래픽 Graph 확인
kiali 대시보드 => 왼쪽 메뉴 Traffic Graph => 상단 Namespace 선택 => 그래프 위 Display 드롭다운 메뉴에서 Traffic Animation 체크 => 이전 단계에서 배포한 샘플 웹페이지 http://localhost:38080/productpage 여러번 새로고침하면 다음과 같이 Traffic Animation을 볼 수 있다.

6. 트래픽 관리와 가중치 설정
Istio의 핵심 기능 중 하나는 세밀한 트래픽 제어이다. DestinationRule로 서비스의 버전(subset)을 정의하고, VirtualService로 각 버전으로 흐르는 트래픽의 비율을 조정할 수 있다.
예를 들어, reviews 서비스의 트래픽을 v1과 v2에 50%씩 분산하는 설정은 다음과 같다.
# 1. 샘플 앱 각 버전(v1, v2, v3) 정의 적용
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
# 2. v1과 v2에 50%씩 트래픽 분산 설정 적용
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v2
weight: 50
이러한 설정을 통해 카나리 배포나 A/B 테스트를 손쉽게 수행할 수 있다.
다음 그림을 보면 v1, v2로 트래픽이 가고 v3쪽에 트래픽이 없음을 확인할 수 있다.

'Cloud' 카테고리의 다른 글
| AWS Cross-Account CloudWatch 메트릭 수집 (0) | 2026.02.25 |
|---|---|
| AWS IRSA 개념과 적용 방법 (0) | 2025.12.03 |
| AWS IAM Roles Anywhere - 외부 워크로드에 임시 자격 증명 사용하기 (0) | 2025.10.28 |