본문 바로가기
Infra, Cloud/Kubernetes

Istio Service Mesh 시각화, Kiali Operator 구축 가이드

by J4J 2025. 11. 26.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 kiali operator를 구축하여 istio service mesh 시각화하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

관련 글

 

Helm 이란? Helm 입문을 위한 기본 개념 설명

 

Helm 이란? Helm 입문을 위한 기본 개념 설명

안녕하세요. J4J입니다. 이번 포스팅은 helm 입문을 위한 기본 개념 설명하는 시간을 가져보려고 합니다. Helm 이란? helm이라고 하는 것은 kubernetes를 사용하는 환경에서 kubernetes cluster가 관리하는 영

jforj.tistory.com

 

Kubernetes Service Mesh 구축 가이드: Istio에 대한 이해와 Istio Operator 설치 방법

 

Kubernetes Service Mesh 구축 가이드: Istio에 대한 이해와 Istio Operator 설치 방법

안녕하세요. J4J입니다. 이번 포스팅은 kubernetes service mesh 구축을 위한 istio에 대한 이해와 istio operator 설치하는 방법에 대해 적어보는 시간을 가져보려고 합니다. Service Mesh kubernetes 환경에서 마이

jforj.tistory.com

 

Kubernetes 모니터링 구축: Helm으로 kube-prometheus-stack 설치하기 (Docker Desktop)

 

Kubernetes 모니터링 구축: Helm으로 kube-prometheus-stack 설치하기 (Docker Desktop)

안녕하세요. J4J입니다. 이번 포스팅은 kubernetes 모니터링을 위한 helm으로 kube-prometheus-stack을 설치하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 관련 글 Helm 이란? Helm 입문을 위한 기본

jforj.tistory.com

 

Jaeger Operator를 구축하여 Trace 시각화하기: OpenTelemetry 연동 가이드

 

Jaeger Operator를 구축하여 Trace 시각화하기: OpenTelemetry 연동 가이드

안녕하세요. J4J입니다. 이번 포스팅은 jaeger operator를 구축하여 trace 시각화하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 관련 글 OpenTelemetry 구축 가이드: OTel Collector를 이용하여 메트릭,

jforj.tistory.com

 

 

반응형

 

 

Kiali

 

kiali는 service mesh 구축을 위해 사용된 istio를 시각화하고 모니터링 할 수 있도록 도와주는 오픈소스입니다.

 

kiali를 구축하여 사용하게 되면 kubernetes 내부에 구성된 서비스들의 토폴로지, 트래픽 흐름, 서비스 상태 등을 편리하게 확인하여 서비스의 구조와 health 상태를 이해하는데 도움을 줄 수 있습니다.

 

 

 

아무래도 개인적으로 가장 크게 활용될 부분은 서비스 메시 전체 네트워크 토폴로지와 서비스 간 트래픽 흐름이라고 생각합니다.

 

kubernetes 서비스들에 대해 모니터링을 할 수 있는 다양한 백엔드 서비스들이 존재하지만, 서비스들의 관계성과 실시간 트래픽의 흐름이 어떤지를 확인할 수 있는 것은 마땅히 존재하지 않습니다.

 

그래서 kiali를 사용하게 된다면 현재 흐름이 어떤지 시각적으로 바로 확인할 수 있고, kiali를 통해 장애가 발생된 곳이 확인되면 jaeger, kibana, loki 등의 백엔드 서비스를 이용하여 추가적인 모니터링 관점으로 넘어갈 수 있습니다.

 

 

 

게다가 kiali는 istio 설정 관리를 할 수 있도록 도와줍니다.

 

policy / gateway / filter 설정 등 istio를 이용해 설정할 수 있는 다양한 유형의 정보들이 kubernetes 내부에 무엇이 존재하는지 확인할 수 있고, 또한 UI를 이용하여 편리하게 생성도 해볼 수 있습니다.

 

그래서 istio의 설정을 시각화하고 싶다면 kiali를 구축하는 것은 필수적인 요소가 될 수 있습니다.

 

 

 

마지막으로 kiali는 prometheus, grafana, jaeger 등의 백엔드 서비스를 연동하여 더 다양한 기능들을 활용할 수 있습니다.

 

