Istio Service Mesh 환경에 Kiali 를 사용해 서비스 간 호출 추적 진행

이 블로그 포스트에서는 Istio Service Mesh 환경에서 Kiali 를 사용하여 서비스 간 호출 및 이벤트를 추적하는 방법에 대해 단계별로 안내합니다. Kiali 의 설치 및 설정 과정부터 시작하여, Kiali를 활용한 서비스 호출 추적 및 문제 해결 방법을 다룰 것입니다. 이를 통해 여러분은 마이크로서비스 환경을 보다 효과적으로 관리하고 최적화할 수 있는 방법을 배우게 될 것입니다.

목차

1. Istio Service Mesh란?
 1-1. Istio Service Mesh 의 정의 및 역할
2. Kiali란?
 2-1. Kiali의 정의 및 역할
3. Istio Service Mesh 환경에 Kiali 설치 및 설정
 3-1. Kiali 설치 및 Istio Service Mesh 와 통합
 3-2. Kiali 대시보드 접근 및 기본 사용법

1. Istio Service Mesh란?

Istio Service Mesh

마이크로서비스 아키텍처는 여러 개의 독립적인 서비스가 협력하여 하나의 애플리케이션을 구성하는 방식입니다. 이러한 분산 시스템에서 서비스 간의 통신을 효과적으로 관리하고 보안을 강화하며, 성능을 최적화하는 것은 매우 중요합니다. Istio Service Mesh 는 이러한 문제를 해결하기 위한 강력한 Service Mesh 솔루션입니다.

1-1. Istio Service Mesh 의 정의 및 역할

Istio는 오픈소스 서비스 메시(Service Mesh)로, 마이크로서비스 애플리케이션의 네트워크를 관리하고 보호하는 데 도움을 줍니다. Istio는 다음과 같은 핵심 역할을 수행합니다.

  1. 트래픽 관리:
    • Istio는 서비스 간의 트래픽을 지능적으로 라우팅하고 분산시킵니다. 이를 통해 서비스 간의 통신을 최적화하고, 장애 발생 시에도 안정적으로 서비스가 제공되도록 합니다.
    • 다양한 트래픽 제어 기능을 제공하여 A/B Testing, Canary 배포 및 Blue/Green 배포와 같은 배포 전략을 쉽게 구현할 수 있습니다.
  2. 보안:
    • Istio는 서비스 간 통신을 암호화하고 인증 및 권한 부여를 관리하여 보안을 강화합니다. 이를 통해 데이터 전송의 기밀성과 무결성을 보장합니다.
    • TLS(Transport Layer Security) 암호화를 사용하여 서비스 간의 통신을 보호합니다.
  3. 정책 적용:
    • Istio는 서비스 간의 정책을 중앙에서 관리하고 적용할 수 있습니다. 이를 통해 트래픽 제어, 접근 제어, 속도 제한 (rate limiting) 등의 정책을 일관되게 적용할 수 있습니다.
    • Istio는 서비스 간의 트래픽을 제어하기 위해 복잡한 정책을 정의하고 적용할 수 있도록 지원합니다.
  4. 텔레메트리 수집:
    • Istio는 Service Mesh 내의 트래픽을 모니터링하고, Log, Metrics 및 Tracing 데이터를 수집합니다. 이를 통해 운영자가 시스템의 상태를 실시간으로 모니터링하고, 문제를 빠르게 발견하고 해결할 수 있습니다.
    • PrometheusGrafana와 같은 도구와 통합하여 시각화 및 모니터링을 제공합니다.

Istio는 이러한 기능들을 통해 마이크로서비스 아키텍처의 복잡성을 줄이고, 운영의 효율성을 높이며, 보안을 강화합니다.

2. Kiali란?

Istio Service Mesh kiali

마이크로서비스 아키텍처에서는 서비스 간의 복잡한 상호작용을 이해하고 관리하는 것이 매우 중요합니다.
Istio는 이러한 통신을 제어하고 보안을 강화하는 데 도움을 주지만, 실제로 서비스 간의 호출 흐름을 시각화하고 분석하는 데는 추가적인 도구가 필요합니다.
Kiali는 이러한 필요를 충족시키기 위해 개발된 도구로, Istio 환경에서 서비스 간의 트래픽을 모니터링하고 시각화하는 데 도움을 줍니다.

2-1. Kiali의 정의 및 역할

