메시 시각화하기

메시 시각화하기 (Visualizing Your Mesh)

이 작업에서는 Istio 메시의 여러 부분을 시각화하는 방법을 보여드릴게요. Kiali 애드온을 설치하고, 웹 기반 GUI를 사용해서 메시의 서비스 그래프와 Istio 설정 객체를 확인할 수 있어요.

출처: Istio 문서

본문

이 작업은 Istio 메시의 다양한 측면을 시각화하는 방법을 알려드려요. 작업 과정에서 Kiali 애드온을 설치하고, 웹 기반 그래픽 사용자 인터페이스(GUI)를 사용해서 메시의 서비스 그래프와 Istio 설정 객체를 확인하게 돼요.

[!note] 이 작업은 Kiali가 제공하는 모든 기능을 다루지는 않아요. 지원하는 전체 기능에 대해 알고 싶다면 Kiali 웹사이트를 참고하세요. 이 작업은 예시로 Bookinfo 샘플 애플리케이션을 사용해요. Bookinfo 애플리케이션이 bookinfo 네임스페이스에 설치되어 있다고 가정할게요.

시작하기 전에 (Before you begin)

Kiali 설치 문서를 따라 클러스터에 Kiali를 배포하세요.

그래프 생성하기 (Generating a graph)

  1. 서비스가 클러스터에서 실행 중인지 확인하려면 다음 명령을 실행하세요.
$ kubectl -n istio-system get svc kiali
  1. Bookinfo URL을 확인하려면 Bookinfo 인그레스 GATEWAY_URL 확인 방법에 대한 지침을 따르세요.
  2. 메시로 트래픽을 보내는 방법은 세 가지가 있어요.
    • 웹 브라우저에서 http://$GATEWAY_URL/productpage에 접속하세요.
    • 다음 명령을 여러 번 실행하세요.
    $ curl http://$GATEWAY_URL/productpage
    
    • 시스템에 watch 명령이 설치되어 있다면, 다음 명령으로 요청을 계속해서 보낼 수 있어요.
    $ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
    
  3. Kiali UI를 열려면 Kubernetes 환경에서 다음 명령을 실행하세요.
$ istioctl dashboard kiali
  1. 로그인 직후 나타나는 Overview 페이지에서 메시의 개요를 확인할 수 있어요. Overview 페이지에는 메시에 서비스가 있는 모든 네임스페이스가 표시돼요.
  2. 네임스페이스 그래프를 보려면 Bookinfo 개요 카드의 케밥 메뉴에서 Graph 옵션을 선택하세요. 케밥 메뉴는 카드 오른쪽 위에 있으며 세로 점 3개처럼 생겼어요. 클릭하면 사용 가능한 옵션이 보여요.
  3. 그래프는 일정 시간 동안 서비스 메시를 통해 흐르는 트래픽을 나타내요. Istio 텔레메트리로 생성돼요.
  4. 메트릭 요약을 보려면 그래프에서 아무 노드나 엣지를 선택해서 오른쪽 요약 세부 정보 패널에 메트릭 세부 정보를 표시하세요.
  5. 다른 그래프 유형으로 서비스 메시를 보려면 Graph Type 드롭다운 메뉴에서 그래프 유형을 선택하세요. 선택할 수 있는 그래프 유형은 App, Versioned App, Workload, Service가 있어요.
    • App 그래프 유형은 앱의 모든 버전을 하나의 그래프 노드로 묶어요. 아래 예시는 reviews 앱의 세 버전을 나타내는 단일 reviews 노드를 보여줘요. Show Service Nodes 표시 옵션이 비활성화되어 있다는 점에 주의하세요.
    • Versioned App 그래프 유형은 앱의 각 버전에 대해 하나의 노드를 보여주는데, 특정 앱의 모든 버전을 함께 묶어요. 아래 예시는 reviews 앱의 세 버전을 나타내는 세 노드를 포함하는 reviews 그룹 박스를 보여줘요.
    • Workload 그래프 유형은 서비스 메시의 각 워크로드에 대해 하나의 노드를 보여줘요. 이 그래프 유형은 app과 version 레이블을 요구하지 않아요. 그래서 컴포넌트에 그런 레이블을 쓰지 않기로 했다면, 이 그래프 유형이 선택지가 될 수 있어요.
    • Service 그래프 유형은 메시의 서비스 트래픽을 높은 수준으로 집계해 보여줘요.

Istio 설정 조사하기 (Examining Istio configuration)

  1. 왼쪽 메뉴 옵션은 Applications, Workloads, Services, Istio Config 목록 뷰로 연결돼요. 아래 스크린샷은 Bookinfo 네임스페이스의 Services 정보를 보여줘요.

트래픽 이동 (Traffic Shifting)