prometheus의 경우 수집된 metric 정보를 kiali에서 사용하여 서비스 간 요청량, 실패율, latency 정보들이 시각화되어 더 많은 정보들을 제공해 줍니다.

 

grafana의 경우 kiali에서 보고 있는 metric 정보와 관련 있는 대시보드로 즉시 이동되고, 대시보드가 확인될 수 있도록 도와줍니다.

 

jaeger의 경우 kiali에서 확인하고 있는 트래픽에 연결된 trace 정보를 활용하여 trace의 상세 요청 처리를 볼 수 있는 jaeger UI로 이동되는 기능이 제공됩니다.

 

이들 중 모니터링을 위해 사용되고 있는 서비스들이 존재한다면 당연히 설정 정보들을 추가하여 함께 활용하는 방안을 권장합니다.

 

 

 

 

Kiali 설치 전 백엔드 서비스 설정

 

서비스 설정하는 것에 대해서는 위에서 언급한 prometheus, grafana, jaeger에 대해서만 얘기해 보겠습니다.

 

 

 

[ prometheus, jaeger ]

 

이 두 서비스의 경우에는 특별하게 설정할 것은 크게 없습니다.

 

단순히 prometheus와 jaeger로 접속할 수 있는 url만 외부에 노출되어 있기만 하면 됩니다.

 

 

 

[ grafana ]

 

grafana를 연동하고자 하는 경우 크게 2가지를 수행해야 합니다.

 

  • istio를 위한 dashboard 구성
  • grafana access token 발급

 

 

가장 먼저 dashboard 구성에 대해 알아보겠습니다.

 

Kiali 공식 문서를 확인해 보면 kiali CRD에 다음과 같이 dashboard 설정이 담겨 있는 것을 볼 수 있습니다.

 

Kiali CR Reference

Reference page for the Kiali CR. The Kiali Operator will watch for resources of this type and install Kiali according to those resources' configurations.

kiali.io

 

grafana:
  dashboards:
  - name: "Istio Service Dashboard"
    variables:
      datasource: "var-datasource"
      namespace: "var-namespace"
      service: "var-service"
      version: "var-version"
  - name: "Istio Workload Dashboard"
    variables:
      datasource: "var-datasource"
      namespace: "var-namespace"
      workload: "var-workload"
      version: "var-version"
  - name: "Istio Mesh Dashboard"
  - name: "Istio Control Plane Dashboard"
  - name: "Istio Performance Dashboard"
  - name: "Istio Wasm Extension Dashboard"

 

 

이것들은 kiali를 통해서 grafana로 이동될 때 사용되는 dashboard 들이며, 커스터 마이징 한 dashboard를 구성할 수도 있지만 별도의 추가 작업을 하지 않는 경우 기본 설정에 있는 것들이 그대로 활용됩니다.

 

그래서 연결하는 grafana에 dashboard 구성이 이루어져 있어야 올바르게 kiali를 통해 grafana를 연동할 수 있습니다.

 

dashboard 구성을 위한 방식은 여러 가지가 있지만 가장 심플한 방법은 다음과 같은 순서대로 진행해 주시면 됩니다.

 

 

 

1. Istio 공식 문서에 접속하여 Configuration에 존재하는 모든 dashboard 링크 클릭 후 최신 버전 다운로드

istio 공식 문서에 접속하여 grafana에 구성할 수 있는 dashboard json 파일을 다운로드하는 페이지

 

 

2. Grafana 접속 > Dashboards 메뉴 접속 > New 버튼 클릭 > Import 선택

grafana에 접속하여 dashboard를 import 할 수 있는 버튼을 클릭

 

 

3. JSON 파일 업로드하는 곳에 dashboard 링크 클릭하여 다운로드한 json 파일들을 모두 업로드

grafana에서 dashboard를 import 할 수 있는 페이지

 

 

4. 최종적으로 다음과 같이 모든 dashboard가 구성되도록 설정

grafana에 json 파일을 import하여 구성된 istio를 위한 dashboard

 

 

 

 

다음으로는 grafana access token 발급이 필요합니다.

 

kiali에서 grafana를 연동할 때 OIDC 기반의 접근을 위해 access token을 발급하여 kiali 설정에 추가해야 합니다.

 

