이번 글에서는 Istio의 Observability(관측 가능성)를 강화하는 두 핵심 도구인 Kiali와 Jaeger를 실습 기반으로 비교 분석합니다.
helm repo add kiali https://kiali.org/helm-charts
helm repo update
helm install --namespace kiali-operator \
--create-namespace \
--version 1.63.2 \
kiali-operator kiali/kiali-operator
Kiali는 CustomResourceDefinition을 통해 인스턴스를 생성합니다.
# kiali.yaml
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
namespace: istio-system
name: kiali
spec:
istio_namespace: "istio-system"
auth:
strategy: anonymous
deployment:
accessible_namespaces:
- '*'
external_services:
prometheus:
url: "http://prometheus.istio-system:9090"
tracing:
enabled: true
in_cluster_url: "http://tracing.istio-system:16685/jaeger"
use_grpc: true
적용:
kubectl apply -f kiali.yaml
kubectl patch svc -n istio-system kiali \
-p '{"spec": {"type": "NodePort", "ports": [{"port": 20001, "targetPort": 20001, "nodePort": 30003}]}}'
open http://127.0.0.1:30003
설치 완료 후 Kiali 접속 시 Overview 화면에서 네임스페이스별 애플리케이션과 트래픽 상태를 바로 확인할 수 있습니다.
httpbin 서비스를 istioinaction 네임스페이스에 배포하고, Gateway와 VirtualService로 접근 경로를 설정합니다.
# coolstore-gateway.yaml
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: coolstore-gateway
namespace: istioinaction
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "httpbin.istioinaction.io"
# thin-httpbin-virtualservice.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: thin-httpbin-virtualservice
namespace: istioinaction
spec:
hosts:
- "httpbin.istioinaction.io"
gateways:
- coolstore-gateway
http:
- route:
- destination:
host: httpbin.istioinaction.svc.cluster.local
port:
number: 8000
적용:
kubectl apply -f coolstore-gateway.yaml
kubectl apply -f thin-httpbin-virtualservice.yaml
NodePort 포트를 확인 후 반복 호출:
curl -H "Host: httpbin.istioinaction.io" http://127.0.0.1:<NodePort>/headers
또는 반복 자동 호출:
for i in {1..100}; do
curl -s -H "Host: httpbin.istioinaction.io" http://127.0.0.1:<NodePort>/headers > /dev/null
sleep 0.5
done
NodePort는 다음 명령어로 확인:
minikube service istio-ingressgateway -n istio-system
istio-ingressgateway → httpbin 방향의 요청 흐름이 화살표로 시각화됨.0.8 rps, 5ms, 100% success 등으로 현재 트래픽 상태를 직관적으로 확인.
Overview 화면에서는 네임스페이스별 애플리케이션과 워크로드 상태를 표시.Applications, Workloads, Services, Istio Config 뷰를 통해 리소스 설정까지 추적 가능.Inbound, Outbound 트래픽 성공률, 평균 응답시간 확인.istio-ingressgateway, httpbin 등의 Span으로 구성되어 수집됨.Trace 클릭 시:
요청 헤더, 응답 상태, 오류 유무, 태그 정보 확인 가능X-B3-* 헤더로 전달된 Trace ID가 상속되는 구조를 확인 가능함
| 항목 | Kiali | Jaeger |
|---|---|---|
| 중심 관점 | 서비스 간 트래픽 흐름 | 개별 요청의 세부 흐름 분석 |
| 분석 단위 | 애플리케이션, 워크로드, 서비스, 리소스 | Trace, Span (요청 단위) |
| 주요 기능 | 실시간 RPS, 지연시간, 오류율, 구성 검증 | 요청 시간 분석, 오류 트레이싱, 헤더 확인 |
| 용도 | 운영자 중심 시각화 | 디버깅 중심 상세 분석 |
| 한계 | 세부 요청 정보 부족 | 흐름 전체에 대한 구조적 시각화 부족 |
예시: Kiali에서는 “httpbin이 호출되지 않는다”는 걸 전체 흐름 속에서 화살표 미존재로 파악하고,
Jaeger에서는 “호출됐지만 1단계에서 500 에러가 났다”는 걸 span 내부에서 확인한다.