Kiali 트래픽 이동 마법사를 사용해서 두 개 이상의 워크로드로 라우팅되는 요청 트래픽의 특정 비율을 정의할 수 있어요.

  1. bookinfo 그래프의 Versioned app graph를 보세요.
    • 각 워크로드로 라우팅되는 트래픽의 비율을 보려면 Traffic Distribution 엣지 레이블 Display 옵션을 활성화했는지 확인하세요.
    • 그래프의 서비스 노드를 보려면 Show Service Nodes Display 옵션을 활성화했는지 확인하세요.
  2. bookinfo 그래프에서 ratings 서비스(삼각형 노드)를 클릭해 ratings 서비스에 집중하세요. ratings 서비스 트래픽이 두 ratings 워크로드 v1과 v2에 고르게 분산되는 것(각 워크로드로 50%의 요청이 라우팅)을 확인할 수 있어요.
  3. 사이드 패널의 ratings 링크를 클릭해서 ratings 서비스의 세부 보기로 이동하세요. ratings 서비스 노드를 마우스 오른쪽 클릭하고 컨텍스트 메뉴에서 Details를 선택해도 돼요.
  4. Actions 드롭다운 메뉴에서 Traffic Shifting을 선택해 트래픽 이동 마법자에 접근하세요.
  5. 슬라이더를 드래그해서 각 워크로드로 라우팅할 트래픽의 비율을 지정하세요. ratings-v1은 10%, ratings-v2는 90%로 설정하세요.
  6. Preview 버튼을 클릭해 마법사가 생성할 YAML을 확인하세요.
  7. Create 버튼을 클릭하고 확인해서 새 트래픽 설정을 적용하세요.
  8. 왼쪽 탐색 막대에서 Graph를 클릭해 bookinfo 그래프로 돌아가세요. ratings 서비스 노드에 이제 virtual service 아이콘 배지가 붙은 것을 확인할 수 있어요.
  9. bookinfo 애플리케이션에 요청을 보내세요. 예를 들어 초당 한 개의 요청을 보내려면 시스템에 watch가 설치되어 있다면 다음 명령을 실행하면 돼요.
$ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
  1. 몇 분이 지나면 트래픽 비율이 새 트래픽 경로를 반영하는 것을 보게 될 거예요. 이로써 새 트래픽 경로가 전체 요청의 90%를 ratings-v2로 성공적으로 라우팅하고 있음을 확인할 수 있어요.

Istio 설정 검증하기 (Validating Istio configuration)

Kiali는 Istio 리소스가 적절한 관례와 의미론을 따르는지 검증할 수 있어요. Istio 리소스 설정에서 감지된 문제는 잘못된 설정의 심각도에 따라 오류 또는 경고로 표시돼요. Kiali가 수행하는 모든 검증 체크 목록은 Kiali validations 페이지에서 확인하세요.

[!note] Istio는 CI 파이프라인에서 사용할 수 있는 방식으로 분석을 제공하는 istioctl analyze를 제공해요. 두 접근 방식은 서로 보완적일 수 있어요. 서비스 포트 이름을 잘못된 설정으로 강제해서 Kiali가 어떻게 검증 오류를 보고하는지 확인해보세요.

  1. details 서비스의 포트 이름을 http에서 foo로 변경하세요.
$ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"foo"}]'
  1. 왼쪽 탐색 막대에서 Services를 클릭해 Services 목록으로 이동하세요.
  2. Namespace 드롭다운 메뉴에서 아직 선택되어 있지 않다면 bookinfo를 선택하세요.
  3. details 행의 Configuration 열에 오류 아이콘이 표시되는 것을 확인하세요.
  4. Name 열의 details 링크를 클릭해 서비스 세부 보기로 이동하세요.
  5. 오류 아이콘 위에 마우스를 올려 오류를 설명하는 툴팁을 표시하세요.
  6. 포트 이름을 다시 http로 변경해 설정을 수정하고 bookinfo를 정상 상태로 되돌리세요.
$ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"http"}]'

Istio 설정 YAML 보기 및 편집 (Viewing and editing Istio configuration YAML)

Kiali는 Istio 설정 리소스를 보기/편집하기 위한 YAML 편집기를 제공해요. YAML 편집기는 잘못된 설정을 감지하면 검증 메시지도 제공해요.

  1. bookinfo VirtualService에 오류를 넣어보세요.
$ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway-invalid"}]'
  1. 왼쪽 탐색 막대에서 Istio Config를 클릭해 Istio 설정 목록으로 이동하세요.
  2. Namespace 드롭다운 메뉴에서 아직 선택되어 있지 않다면 bookinfo를 선택하세요.
  3. 설정 문제를 알려주는 오류 아이콘을 확인하세요.
  4. bookinfo 행의 Configuration 열에서 오류 아이콘을 클릭해 bookinfo 가상 서비스 보기로 이동하세요.
  5. YAML 탭이 미리 선택되어 있어요. 검증 체크 알림이 연결된 행에 색상 하이라이트와 아이콘이 표시되는 것을 확인하세요.
  6. 빨간 아이콘 위에 마우스를 올려 오류를 유발한 검증 체크를 알려주는 툴팁 메시지를 확인하세요. 오류의 원인과 해결 방법에 대한 자세한 내용은 Kiali Validations 페이지에서 검증 오류 메시지를 찾아보세요.
  7. 가상 서비스 bookinfo를 원래 상태로 되돌리세요.
$ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway"}]'

추가 기능 (Additional Features)

Kiali에는 이 작업에서 다룬 것보다 훨씬 많은 기능이 있어요. 예를 들어 Jaeger 추적과의 통합이 있죠. 이런 추가 기능에 대한 자세한 내용은 Kiali 문서를 참고하세요. Kiali를 더 깊이 탐구하려면 Kiali Tutorial을 진행해 보는 것을 권장해요.

정리 (Cleanup)

후속 작업을 계획하지 않는다면 Bookinfo 샘플 애플리케이션과 Kiali를 클러스터에서 제거하세요.

  1. Bookinfo 애플리케이션을 제거하려면 Bookinfo 정리 지침을 참고하세요.
  2. Kubernetes 환경에서 Kiali를 제거하려면:
$ kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.31/samples/addons/kiali.yaml

더 알아보기 (Learn more)

  • Kiali 웹사이트와 Kiali 문서를 통해 Kiali의 전체 기능과 검증 규칙을 더 자세히 살펴볼 수 있어요.