서비스 메시 Istio 설정 및 사용 방법

Istio 설정 및 사용 방법: Java 서비스 Pod 관점

Java 기반 마이크로서비스를 Kubernetes에 배포할 때, Istio 서비스 메쉬를 연동하는 과정과 설정을 Pod 관점에서 단계별로 정리합니다. 아래 절차를 따라하면 서비스에 별도 통신·보안 로직 추가 없이 Istio의 다양한 기능을 활용할 수 있습니다.


1. Istio 설치 (Kubernetes 클러스터 기준)

a. Istio CLI 설치

  • Istio 공식 설치 가이드 따라 istioctl 툴을 다운로드 받아 환경 변수에 등록합니다.

b. Istio 컴포넌트 설치

  • 기본적으로 demo 프로필 등으로 인스톨합니다:

bash
istioctl install --set profile=demo -y
  • 설치가 완료되면 istio-system 네임스페이스에 Istio 관련 Pod가 생성됩니다.

bash
kubectl get pods -n istio-system

2. 사이드카 프록시(Envoy)의 자동 주입 설정

Istio는 Java 서비스 Pod에 Envoy 사이드카 프록시를 자동으로 붙여줍니다.

  • Pod가 속한 네임스페이스에 다음과 같이 라벨을 추가합니다:

bash
kubectl label namespace [네임스페이스] istio-injection=enabled

예시: 기본 네임스페이스에 적용할 경우

bash
kubectl label namespace default istio-injection=enabled

이제 default 네임스페이스의 모든 새로 배포되는 Pod은 자동으로 Envoy 사이드카가 추가됩니다.​


3. Java 마이크로서비스(Pod) 배포

  • Java(Spring Boot 등) 서비스 코드를 Docker 이미지화하여 Kubernetes에 배포합니다.

  • 일반적인 Deployment 및 Service YAML을 작성하며, 별도의 Istio 설정이 필요없습니다.

  • 배포 시 Pod spec에 자동으로 Envoy 프록시 컨테이너가 추가됩니다.

  • (참고) 필요시 수동으로 istioctl kube-inject -f deployment.yaml 사용해 사이드카 주입 가능하지만, 자동 주입 권장.


4. Istio 리소스(예: 트래픽 관리, 보안) 추가 설정

Pod에 사이드카가 붙었다면, Istio의 다양한 기능을 사용할 수 있습니다:

  • VirtualService, DestinationRule 등 Istio 리소스를 정의해 트래픽 라우팅 및 제어 구현

예시)

text
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: my-java-service
spec:
hosts:
- my-java-service
http:
- route:
- destination:
host: my-java-service
port:
number: 8080

5. 모니터링 및 관측(Observability)

서비스 메시 Istio 설정 및 사용 방법

Pod 수준에서 Istio가 자동으로 트래픽, 지표(metrics), 트레이싱 데이터를 수집하므로, 아래 추가 툴 설치로 시각화 가능:

  • Kiali, Prometheus, Grafana, Jaeger/Zipkin 등 지원


6. 커스텀 사이드카(Advanced)

  • Pod spec 또는 Deployment spec에 애노테이션 추가하여 프록시 CPU/메모리 등 리소스 세부 조정 가능.

  • ex) Pod 또는 Template의 metadata.annotations에 sidecar.istio.io/proxyCPU: "200m" 등 설정


요약

  1. Istio 설치 및 네임스페이스 라벨링

  2. Java 서비스 이미지 배포 → 자동으로 사이드카 프록시 주입

  3. Istio 리소스(VirtualService, DestinationRule) 등으로 트래픽 및 정책 조정

  4. 모니터링 및 관측: Pod 수준의 트래픽 흐름 자동 수집 및 시각화

이 과정을 거치면 별도 애플리케이션 코드 변경 없이, Java 서비스 Pod에서 Istio가 제공하는 로드밸런싱, TLS 암호화, 장애복구, 모니터링 기능을 활용할 수 있습니다.