그래서 다음 순서대로 grafana에서 access token을 발급받고 이후에 kiali 구축을 진행할 때 사용될 secret까지 설정하겠습니다.

 

 

 

1. Grafana 접속 > Administration 하위 Service Accounts 메뉴 접속 > Add service account 버튼 클릭

grafana에서 service account를 생성하기 위한 페이지

 

 

2. Viewer Role을 부여한 service account 생성

grafana에서 service account 생성 페이지에 생성될 상세 정보 입력

 

 

3. Add service account token 버튼 클릭 > token 발급

grafana에서 service account 상세 페이지에 존재하는 token 생성

 

 

 

그러면 생성된 token 값이 무엇인지를 확인할 수 있고, token 정보를 copy 한 뒤 다음 명령어를 입력하여 kubernetes에 secret을 생성합니다.

 

$ kubectl create secret generic grafana-token-secret --from-literal=token="{ token 값 }" -n istio-system

 

 

 

 

Kiali 설치

 

kiali 설치는 operator를 이용하여 CRD 기반으로 관리되도록 구성합니다.

 

물론 operator를 사용하지 않아도 되지만 operator를 사용하게 되면 kubernetes에서 서비스의 관리들을 자동화할 수 있기 때문에 동일하게 구성해 보는 것을 권장합니다.

 

 

 

[ 1. helm repository 추가 ]

 

$ helm repo add kiali https://kiali.org/helm-charts
$ helm repo update

 

 

 

[ 2. namespace 생성 ]

 

$ kubectl create namespace kiali-operator

 

 

 

[ 3. kiali-operator 설치 ]

 

$ helm install kiali-operator kiali/kiali-operator -n kiali-operator

 

 

 

[ 4. kiali yaml 구성 ]

 

// kiali-values.yaml
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
  name: kiali
  namespace: istio-system
spec:
  istio_namespace: istio-system # istio namespace 설정
  
  deployment:
    cluster_wide_access: true # 모든 namespace에 있는 resource 접근

  auth:
    strategy: anonymous # 누구나 접근할 수 있도록 인증 전략 설정, openid 등을 활용한 보안 체계 권장

  external_services:
    # grafana 연동
    # 각 상세 화면에서 grafana 대시보드 링크 이동 기능 제공
    grafana:
      auth:
        # OIDC 기반 grafana 접속을 위한 auth 설정
        # grafana service account token을 이용하여 생성한 secret 값을 설정
        type: "bearer"
        token: "secret:grafana-token-secret:token"
      enabled: true
      # kubernetes 내부에 grafana가 존재하는 경우 내부 접근 가능한 url 설정
      # 내부에 존재하지 않은 경우 external_url과 동일하게 설정
      internal_url: "http://kube-prometheus-stack-grafana.monitoring.svc.cluster.local:80"
      # 외부에서 접근할 수 있는 grafana url 설정
      external_url: "http://localhost:3000"
      
    # prometheus 연동
    # 트래픽 그래프, 지연 시간 등 수집된 metric 정보를 이용하여 기능 제공
    prometheus:
      url: "http://kube-prometheus-stack-prometheus.monitoring.svc.cluster.local:9090"

    # jaeger 연동
    # 요청 흐름 정보를 이용하여 트레이스 보기 기능 제공
    tracing:
      enabled: true
      provider: jaeger
      use_grpc: true
      # kubernetes 내부에 jaeger가 존재하는 경우 내부 접근 가능한 url 설정
      # 내부에 존재하지 않은 경우 external_url과 동일하게 설정
      internal_url: "http://jaeger-query.observability.svc.cluster.local:16685"
      # 외부에서 접근할 수 있는 jaeger url 설정
      external_url: "http://localhost:16686"

 

 

 

[ 5. kiali 설치 ]

 

$ kubectl apply -f kiali-values.yaml

 

 

 

[ 6. kiali 설치 확인 ]

 

$ kubectl get pods -n istio-system
$ kubectl get kiali -n istio-system

 

 

 

[ 7. kiali ui 확인 ]

 

kiali GUI를 확인하기 위해서는 kiali를 위한 별도의 ingress 등을 추가 구축하여 사용하는 방법을 권장합니다.

 

