Istio 서비스매쉬 개요
Istio는 마이크로서비스 간 통신을 관리하는 오픈소스 서비스매쉬로, 서비스 간 트래픽 제어, 보안(mTLS), 관찰성(로그/메트릭/트레이스) 등을 제공한다. Kubernetes 환경에서 주로 사용하며, 각 서비스에 Envoy 프록시 사이드카를 삽입하여 동작한다. Istio는 제어면(Control Plane)과 데이터면(Data Plane)으로 구성된다.
설치 단계
-
istioctl 설치
-
istioctl은 Istio 설치 및 관리 CLI 도구이다.
-
다음 명령어로 최신 버전 istioctl을 설치한다.
bashcurl -L https://istio.io/downloadIstio | sh -
-
설치 후 환경변수에 경로 추가:
bashexport PATH=$PWD/istio-<version>/bin:$PATH
-
설치 확인:
bashistioctl version
-
-
Istio 클러스터에 설치
-
기본 프로파일로 Istio를 Kubernetes 클러스터에 설치:
bashistioctl install --set profile=default -y
-
namespace 자동 사이드카 주입 활성화 (예: default namespace):
bashkubectl label namespace default istio-injection=enabled
-
설치 확인용 Bookinfo 예제 배포(옵션):
bashkubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
-
설치 후 Pod 상태 확인 및 Istio 서비스 정상작동 여부 점검
-
-
모니터링 도구 배포 (선택)
-
Kiali, Prometheus, Grafana, Jaeger 배포:
bashkubectl apply -f samples/addons
-
Kiali 대시보드 조회:
bashistioctl dashboard kiali
-
주요 기능 사용법
-
트래픽 관리: VirtualService, DestinationRule 커스텀 리소스(CRD) 이용해 서비스 라우팅, 카나리 배포, 트래픽 분할 설정 가능
-
보안: 서비스 간 mTLS 암호화, 인증 및 권한 부여 정책 설정
-
관찰성: 메트릭, 트레이스, 로그 수집과 시각화
-
오류 주입 및 회복: 타임아웃, 재시도, 회로 차단기 설정 가능
Java 마이크로서비스 Istio 연동 샘플
Istio를 사용할 때 특별한 코드 변경은 필요 없으나, Java Spring Boot 기반 예제로 Istio가 적용된 Kubernetes 환경에서 서비스가 동작하는 예시를 제공한다.
// 간단한 Spring Boot REST 컨트롤러 예시
package com.example.istiodemo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/hello")
public String hello() {
return "Hello from Istio-enabled Java microservice!";
}
}
-
이 서비스를 컨테이너화한 뒤 Kubernetes에 배포한다.
-
Istio가 설치된 클러스터에서 자동 사이드카 주입(namespace에 레이블 설정)을 통해 Envoy 프록시가 자동으로 삽입된다.
-
서비스 간 호출 시 Istio의 트래픽 관리 및 보안 정책이 자동 적용된다.
더 나아가 Java 마이크로서비스에 외부 설정을 통한 서비스 디스커버리, 트래픽 분할(예: Canary), 무중단 배포 등이 Istio 리소스 정의와 함께 활용된다.
필요하면 구체적인 Istio YAML 설정 예시나, Java 서비스의 Istio 연동을 위한 Kubernetes 배포 매니페스트도 제공 가능하다.

Istio 서비스매쉬를 Docker 환경에서 사용하려면 Kubernetes 클러스터 환경이 필요하며, Docker Desktop에 내장된 Kubernetes를 활용하는 방법이 가장 대표적입니다.
Docker Desktop에서 Istio 사용법
-
Docker Desktop 환경 준비
-
Docker Desktop 설정에서 Kubernetes 활성화
-
CPU 4개 이상, RAM 8GB 이상 할당 권장
-
Kubernetes 클러스터가 정상 동작하는지 확인
bashkubectl get nodes
-
-
istioctl 설치
-
istioctl 클라이언트 도구를 설치한다.
bashcurl -L https://istio.io/downloadIstio | sh -
export PATH=$PWD/istio-<version>/bin:$PATH
istioctl version
-
-
Istio 설치
-
Kubernetes 클러스터에 Istio 설치
bashistioctl install --set profile=default -y
-
Istio 시스템 네임스페이스 확인
bashkubectl get namespace istio-system
kubectl get pods -n istio-system
-
-
네임스페이스에 사이드카 자동 주입 활성화
-
기본 네임스페이스나 특정 네임스페이스에 레이블 추가하여 사이드카 프록시 자동 주입 설정
bashkubectl label namespace default istio-injection=enabled
-
-
테스트용 샘플 앱 배포 및 확인
-
예제 Bookinfo 앱 배포하여 Istio 기능 확인
bashkubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
-
사이드카 프록시가 Pod에 자동으로 주입되었는지 확인
bashkubectl get pods
kubectl describe pod <pod-name>
-
-
대시보드 사용 (옵션)
-
Kiali, Grafana, Prometheus 등의 모니터링 도구 설치 및 대시보드 실행 가능
bashistioctl dashboard kiali
-
참고
-
Docker로 Kubernetes 클러스터를 띄운 후, istioctl로 Istio를 설치하는 구조입니다.
-
Istio 자체의 Docker 이미지는 Istio 구성요소(예: istio-proxy, istio-operator) 용이며 직접 실행하기보다 Kubernetes 내부에서 사이드카로 사용됩니다.
-
클러스터 없이 순수 Docker 컨테이너만으로 Istio를 운용하는 일반적인 사례는 없습니다.
이 방법으로 로컬 Docker Desktop Kubernetes 클러스터에서 Istio 서비스매쉬를 운영할 수 있습니다.