Ssoon
[4주차] 관찰 가능성(네트워크 동작 시각화하기) : Kiali로 시각화하기 본문
📊 Kiali로
Istio 서비스 메쉬 시각화
- Kiali는 Istio 서비스 메쉬를 실시간으로 시각화하고 분석할 수 있는 강력한 오픈 소스 대시보드입니다. Prometheus 메트릭과 Jaeger 추적 데이터를 활용해 서비스 간 상호작용을 그래프로 보여주며, 문제 진단과 트래픽 흐름 파악을 돕습니다.
🛠️ Kiali 설치하기
- Kiali는 Istio와 함께 기본 제공되는 샘플 버전이 있지만, 실제 환경에서는 Kiali Operator를 사용하는 것이 권장됩니다.
Kiali는 Prometheus에 의존하므로, Prometheus가 사전에 설치되어 있어야 합니다. - 다음으로, Helm을 사용해 Kiali Operator를 설치합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ helm repo add kiali https://kiali.org/helm-charts
"kiali" has been added to your repositories
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "eks" chart repository
...Successfully got an update from the "kiali" chart repository
...Successfully got an update from the "flagger" chart repository
...Successfully got an update from the "prometheus-community" chart repository
Update Complete. ⎈Happy Helming!⎈
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ helm install --namespace kiali-operator --create-namespace --version 1.63.2 kiali-operator kiali/kiali-operator
NAME: kiali-operator
LAST DEPLOYED: Tue Apr 29 15:17:12 2025
NAMESPACE: kiali-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Welcome to Kiali! For more details on Kiali, see: https://kiali.io
The Kiali Operator [v1.63.2] has been installed in namespace [kiali-operator]. It will be ready soon.
You have elected not to install a Kiali CR. You must first install a Kiali CR before you can access Kiali. The operator is watching all namespaces, so you can create the Kiali CR anywhere.
If you ever want to uninstall the Kiali Operator, remember to delete the Kiali CR first before uninstalling the operator to give the operator a chance to uninstall and remove all the Kiali Server resources.
(Helm: Chart=[kiali-operator], Release=[kiali-operator], Version=[1.63.2])
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ kubectl get pod -n kiali-operator
NAME READY STATUS RESTARTS AGE
kiali-operator-584858fb7-q6v9c 1/1 Running 0 63s
참고: Kiali는 Prometheus에서 수집한 Istio 메트릭을 시각화하므로, Prometheus 설치가 필수입니다.
- 이제 istio-system 네임스페이스에 Kiali 인스턴스를 생성합니다.
아래는 Prometheus와 Jaeger에 연결하는 Kiali 설정 예제입니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ cat ch8/kiali.yaml
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
namespace: istio-system
name: kiali
spec:
istio_namespace: "istio-system"
istio_component_namespaces:
prometheus: prometheus
auth:
strategy: anonymous #인증 전략을 익명(anonymous)으로 설정합니다; 로그인 없이 Kiali에 접근
deployment:
accessible_namespaces:
- '**' #Kiali가 모든 네임스페이스(**)에 접근
external_services: #Kiali가 사용하는 외부 서비스 설정
prometheus:
cache_duration: 10 #캐시 지속 시간을 10(초) 단위
cache_enabled: true #Prometheus 데이터 캐싱을 활성화
cache_expiration: 300 #캐시 만료 시간을 300초(5분)로 설정
url: "http://prom-kube-prometheus-stack-prometheus.prometheus:9090" # Prometheus 서비스의 URL을 지정
tracing: #분산 트레이싱 관련 설정
enabled: true #트레이싱 기능을 활성화
in_cluster_url: "http://tracing.istio-system:16685/jaeger" #클러스터 내부에서 사용할 Jaeger 트레이싱 서비스의 URL을 지정
use_grpc: true #트레이싱 서비스와 통신할 때 gRPC 프로토콜을 사용하도록 설정
- 이 설정은 익명 인증(anonymous authentication)을 사용하며, Prometheus와 Jaeger에 연결합니다. 이 설정을 적용합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ kubectl apply -f ch8/kiali.yaml
kiali.kiali.io/kiali created
- Kiali 인스턴스가 istio-system 네임스페이스에서 실행 중인지 확인합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ kubectl get deploy,svc -n istio-system kiali
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/kiali 1/1 1 1 35s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kiali ClusterIP 10.200.1.176 <none> 20001/TCP,9090/TCP 34s
- NodePort 변경 및 nodeport kiali(30003)
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ kubectl patch svc -n istio-system kiali -p '{"spec": {"type": "NodePort", "ports": [{"port": 20001, "targetPort": 20001, "nodePort": 30003}]}}'
service/kiali patched
- Kiali 대시보드의 Overview 화면은 서비스 메쉬의 전반적인 상태를 보여줍니다.
- 익명 인증 대신 OpenID Connect(OIDC) 같은 보안 인증을 설정할 수 있습니다.
Kiali Operator를 사용해 Kiali를 설치하고,
Prometheus와 Jaeger에 연결해 서비스 메쉬를 시각화할 수 있습니다.
📈 Kiali 대시보드 탐색하기
Kiali는 Grafana와 달리 서비스 간 상호작용을 실시간 그래프로 보여주는 데 초점을 맞춥니다. Grafana는 게이지, 차트 중심의 대시보드를 제공하지만, Kiali는 서비스 메쉬의 트래픽 흐름과 건강 상태를 직관적으로 확인할 수 있는 인터랙티브 그래프를 제공합니다.
Overview 대시보드
Kiali 대시보드에 접속하면 Overview 화면이 표시됩니다. 이 화면은 각 네임스페이스와 그 안에서 실행 중인 애플리케이션 수, 그리고 애플리케이션의 건강 상태를 시각적으로 보여줍니다. 예를 들어, istioinaction 네임스페이스 옆의 초록색 체크마크를 클릭하면 해당 네임스페이스의 애플리케이션 상세 정보로 이동합니다.
Graph 탭
- 왼쪽 메뉴에서 Graph 탭을 클릭하면 서비스 메쉬의 트래픽 흐름을 보여주는 방향 그래프(directed graph)가 나타납니다. 의미 있는 그래프를 보기 위해 트래픽을 생성합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-QMAIJOE:~/aews-labs/istio-in-action/book-source-code-master$ while true; do curl -s http://webapp.istioinaction.io:30000/api/catalog ; date "+%Y-%m-%d %H:%M:%S" ; sleep 1; echo; done
- 몇 초 후, Kiali의 Graph 탭에서 다음과 같은 정보를 확인할 수 있습니다.
- 트래픽의 이동 경로와 흐름
- 바이트 수, 요청 수
- 카나리 배포나 가중치 라우팅 같은 다중 트래픽 흐름
- 초당 요청 수(requests/second) 및 트래픽 비율
- 네트워크 트래픽 기반 애플리케이션 건강 상태
- HTTP/TCP 트래픽
- 네트워킹 오류(빠르게 식별 가능)
Figure 8.15: 네임스페이스 내 서비스 간 연결과 트래픽 흐름을 시각화한 그래프입니다.
- 특정 워크로드를 선택하면 해당 워크로드와 관련된 트래픽 및 추적 데이터를 상세히 볼 수 있습니다.
Kiali의 Graph 탭은 서비스 메쉬의 트래픽 흐름을 실시간으로 시각화하며,
애플리케이션 건강 상태와 오류를 직관적으로 파악할 수 있습니다.
🔗 추적, 메트릭, 로그의 상관관계 분석
- Kiali는 추적, 메트릭, 로그를 통합해 서비스 메쉬의 관찰 가능성(observability)을 강화합니다. 이를 통해 디버깅 과정에서 여러 도구 간 전환 없이 문제를 빠르게 분석할 수 있습니다.
- Workloads 메뉴에서 특정 워크로드를 선택하면 다음 정보를 볼 수 있습니다.
- Inbound Metrics 탭은 메트릭과 추적의 상관관계를 보여줍니다.
- Overview: 워크로드의 Pod, 적용된 Istio 설정, 업스트림/다운스트림 그래프
- Traffic: 인바운드/아웃바운드 트래픽의 성공률
- Logs: 애플리케이션 로그, Envoy 액세스 로그, Span의 상관관계
- Inbound/Outbound Metrics: Span과 연계된 메트릭
- Traces: Jaeger에서 보고된 추적 데이터
- Envoy: 워크로드에 적용된 Envoy 설정(클러스터, 리스너, 라우트)
- 예를 들어, 요청 지연 시간(request duration)이 급등하면, Kiali는 해당 요청이 새 버전의 애플리케이션이나 성능 저하된 서비스에서 처리되었는지 추적과 함께 보여줍니다. 이를 통해 디버깅이 훨씬 간편해집니다.
Kiali는 추적, 메트릭, 로그를 상관관계 분석해 디버깅을 간소화하며,
워크로드별 상세 정보를 제공합니다.
🆚 Kiali에서 워크로드와 애플리케이션의 차이
- Kiali는 워크로드와 애플리케이션을 구분합니다. 초보자가 혼동하기 쉬운 이 개념을 간단히 정리하면 다음과 같습니다.
- 워크로드: 동일한 바이너리가 복제본으로 실행되는 단위. 예: Kubernetes Deployment의 Pod. 서비스 A의 3개 복제본은 하나의 워크로드입니다.
- 애플리케이션: 여러 워크로드와 서비스, 설정 등이 묶인 그룹. 예: 서비스 A, 서비스 B, 데이터베이스가 함께 하나의 애플리케이션을 구성합니다.
워크로드는 실행 단위(Pod), 애플리케이션은 워크로드와 서비스의 집합입니다.
✅ Kiali의 Istio 리소스 검증
- Kiali는 서비스 메쉬 운영자에게 유용한 검증 기능을 제공합니다. 다음은 Kiali가 검증할 수 있는 Istio 리소스 문제의 예입니다.
- 존재하지 않는 Gateway를 가리키는 VirtualService
- 존재하지 않는 대상으로의 라우팅
- 동일한 호스트에 대한 중복 VirtualService
- 서비스 서브셋 누락
Kiali는 Istio 리소스 설정 오류를 검증해 운영자가 문제를 빠르게 파악할 수 있도록 돕습니다.
📌 핵심 요약
- Kiali 설치: Kiali Operator를 사용해 설치하며, Prometheus와 Jaeger에 연결해 메트릭과 추적 데이터를 시각화합니다.
- 대시보드 기능: Overview와 Graph 탭을 통해 네임스페이스 상태, 트래픽 흐름, 애플리케이션 건강 상태를 실시간으로 확인할 수 있습니다.
- 상관관계 분석: 추적, 메트릭, 로그를 통합해 디버깅을 간소화하며, 워크로드별 세부 정보를 제공합니다.
- 워크로드 vs 애플리케이션: 워크로드는 Pod 단위, 애플리케이션은 워크로드와 서비스의 집합으로 구분됩니다.
- 리소스 검증: Kiali는 VirtualService, Gateway 등의 설정 오류를 검증해 운영 효율성을 높입니다.
- Kiali는 Istio 서비스 메쉬의 관찰 가능성과 문제 진단을 위한 강력한 도구로, Grafana와 달리 서비스 간 상호작용을 그래프로 시각화합니다.
📈 Istio 관찰 가능성:
요약과 결론
📊 Prometheus와 Grafana로 메트릭 시각화
- Prometheus를 사용해 Istio의 데이터 플레인과 컨트롤 플레인에서 메트릭을 수집했습니다.
- Prometheus는 서비스와 컨트롤 플레인의 상태를 실시간으로 스크랩(scrape)하며, 이를 Grafana 대시보드에서 시각화할 수 있도록 데이터를 제공합니다.
- Grafana는 Istio와 함께 제공되는 기본 대시보드를 활용해 다음과 같은 정보를 보여줍니다.
- 서비스 수준: 개별 서비스의 성능과 트래픽 상태
- 컨트롤 플레인 수준: Istio의 관리 컴포넌트 상태
- 이를 통해 서비스 메쉬의 전반적인 건강 상태를 직관적으로 파악할 수 있습니다.
Prometheus는 메트릭을 수집하고,
Grafana는 이를 시각화해 서비스와 컨트롤 플레인의 상태를 모니터링합니다.
🔍 분산 추적으로 요청 흐름 분석
- 분산 추적(distributed tracing)은 복잡한 마이크로서비스 환경에서 요청의 지연 원인을 파악하는 강력한 방법입니다. Istio는 OpenTracing 표준을 지원하며, 개발자가 요청에 메타데이터를 추가해 상관관계(correlation)를 설정할 수 있도록 돕습니다.
- Istio는 다음과 같은 방식으로 추적을 자동화합니다.
- 요청에 Zipkin 헤더(x-b3-*)를 자동 주입
- Span 데이터를 Jaeger 같은 백엔드 추적 엔진으로 전송
- 이를 통해 다중 홉(multi-hop) 서비스 호출 그래프에서 어떤 부분이 지연을 유발하는지 쉽게 확인할 수 있습니다.
분산 추적은 요청 흐름과 지연을 분석하며,
Istio는 메타데이터와 Span을 자동으로 처리해 Jaeger로 전송합니다.
🖼️ Kiali로 서비스 메쉬 시각화
- Kiali는 서비스 메쉬의 트래픽 흐름을 그래프로 시각화하는 도구로, Prometheus 메트릭과 Jaeger 추적 데이터를 통합합니다.
- Kiali는 Grafana와 달리 서비스 간 상호작용을 방향 그래프(directed graph)로 보여주며, 트래픽 흐름과 설정 문제를 직관적으로 탐색할 수 있습니다.
- Kiali의 주요 기능은 다음과 같습니다.
- 서비스 간 트래픽 흐름 시각화
- 애플리케이션 건강 상태 표시
- Istio 리소스 설정 검증(예: VirtualService, Gateway 오류)
- Kiali를 사용하면 서비스 메쉬의 동작을 한눈에 파악하고, 문제 발생 시 원인을 빠르게 진단할 수 있습니다.
Kiali는 트래픽 흐름과 설정을 그래프로 시각화해 서비스 메쉬의 동작을 쉽게 이해하고 문제를 진단합니다.
📌 핵심 요약
- Prometheus와 Grafana: Prometheus는 데이터와 컨트롤 플레인의 메트릭을 수집하고, Grafana는 이를 시각화해 서비스 메쉬의 상태를 모니터링합니다.
- 분산 추적: Istio는 Zipkin 헤더를 자동 주입하고 Span을 Jaeger로 전송해 다중 홉 요청의 지연을 분석합니다.
- Kiali: 서비스 간 트래픽 흐름을 그래프로 보여주며, 설정 검증과 문제 진단을 지원합니다.
- 다음 단계: 트래픽 보안을 위해 Istio의 보안 기능을 탐구할 예정입니다.
- Istio의 관찰 가능성 도구는 메트릭, 추적, 시각화를 통해 마이크로서비스 환경을 효과적으로 관리하고 문제를 해결합니다.
'Istio Hands-on Study [1기]' 카테고리의 다른 글
[5주차] 마이크로서비스 통신 보안 : 자동 mTLS (0) | 2025.04.22 |
---|---|
[5주차] 마이크로서비스 통신 보안 : 애플리케이션-네트워킹 보안의 필요성 (0) | 2025.04.22 |
[4주차] 관찰 가능성(네트워크 동작 시각화하기) : 분산 추적 (0) | 2025.04.22 |
[4주차] 관찰 가능성(서비스 동작 이해) : Istio의 표준 메트릭 사용자 지정 (0) | 2025.04.22 |
[4주차] 관찰 가능성(서비스 동작 이해) : Prometheus로 Istio 메트릭 스크래핑 (0) | 2025.04.22 |