다만, 저의 경우 가볍게 port-forward를 통해 확인해 보겠습니다.

 

$ kubectl port-forward svc/kiali -n istio-system 20001

 

 

 

port를 오픈하고 url을 입력하면 다음과 같이 kiali GUI를 확인할 수 있습니다.

 

kiali 구축을 통해 확인할 수 있는 kiali GUI의 메인 페이지

 

 

 

 

백엔드 서비스 설정으로 인해 확인되는 정보

 

[ 1. 백엔드 서비스 상태 확인 ]

 

가장 먼저 모든 백엔드 서비스를 올바르게 설정한 경우 GNB를 확인해 봐야 합니다.

 

이곳에 다음과 같이 Kubernetes에 대해 V 표시가 이루어져 있다면 kiali에서 모든 백엔드 서비스의 접근에 문제가 없다는 것을 의미합니다.

 

kiali GNB에서 연동할 백엔드 서비스들의 상태 정보를 확인

 

 

 

그리고 Mesh page의 링크를 클릭하여 접속하면 다음과 같이 시각적으로 서비스들 간 연결 상태와 관계를 확인할 수 있습니다.

 

kiali mesh 설정에 대한 네트워크 관계 확인

 

 

 

만약 이와 같이 표기가 되지 않는다면 연결된 서비스들의 url에 접근할 수 없거나, grafana token 값 및 secret 설정 등 잘못 구성된 정보들이 있을 것입니다.

 

설정된 값들을 다시 확인하여 올바르게 연결이 이루어지도록 설정 변경을 해주시면 됩니다.

 

 

 

[ 2. promethus ]

 

prometheus가 연동되어 확인되는 정보는 metric 데이터를 활용하여 노출시킬 수 있는 정보들입니다.

 

대표적으로 "Workloads > application 선택 > Outbound Metrics"에 접속해 보면 metric을 이용하여 요청/응답에 대한 그래프를 확인할 수 있습니다.

 

이곳에 그래프가 올바르게 보이지 않는다면 prometheus에 metric 데이터가 올바르게 수집되고 있는지 확인해야 하며, workload 외에도 metric과 관련된 기능이 존재하는 곳에 prometheus가 활용됩니다.

 

kiali에서 prometheus를 연결할 때 확인해 볼 수 있는 outbound metrics 탭

 

 

 

 

[ 3. grafana ]

 

grafana가 연동되어 확인되는 정보는 metric 정보에 부합한 dashboard로 즉시 이동할 수 있는 링크 기능입니다.

 

위에서 prometehus 검증을 위해 확인한 Outbound Metrics의 오른쪽을 보면 다음과 같이 grafana로 이동되는 링크가 표기됩니다.

 

workload, service 등 어떤 metric을 보고 있는지에 따라 연결되는 dashboard는 상이해지며 클릭을 하게 되면 다음과 같이 관찰하고 있는 metric에 부합한 grafana 대시보드로 이동됩니다.

 

kiali에서 grafana를 연결할 때 확인해 볼 수 있는 grafana 이동 링크

 

kiali에서 grafna 링크를 클릭하여 접속되는 grafana dashboard 페이지

 

 

 

개인적으로 grafana 설정을 테스트해보면서 가장 애를 먹은 상황은 GNB에 상태 값은 올바르게 표기되지만 grafana에 접근할 수 있는 링크가 kiali에 존재하지 않는 것입니다.

 

grafana 설정이 잘못되었거나 istio dashboard가 구성되어 있지 않은 경우에 링크가 kiali에 표기되지 않기 때문에 만약 저와 같이 링크가 보이지 않는 상황이라면 dashboard 상태 및 설정을 다시 한번 확인해 보셔야 합니다.

 

 

 

[ 4. jaeger ]

 

jaeger가 연동되어 확인되는 정보는 grafana와 동일하게 jaeger로 이동하는 링크가 추가되는 것입니다.

 

올바르게 설정이 되었을 경우 LNB와 Traces 탭에서 jaeger로 이동하는 링크를 확인할 수 있습니다.

 

kiali에서 jaeger를 연결할 때 확인해 볼 수 있는 jaeger이동 링크

 

 

 

 

 

 

 

이상으로 kiali operator를 구축하여 istio service mesh 시각화하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글