Kiali는 Istio 환경을 모니터링하고 시각화하는 오픈소스 도구입니다. Kiali는 Istio Service Mesh의 트래픽 흐름을 시각적으로 표현하여 운영자가 서비스 간의 관계와 상호작용을 쉽게 이해할 수 있도록 도와줍니다. Kiali의 주요 역할은 다음과 같습니다:

  1. 서비스 그래프 시각화:
    • Kiali는 Istio Service Mesh 내의 서비스 간 호출 흐름을 시각적인 그래프로 표시합니다. 이를 통해 운영자는 서비스 간의 트래픽 패턴을 한눈에 파악할 수 있습니다.
    • 서비스 간의 관계, 트래픽 양, 호출 성공 및 실패 여부 등을 그래프 형태로 제공하여 문제를 신속하게 진단할 수 있습니다.
  2. 트래픽 흐름 분석:
    • Kiali는 서비스 간의 트래픽 흐름을 분석하고, 호출 지연이나 오류 발생 지점을 식별할 수 있도록 돕습니다. 이를 통해 성능 병목 현상이나 장애를 조기에 발견하고 해결할 수 있습니다.
    • 실시간 트래픽 모니터링을 통해 현재 시스템 상태를 지속적으로 파악할 수 있습니다.
  3. Istio 설정 검증:
    • Kiali는 Istio 설정을 검증하고, 설정 오류나 비정상적인 상태를 감지하여 운영자에게 알립니다. 이를 통해 설정 오류로 인한 문제를 미연에 방지할 수 있습니다.
    • Istio 설정 변경 사항을 추적하고, 설정이 의도한 대로 작동하는지 확인할 수 있습니다.
  4. 메트릭 및 로깅 통합:
    • Kiali는 PrometheusJaeger와 같은 모니터링 및 트레이싱 도구와 통합되어, Service Mesh 내의 메트릭스와 로그 데이터를 수집하고 시각화합니다.
    • 이를 통해 운영자는 보다 심층적인 분석을 수행하고, 시스템의 상태를 종합적으로 모니터링할 수 있습니다.

3. Istio Service Mesh 환경에 Kiali 설치 및 설정

Istio 설치 및 NGINX Ingress Controller를 통한 Istio Service Mesh 구현 과정은 아래 블로그 포스트를 참조하세요.
해당 블로그 포스트는 베어메탈 (Bare-Metal) 클러스터에서 가이드를 진행합니다.

NGINX STORE: Istio Sidecar 를 설치하고 NGINX Plus Ingress Controller 와 통합하기

3-1. Kiali 설치 및 Istio Service Mesh 와 통합

Istio는 Istio Service Mesh 환경에서 Kiali를간편하게 배포할 수 있는 addon 형식의 yaml 파일을 제공합니다.

GitHub: https://github.com/istio/istio/blob/master/samples/addons/kiali.yaml

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.22/samples/addons/kiali.yaml
Istio Service Mesh kubectl apply

kubectl 명령어를 통해 배포된 Kiali 서비스를 확인합니다.

Istio Service Mesh kubectl get

Kiali 서비스를 NodePort 타입으로 변경하여 포트를 통해 외부에서 서비스를 접근할 수 있도록 kubectl edit 명령어를 사용하여 서비스를 수정합니다.

Istio Service Mesh kubectl edit
Istio Service Mesh selector

48번째 줄의 type: ClusterIP 부분을 아래 사진과 같이 NodePort 타입으로 변경합니다.

변경 후 배포된 서비스를 확인해보면, Kiali 서비스가 NodePort 타입으로 배포되어 포트포워딩 된 것을 확인할 수 있습니다.

3-2. Kiali 대시보드 접근 및 기본 사용법

웹 브라우저에서 NodePort 타입으로 배포한 Kiali 서비스에 접근합니다.

클러스터에 Prometheus가 배포되어 있지 않다면 아래 사진과 같이 에러 알림이 발생합니다.

Kiali 대시보드에 메트릭을 표시하기 위해 Istio의 Prometheus addon을 클러스터에 배포합니다.

GitHub: https://raw.githubusercontent.com/istio/istio/master/samples/addons/prometheus.yaml

kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/addons/prometheus.yaml

kubectl 명령어를 통해 Prometheus가 배포된 것을 확인합니다.

다시 Kiali 대시보드를 확인해보면, Namespace 별로 수집된 메트릭을 가시화 할 수 있습니다.

또한 Workloads 탭에서 서비스 별로 로그, InBound/OutBound 트래픽 등 상세한 메트릭을 확인할 수 있습니다.

Envoy Sidecar 프록시가 서비스 별로 OutBound 트래픽에 배포된 것을 확인할 수 있습니다.

Istio Service Mesh 환경에서의 NGINX Ingress Controller를 운영하는 방법에 대해 자세히 알고 싶으신가요?
NGINX STORE의 블로그를 참고하거나 문의를 통해 궁금한 점을 질문해주세요.

아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required