본문 바로가기

Cloud/Oracle Cloud Infrastructure (OCI)

OCI상에서 ISTIO를 활용하여 구현한 Service Mesh - #11. 이스티오 데모 - 서비스 시각화 (키알리)

Oracle Cloud Infrastructure (OCI) 에서 이스티오(ISTIO)를 활용한 서비스 메쉬(Service Mesh)에 대한 기술 정리 및 이를 데모로 구현한 내용을 정리합니다.

글 순서

1. Overview

2. 이스티오 작동 방식

3. 이스티오 데모 - 사전 준비

4. 이스티오 데모 - 쿠버네티스 대쉬보드 설치/설정

5. 이스티오 데모 - 이스티오 설치, 엔보이 프록시 주입

6. 이스티오 데모 - 샘플 어플리케이션 (Bookinfo) 배포

7. 이스티오 데모 - 카나리 배포

8. 이스티오 데모 - 결함 주입(Fault Injection)

9. 이스티오 데모 - 서비스 시각화 (프로메테우스)

10. 이스티오 데모 - 서비스 시각화 (그라파나)

11. 이스티오 데모 - 서비스 시각화 (키알리)

12. 이스티오 데모 - 서비스 시각화 (예거)

 

REFERENCES

아래 도서 및 사이트를 참조하여 작성한 문서입니다.

  • 도메인 주도 설계로 시작하는 마이크로 서비스 개발 (위키북스)
  • 쿠버네티스 완벽 가이드 (길벗)
  • Istio로 시작하는 서비스 메시 (에이콘)
  • Isitio Documentation

 

쿠버네티스 서비스 시각화

프로메테우스(Prometheus)로 쿠버네티스 클러스터의 메트릭을 수집하고, 그라파나(Grafana), 키알리(Kiali), 예거(Yaeger) 등으로 수집된 메트릭을 시각화할 수 있습니다. 이를 살펴보겠습니다.

 

키알리 (Kiali)

키알리는 서비스 메시 구성 및 검증 기능을 갖춘 이스티용 관찰(observability) 콘솔입니다. 트래픽 흐름을 모니터링해서 토폴로지를 추론하고 오류를 보고함으로써 서비스 메시의 구조와 상태를 이해하는 데 도움이 됩니다. 키알리는 상세 메트릭을 제공하며, 그라파나와 통합할 수 있습니다. 분산 트레이싱은 예거(Jaeger)와 함께 통합되어 제공됩니다.

키알리의 설치는 앞선 프로메테우스, 그라파나와 마찬가지로 kubecctl 명령으로 이스티오에서 제공하는 매니페스타 파일을 통해 간단히 설치하는 방법, 사용자 정의 설치 방법이 있습니다. 여기에서는 아래와 같이 kubectl 명령으로 설치했습니다.

[opc@demo ~]$ kubectl apply -f <https://raw.githubusercontent.com/istio/istio/release-1.14/samples/addons/kiali.yaml>
serviceaccount/kiali created
configmap/kiali created
clusterrole.rbac.authorization.k8s.io/kiali-viewer created
clusterrole.rbac.authorization.k8s.io/kiali created
clusterrolebinding.rbac.authorization.k8s.io/kiali created
role.rbac.authorization.k8s.io/kiali-controlplane created
rolebinding.rbac.authorization.k8s.io/kiali-controlplane created
service/kiali created
deployment.apps/kiali created

 

키알리 설치가 완료되면, istio-system 네임스페이스에 디플로이먼트, 파드, 서비스 등이 생성된 것을 알 수 있습니다.

[opc@demo ~]$ kubectl get deploy,po,svc -n istio-system
NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/grafana                1/1     1            1           3h18m
deployment.apps/istio-egressgateway    1/1     1            1           2d3h
deployment.apps/istio-ingressgateway   1/1     1            1           2d3h
deployment.apps/istiod                 1/1     1            1           2d3h
deployment.apps/kiali                  0/1     1            0           26s
deployment.apps/prometheus             1/1     1            1           40h

NAME                                        READY   STATUS    RESTARTS   AGE
pod/grafana-67f5ccd9d7-6n9jp                1/1     Running   0          3h18m
pod/istio-egressgateway-7fcb98978c-fx89l    1/1     Running   1          2d3h
pod/istio-ingressgateway-55b6cffcbc-24plw   1/1     Running   1          2d3h
pod/istiod-56d9c5557-nxnvj                  1/1     Running   1          2d3h
pod/kiali-6b455fd9f9-fnxjz                  0/1     Running   0          26s
pod/prometheus-7cc96d969f-jjjxk             2/2     Running   2          40h

NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                                                      AGE
service/grafana                ClusterIP      10.96.225.188   <none>          3000/TCP                                                                     3h18m
service/istio-egressgateway    ClusterIP      10.96.214.122   <none>          80/TCP,443/TCP                                                               2d3h
service/istio-ingressgateway   LoadBalancer   10.96.160.55    150.230.7.116   15021:30353/TCP,80:30445/TCP,443:32751/TCP,31400:32043/TCP,15443:32178/TCP   2d3h
service/istiod                 ClusterIP      10.96.139.78    <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        2d3h
service/kiali                  ClusterIP      10.96.143.128   <none>          20001/TCP,9090/TCP                                                           26s
service/prometheus             ClusterIP      10.96.121.169   <none>          9090/TCP                                                                     40h

 

istioctl 명령으로 대쉬보드를 오픈합니다.

[opc@demo ~]$ istioctl dashboard kiali
<http://localhost:20001/kiali>

istioctl 명령으로 리턴된 URL로 접속하면 카일리 초기 화면을 볼 수 있습니다.

 

몇차례 Bookinfo 어플리케이션을 웹 브라우저에서 호출하고 카일리로 돌아오면 메트릭이 업데이트되고 있음을 확인할 수 있습니다.

왼쪽의 Graph 옵션을 선택하고, 상단의 Namespace에서 default 또는 istio-system을 선택하면 실패한 호출을 포함해서 트래픽의 경로를 확인할 수 있습니다. 카나리 배포를 하는 경우, 트래픽이 어떻게 전환되는지 (Traffic Shifting)도 화면으로 확인할 수 있습니다.

 

왼쪽의 Services 옵션을 선택하며 서비스별 트래픽 경로를 확인할 수 있습니다.

 

특정 서비스를 선택하면, 보다 상세한 경로를 확인할 수 있습니다.

 

<END>