본문 바로가기

Cloud/Oracle Cloud Infrastructure (OCI)

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

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) 등으로 수집된 메트릭을 시각화할 수 있습니다. 이를 살펴보겠습니다.

 

예거 (Jaeger)

예거는 오픈소스 엔드 투 엔드 분산 트레이싱 솔루션으로 사용자가 복잡한 분산 시스템에서 트랜잭션을 모니터링하고 트러블슈팅할 수 있도록 해 줍니다.

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

[opc@demo ~]$ kubectl apply -f <https://raw.githubusercontent.com/istio/istio/release-1.14/samples/addons/jaeger.yaml>
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector 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           3h59m
deployment.apps/istio-egressgateway    1/1     1            1           2d4h
deployment.apps/istio-ingressgateway   1/1     1            1           2d4h
deployment.apps/istiod                 1/1     1            1           2d4h
deployment.apps/jaeger                 1/1     1            1           35s
deployment.apps/kiali                  1/1     1            1           40m
deployment.apps/prometheus             1/1     1            1           41h

NAME                                        READY   STATUS    RESTARTS   AGE
pod/grafana-67f5ccd9d7-6n9jp                1/1     Running   0          3h59m
pod/istio-egressgateway-7fcb98978c-fx89l    1/1     Running   1          2d4h
pod/istio-ingressgateway-55b6cffcbc-24plw   1/1     Running   1          2d4h
pod/istiod-56d9c5557-nxnvj                  1/1     Running   1          2d4h
pod/jaeger-78cb4f7d4b-s4p97                 1/1     Running   0          35s
pod/kiali-6b455fd9f9-fnxjz                  1/1     Running   0          40m
pod/prometheus-7cc96d969f-jjjxk             2/2     Running   2          41h

NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                                                      AGE
service/grafana                ClusterIP      10.96.225.188   <none>          3000/TCP                                                                     3h59m
service/istio-egressgateway    ClusterIP      10.96.214.122   <none>          80/TCP,443/TCP                                                               2d4h
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   2d4h
service/istiod                 ClusterIP      10.96.139.78    <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        2d4h
service/jaeger-collector       ClusterIP      10.96.116.9     <none>          14268/TCP,14250/TCP,9411/TCP                                                 35s
service/kiali                  ClusterIP      10.96.143.128   <none>          20001/TCP,9090/TCP                                                           40m
service/prometheus             ClusterIP      10.96.121.169   <none>          9090/TCP                                                                     41h
service/tracing                ClusterIP      10.96.243.54    <none>          80/TCP,16685/TCP                                                             35s
service/zipkin                 ClusterIP      10.96.24.189    <none>          9411/TCP                                                                     35s
[opc@demo ~]$

 

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

[opc@demo ~]$ istioctl dashboard jaeger
<http://localhost:16686>

 

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

 

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

왼쪽의 Service 목록에서 모니터링 하려는 서비스를 선택하면 옵션을 선택하고, 해당 서비스의 트레이스 목록을 볼 수 있습니다. 여기에서는 productpage.default를 선택했습니다.

 

각 트레이스를 선택하면 상세 내용을 볼 수 있습니다. 여기에서는 “istio-ingressgateway.istio-system: productpage.default.svc.cluster.local:9080/productpage 1d48293”에 대한 상세 정보입니다.

 

각 항목을 선택하면 좀 더 자세한 내용을 확인할 수 있습니다.

 

<END>