Oracle Cloud Infrastructure (OCI) 에서 이스티오(ISTIO)를 활용한 서비스 메쉬(Service Mesh)에 대한 기술 정리 및 이를 데모로 구현한 내용을 정리합니다.
글 순서
5. 이스티오 데모 - 이스티오 설치, 엔보이 프록시 주입
6. 이스티오 데모 - 샘플 어플리케이션 (Bookinfo) 배포
8. 이스티오 데모 - 결함 주입(Fault Injection)
REFERENCES
아래 도서 및 사이트를 참조하여 작성한 문서입니다.
- 도메인 주도 설계로 시작하는 마이크로 서비스 개발 (위키북스)
- 쿠버네티스 완벽 가이드 (길벗)
- Istio로 시작하는 서비스 메시 (에이콘)
- Isitio Documentation
쿠버네티스 서비스 시각화
프로메테우스(Prometheus)로 쿠버네티스 클러스터의 메트릭을 수집하고, 그라파나(Grafana), 키알리(Kiali), 예거(Yaeger) 등으로 수집된 메트릭을 시각화할 수 있습니다. 이를 살펴보겠습니다.
그라파나 (Grafana)
그라파나는 이스티오에 대한 대쉬보드를 구성하는데 사용할 수 있는 오픈소스 모니터링 솔루션입니다. 그라파나를 이용해서 서비스 메쉬 내 어플리케이션과 이스티오의 상태를 모니터링 할 수 있습니다.
그라파나에서 사용자 정의로 대쉬보드를 꾸밀 수 있지만, 이스티오는 서비스 메쉬와 컨트롤 플레인에 대한 주요 메트릭을 미리 설정한 아래와 같은 대쉬보드로 제공하고 있습니다. 여기에서는 이를 활용할 것입니다.
- 메쉬 대쉬보드: 메쉬에 있는 모든 서비스에 대한 개요 제공
- 서비스 대쉬보드: 서비스에 대한 메트릭을 상세히 구분해서 제공
- 워크로드 대쉬보드: 워크로드에 대한 메트릭을 상세히 구분해서 제공
- 성능 대쉬보드: 메쉬의 자원 사용에 대한 모니터링 제공
- 컨트롤 플레인 대쉬보드: 컨트롤 플레인의 상태와 성능에 대한 모니터링 제공
이러한 대쉬보드를 사용하기 위한 그라파나 설정은 kubectl 명령으로 배포하는 방법, grafana.com에서 제공하는 배포 사항을 임포트하는 방법, Helm Chart 등을 이용해서 사용자 정의로 설치/설정하는 방법 등이 있습니다. 여기에서는 가장 간단한 방법인 kubectl 명령으로 배포합니다.
아래와 같이 kubectl 명령으로 그라파나 매니페스트 파일을 적용합니다.
[opc@demo ~]$ kubectl apply -f <https://raw.githubusercontent.com/istio/istio/release-1.14/samples/addons/grafana.yaml>
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards 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 2m11s
deployment.apps/istio-egressgateway 1/1 1 1 2d
deployment.apps/istio-ingressgateway 1/1 1 1 2d
deployment.apps/istiod 1/1 1 1 2d
deployment.apps/prometheus 1/1 1 1 37h
NAME READY STATUS RESTARTS AGE
pod/grafana-67f5ccd9d7-6n9jp 1/1 Running 0 2m11s
pod/istio-egressgateway-7fcb98978c-fx89l 1/1 Running 1 2d
pod/istio-ingressgateway-55b6cffcbc-24plw 1/1 Running 1 2d
pod/istiod-56d9c5557-nxnvj 1/1 Running 1 2d
pod/prometheus-7cc96d969f-jjjxk 2/2 Running 2 37h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/grafana ClusterIP 10.96.225.188 <none> 3000/TCP 2m11s
service/istio-egressgateway ClusterIP 10.96.214.122 <none> 80/TCP,443/TCP 2d
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 2d
service/istiod ClusterIP 10.96.139.78 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 2d
service/prometheus ClusterIP 10.96.121.169 <none> 9090/TCP 37h
이제 그라파나 UI를 통해서 이스티오 대쉬보드를 오픈합니다. 아래 kubectl 명령으로 서비스에 포트 포워딩을 통해 대쉬보드에 접속할 수도 있습니다만, istioctl 명령으로도 가능합니다.
kubectl -n istio-system port-forward service/grafana 3000
istioctl 명령으로 대쉬보드를 오픈합니다.
[opc@demo ~]$ istioctl dashboard grafana
<http://localhost:3000>
istioctl 명령으로 리턴된 URL로 접속하면 그라파나 초기 화면을 볼 수 있습니다.
다음은 메쉬 대쉬보드 접속 URL입니다.
http://localhost:3000/d/G8wLrJIZk/istio-mesh-dashboard
몇차례 Bookinfo 어플리케이션을 웹 브라우저에서 호출하고 그라파나로 돌아오면 메쉬의 서비스에 대한 메트릭이 업데이트되고 있음을 확인할 수 있습니다.
아래는 서비스 대쉬보드 접속 URL입니다. 서비스에 대한 메트릭 정보를 확인할 수 있습니다.
http://localhost:3000/d/LJ_uJAvmk/istio-service-dashboard
서비스 대쉬보드 General 항목의 모니터링 화면입니다.
서비스 대쉬보드 Client Workloads 항목의 모니터링 화면입니다.
서비스 대쉬보드 Service Workloads 항목의 모니터링 화면입니다.
아래는 워크로드 대쉬보드 접속 URL입니다. 워크로드에 대한 메트릭 정보를 확인할 수 있습니다.
http://localhost:3000/d/UbsSZTDik/istio-workload-dashboard
워크로드 대쉬보드 General 항목의 모니터링 화면입니다.
워크로드 대쉬보드 Inbound Workloads 항목의 모니터링 화면입니다.
워크로드 대쉬보드 Outbound Services 항목의 모니터링 화면입니다.
<END>