2.4. 서비스 메시 이해
Red Hat OpenShift Service Mesh는 서비스 메시에서 네트워크로 연결된 마이크로 서비스에 대해 동작 정보 및 운영 제어용 플랫폼을 제공합니다. Red Hat OpenShift Service Mesh를 사용하면 OpenShift Container Platform 환경에서 마이크로 서비스를 연결, 보호 및 모니터링할 수 있습니다.
2.4.1. Red Hat OpenShift Service Mesh란 무엇입니까?
서비스 메시는 분산 마이크로 서비스 아키텍처에서 애플리케이션을 구성하는 마이크로 서비스 네트워크와 이러한 마이크로 서비스 간의 상호 작용입니다. 서비스 메시의 크기와 복잡성이 증가함에 따라 이를 이해하고 관리하는 것이 어려워질 수 있습니다.
오픈 소스 Istio 프로젝트를 기반으로 하는 Red Hat OpenShift Service Mesh는 서비스 코드를 변경할 필요 없이 기존 분산 애플리케이션에 투명 계층을 추가합니다. 마이크로 서비스 간의 모든 네트워크 통신을 차단하는 메시의 관련 서비스에 특수 사이드카 프록시를 배포하여 Red Hat OpenShift Service Mesh 지원을 서비스에 추가합니다. Service Mesh Control Plane 기능을 사용하여 서비스 메시를 구성하고 관리합니다.
Red Hat OpenShift Service Mesh를 사용하면, 다음과 같은 기능을 제공하는 배포된 서비스 네트워크를 쉽게 생성할 수 있습니다.
- 검색
- 로드 밸런싱
- 서비스 간 인증
- 장애 복구
- 지표
- 모니터링
Red Hat OpenShift Service Mesh는 다음과 같은 보다 복잡한 운영 기능을 제공합니다:
- A/B 테스트
- Canary 릴리스
- 액세스 제어
- 엔드 투 엔드 인증
2.4.2. 서비스 메시 아키텍처
서비스 메시 기술은 네트워크 통신 수준에서 작동합니다. 즉, 서비스 메시 구성 요소는 요청을 수정하거나, 리디렉션하거나, 다른 서비스에 새 요청을 생성하여 마이크로 서비스로 들어오고 나가는 트래픽을 캡처하거나 가로챕니다.
높은 수준에서 Red Hat OpenShift Service Mesh는 데이터 플레인과 컨트롤 플레인으로 구성됩니다.
데이터 플레인은 pod에서 애플리케이션 컨테이너와 함께 실행되며 서비스 메시의 마이크로 서비스 간 인바운드 및 아웃바운드 네트워크 통신을 가로채고 제어하는 지능형 프록시 집합입니다. 데이터 플레인은 인바운드(ingress) 및 아웃바운드(egress) 네트워크 트래픽을 가로채는 방식으로 구현됩니다. Istio 데이터 플레인은 Pod의 사이드 애플리케이션 컨테이너와 함께 실행되는 Envoy 컨테이너로 구성됩니다. Envoy 컨테이너는 pod 내외의 모든 네트워크 통신을 제어하는 프록시 역할을 합니다.
Envoy 프록시는 데이터 플레인 트래픽과 상호 작용하는 유일한 Istio 구성 요소입니다. 서비스 간에 들어오는 모든(ingress) 및 발신(egress) 네트워크 트래픽은 프록시를 통해 이동합니다. 또한 Envoy 프록시는 메시 내에서 서비스 트래픽과 관련된 모든 메트릭을 수집합니다. Envoy 프록시는 서비스와 동일한 Pod에서 실행되는 사이드카로 배포됩니다. Envoy 프록시는 메시 게이트웨이를 구현하는 데도 사용됩니다.
- 사이드카 프록시는 워크로드 인스턴스에 대한 인바운드 및 아웃바운드 통신을 관리합니다.
게이트웨이는 들어오거나 나가는 HTTP/TCP 연결을 수신하는 로드 밸런서 장치로 작동하는 프록시입니다. 게이트웨이 구성은 서비스 워크로드와 함께 실행되는 사이드카 Envoy 프록시가 아닌, 메시의 에지에서 실행되는 독립 실행형 Envoy 프록시에 적용됩니다. 게이트웨이를 사용하여 메시에 대한 인바운드 및 아웃바운드 트래픽을 관리하여 메시에 들어오거나 나가려는 트래픽을 지정할 수 있습니다.
- Ingress-gateway - Ingress 컨트롤러라고도 하는 Ingress 게이트웨이는 서비스 메시를 입력하는 트래픽을 수신하고 제어하는 전용 Envoy 프록시입니다. Ingress 게이트웨이를 사용하면 모니터링 및 경로 규칙과 같은 기능을 클러스터로 들어오는 트래픽에 적용할 수 있습니다.
- egress-gateway - 송신 컨트롤러라고도 하는 Egress 게이트웨이는 서비스 메시를 나가는 트래픽을 관리하는 전용 Envoy 프록시입니다. Egress Gateway를 사용하면 모니터링 및 경로 규칙과 같은 기능이 메시를 종료하는 트래픽에 적용할 수 있습니다.
컨트롤 플레인은 데이터 플레인을 구성하는 프록시를 관리하고 구성합니다. 구성에 대한 권한 있는 소스이며 액세스 제어 및 사용 정책을 관리하고 서비스 메시의 프록시에서 메트릭을 수집합니다.
Istio 컨트롤 플레인은 이전의 여러 컨트롤 플레인 구성 요소(Citadel, Galley, Pilot)를 단일 바이너리로 통합하는 Istiod로 구성됩니다. Istiod는 서비스 검색, 구성 및 인증서 관리를 제공합니다. 고급 라우팅 규칙을 Envoy 구성으로 변환하고 런타임 시 사이드카로 전달합니다.
- Istiod는 CA(인증 기관) 역할을 하며 데이터 플레인에서 보안 mTLS 통신을 지원하는 인증서를 생성할 수 있습니다. 이를 위해 외부 CA를 사용할 수도 있습니다.
- Istiod는 OpenShift 클러스터에 배포된 워크로드에 사이드카 프록시 컨테이너를 삽입하는 역할을 합니다.
Red Hat OpenShift Service Mesh는 istio-operator를 사용하여 컨트롤 플레인 설치를 관리합니다. Operator는 OpenShift 클러스터에서 공통 활동을 구현하고 자동화할 수 있는 소프트웨어입니다. 컨트롤러 역할을 하여 클러스터에서 원하는 오브젝트 상태(이 경우 Red Hat OpenShift Service Mesh 설치)를 설정하거나 변경할 수 있습니다.
또한 Red Hat OpenShift Service Mesh는 다음 Istio 추가 기능도 제품의 일부로 번들로 제공합니다.
- Kiali - Kiali는 Red Hat OpenShift Service Mesh의 관리 콘솔입니다. 대시보드, 관찰 기능, 강력한 구성 및 유효성 검사 기능을 제공합니다. 트래픽 토폴로지를 유추하고 서비스 메시의 구조를 표시하고 메시의 상태를 표시합니다. Kiali는 자세한 메트릭, 강력한 검증, Grafana에 대한 액세스, 분산 추적 플랫폼(Jaeger)과의 강력한 통합을 제공합니다.
- Prometheus - Red Hat OpenShift Service Mesh는 Prometheus를 사용하여 서비스의 원격 분석 정보를 저장합니다. Kiali는 Prometheus를 사용하여 메트릭, 상태 및 메시 토폴로지를 가져옵니다.
- Jaeger - Red Hat OpenShift Service Mesh는 분산 추적 플랫폼(Jaeger)을 지원합니다. Jaeger는 여러 서비스 간에 단일 요청과 관련된 추적을 중앙 집중화하고 표시하는 오픈소스 추적 기능 서버입니다. 분산 추적 플랫폼(Jaeger)을 사용하면 마이크로서비스 기반 분산 시스템을 모니터링하고 문제를 해결할 수 있습니다.
- Elasticsearch - Elasticsearch는 오픈 소스, 분산된 JSON 기반 검색 및 분석 엔진입니다. 분산 추적 플랫폼(Jaeger)은 영구 스토리지에 Elasticsearch를 사용합니다.
- Grafana - Grafana는 메시 관리자에게 Istio 데이터에 대한 고급 쿼리 및 메트릭 분석 및 대시보드를 제공합니다. 선택적으로 Grafana를 사용하여 서비스 메시 메트릭을 분석할 수 있습니다.
Red Hat OpenShift Service Mesh에서 지원되는 Istio 통합은 다음과 같습니다.
- 3scale - Istio는 Red Hat 3scale API Management 솔루션과 선택적 통합을 제공합니다. 2.1 이전 버전의 경우 이 통합은 3scale Istio 어댑터를 통해 수행되었습니다. 버전 2.1 이상의 경우 3scale 통합은 WebAssembly 모듈을 통해 수행됩니다.
3scale 어댑터 설치 방법에 대한 자세한 내용은 3scale Istio 어댑터 설명서를 참조하십시오.
2.4.3. Kiali 이해
Kiali는 서비스 메시의 마이크로 서비스와 해당 연결 방법을 표시하여 서비스 메시를 시각화할 수 있습니다.
2.4.3.1. Kiali 개요
Kiali는 OpenShift Container Platform에서 실행 중인 서비스 메시에 대한 관찰 기능을 제공합니다. Kiali는 Istio 서비스 메시를 정의하고 검증하며 관찰하는 데 도움이 됩니다. 이를 통해 토폴로지를 유추하여 서비스 메시의 구조를 이해하고 서비스 메시의 상태에 대한 정보를 제공할 수 있습니다.
Kiali는 회로 차단기, 요청 속도, 대기 시간, 트래픽 흐름 그래프와 같은 기능에 대한 가시성을 제공하는 네임스페이스의 대화형 그래프 보기를 실시간으로 제공합니다. Kiali는 애플리케이션에서 서비스 및 워크로드에 이르기까지 다양한 수준의 구성 요소에 대한 통찰력을 제공하며, 선택한 그래프 노드 또는 에지에서 상황별 정보에 대한 상호 작용과 차트를 표시할 수 있습니다. Kiali는 게이트웨이, 대상 규칙, 가상 서비스, 메시 정책 등과 같은 Istio 구성의 유효성을 확인하는 기능도 제공합니다. Kiali는 자세한 지표를 제공하며 고급 쿼리에 기본 Grafana 통합이 가능합니다. Jaeger를 Kiali 콘솔에 통합하면 분산 추적이 제공됩니다.
Kiali는 기본적으로 Red Hat OpenShift Service Mesh의 일부로 설치됩니다.
2.4.3.2. Kiali 아키텍처
Kiali는 오픈 소스 Kiali 프로젝트를 기반으로 합니다. Kiali는 Kiali 애플리케이션과 Kiali 콘솔이라는 두 가지 구성 요소로 구성됩니다.
- Kiali 애플리케이션(백엔드) - 이 구성 요소는 컨테이너 애플리케이션 플랫폼에서 실행되고 서비스 메시 구성 요소와 통신하며, 데이터를 검색 및 처리하고, 이 데이터를 콘솔에 노출합니다. Kiali 애플리케이션에는 스토리지가 필요하지 않습니다. 클러스터에 애플리케이션을 배포할 때 구성은 ConfigMaps 및 시크릿에 설정됩니다.
- Kiali 콘솔(프론트엔드) - Kiali 콘솔은 웹 애플리케이션입니다. Kiali 애플리케이션은 Kiali 콘솔을 제공하며 이를 사용자에게 표시하기 위해 데이터의 백엔드를 쿼리합니다.
또한 Kiali는 컨테이너 애플리케이션 플랫폼과 Istio에서 제공하는 외부 서비스 및 구성 요소에 따라 달라집니다.
- Red Hat Service Mesh(Istio) - Istio는 Kiali 요구 사항입니다. Istio는 서비스 메시를 제공하고 제어하는 구성 요소입니다. Kiali와 Istio를 별도로 설치할 수 있지만 Kiali는 Istio에 따라 달라지며 Istio가 존재하지 않는 경우 작동하지 않습니다. Kiali는 Prometheus 및 클러스터 API를 통해 노출되는 Istio 데이터와 구성을 검색해야 합니다.
- Prometheus - 전용 Prometheus 인스턴스는 Red Hat OpenShift Service Mesh 설치의 일부로 포함되어 있습니다. Istio Telemetry가 활성화되면 지표 데이터가 Prometheus에 저장됩니다. Kiali는 이 Prometheus 데이터를 사용하여 메시 토폴로지 확인, 지표 표시, 상태 계산, 가능한 문제 표시 등의 작업을 수행합니다. Kiali는 Prometheus와 직접 통신하고 Istio Telemetry에서 사용하는 데이터 스키마를 가정합니다. Prometheus는 Istio 종속성 및 Kiali에 대한 하드 종속성이며, 대부분의 Kiali 기능은 Prometheus없이 작동하지 않습니다.
- 클러스터 API - Kiali는 서비스 메시 구성을 가져와 해결하기 위해 OpenShift Container Platform(클러스터 API)의 API를 사용합니다. Kiali는 클러스터 API를 쿼리하여 네임스페이스, 서비스, 배포, pod 및 기타 엔터티에 대한 정의를 검색합니다. 또한 Kiali는 다른 클러스터 엔티티 간의 관계를 해결하기 위해 쿼리를 만듭니다. 클러스터 API는 가상 서비스, 대상 규칙, 경로 규칙, 게이트웨이, 할당량 등과 같은 Istio 구성을 검색하도록 쿼리합니다.
- Jaeger - Jaeger는 선택 사항이지만 Red Hat OpenShift Service Mesh의 일부로 설치됩니다. 기본 Red Hat OpenShift Service Mesh 설치의 일부로 분산 추적 플랫폼(Jaeger)을 설치할 때 Kiali 콘솔에는 분산 추적 데이터를 표시하는 탭이 포함됩니다. Istio의 분산 추적 기능을 비활성화하면 추적 데이터를 사용할 수 없습니다. 또한 사용자는 추적 데이터를 보려면 Service Mesh Control Plane이 설치된 네임스페이스에 대한 액세스 권한이 있어야 합니다.
- Grafana - Grafana는 선택 사항이지만 Red Hat OpenShift Service Mesh의 일부로 설치됩니다. 사용 가능한 경우, Kiali의 지표 페이지에 사용자를 Grafana의 동일한 지표로 안내하는 링크가 표시됩니다. 사용자가 Grafana 대시보드에 대한 링크를 보고 Grafana 데이터를 보려면 Service Mesh Control Plane이 설치된 네임스페이스에 대한 액세스 권한이 있어야 합니다.
2.4.3.3. Kiali 기능
Kiali 콘솔은 Red Hat Service Mesh와 통합되어 다음 기능을 제공합니다.
- 상태 - 애플리케이션, 서비스 또는 워크로드에 대한 문제를 빠르게 식별합니다.
- 토폴로지 - 애플리케이션, 서비스 또는 워크로드가 Kiali 그래프를 통해 통신하는 방식을 시각화합니다.
- 지표 - 사전 정의된 지표 대시 보드를 통해 Go, Node.js. Quarkus, Spring Boot, Thorntail, Vert.x에 대한 서비스 메시 및 애플리케이션 성능을 차트로 작성할 수 있습니다. 또한 사용자 정의 대시보드를 생성할 수도 있습니다.
- 추적 - Jaeger와의 통합을 통해 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 따를 수 있습니다.
- 검증 - 가장 일반적인 Istio 오브젝트에 대한 고급 검증(대상 규칙, 서비스 항목, 가상 서비스 등)을 수행합니다.
- 구성 - 마법사를 사용하거나 Kiali 콘솔의 YAML 편집기에서 직접 Istio 라우팅 구성을 생성, 업데이트 및 삭제할 수 있는 옵션입니다.
2.4.4. 분산 추적 이해
사용자가 애플리케이션에서 작업을 수행할 때마다 응답을 생성하기 위해 참여하도록 다양한 서비스를 필요로 할 수 있는 아키텍처에 의해 요청이 실행됩니다. 이 요청의 경로는 분산 트랜잭션입니다. 분산 추적 플랫폼(Jaeger)을 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통한 요청 경로를 따르는 분산 추적을 수행할 수 있습니다.
분산 추적은 분산 트랜잭션에 있는 전체 이벤트 체인을 이해하기 위해 일반적으로 다양한 프로세스 또는 호스트에서 실행되는 다양한 작업 단위에 대한 정보를 결합하는 데 사용되는 기술입니다. 분산 추적을 통해 개발자는 대규모 서비스 지향 아키텍처에서 호출 흐름을 시각화할 수 있습니다. 직렬화, 병렬 처리 및 대기 시간 소스를 이해하는 데 유용할 수 있습니다.
분산 추적 플랫폼(Jaeger)은 마이크로 서비스 스택 전체에 걸쳐 개별 요청 실행을 기록하고 이를 추적으로 제공합니다. 추적은 시스템을 통한 데이터/실행 경로입니다. 엔드 투 엔드 추적은 하나 이상의 범위로 구성됩니다.
범위는 작업 이름, 작업 시작 시간 및 기간이 있는 논리적 작업 단위를 나타냅니다. 기간은 중첩되어 인과 관계를 모델링하도록 주문될 수 있습니다.
2.4.4.1. 분산 추적 개요
서비스 소유자로서 분산 추적을 사용하여 서비스 아키텍처에 대한 정보를 수집하도록 서비스를 조정할 수 있습니다. Red Hat OpenShift 분산 추적 플랫폼을 사용하여 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간의 상호 작용을 모니터링, 네트워크 프로파일링 및 문제 해결에 사용할 수 있습니다.
분산 추적 플랫폼을 사용하면 다음 기능을 수행할 수 있습니다.
- 분산 트랜잭션 모니터링
- 성능 및 대기 시간 최적화
- 근본 원인 분석 수행
2.4.4.2. Red Hat OpenShift 분산 추적 플랫폼 아키텍처
Red Hat OpenShift 분산 추적 플랫폼은 함께 작동하여 추적 데이터를 수집, 저장 및 표시하는 여러 구성 요소로 구성됩니다.
Red Hat OpenShift 분산 추적 플랫폼 (Tempo) - 이 구성 요소는 오픈 소스 Grafana Tempo 프로젝트를 기반으로 합니다.
- 게이트웨이는 인증, 권한 부여 및 요청을 배포 또는 쿼리 프런트 엔드 서비스로 처리합니다.
-
배포자 - 배포자는 Jaeger, OpenTelemetry 및 Zipkin을 비롯한 여러 형식으로 기간을 허용합니다. 이 경로는
traceID
를 해시하고 분산 일관된 해시 링을 사용하여 Ingesters로 구성됩니다. - Ingester - Ingester는 추적을 블록으로 배치하고, bloom 필터와 인덱스를 생성한 다음 모두 백엔드로 플러시합니다.
- 쿼리 프런트 엔드 - 쿼리 프런트 엔드는 들어오는 쿼리에 대한 검색 공간을 분할합니다. 그런 다음 검색 쿼리가 Queriers로 전송됩니다. 쿼리 프런트 엔드 배포는 Tempo 쿼리 사이드카를 통해 Jaeger UI를 노출합니다.
- Querier - Querier는 Ingesters 또는 백엔드 스토리지에서 요청된 추적 ID를 찾을 책임이 있습니다. 매개변수에 따라 Ingesters를 쿼리하고 백엔드에서 오브젝트 스토리지의 검색 블록으로 Ingesters를 가져올 수 있습니다.
- Cryo stator - 백엔드 스토리지로 또는 백엔드 스토리지에서 차단하여 총 블록 수를 줄입니다.
Red Hat build of OpenTelemetry - 이 구성 요소는 오픈 소스 OpenTelemetry 프로젝트를 기반으로 합니다.
- OpenTelemetry Collector - OpenTelemetry 수집기는 원격 분석 데이터를 수신, 처리 및 내보내는 벤더와 무관한 방법입니다. OpenTelemetry 수집기는 오픈 소스 관찰 기능 데이터 형식(예: Jaeger 및 Prometheus)을 지원하여 하나 이상의 오픈 소스 또는 상용 백엔드로 전송합니다. 수집기는 원격 분석 데이터를 내보내는 기본 위치 조정 라이브러리입니다.
Red Hat OpenShift 분산 추적 플랫폼 (Jaeger) - 이 구성 요소는 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
- 클라이언트 (Jaeger 클라이언트, Tracer, Reporter, 조정된 애플리케이션, 클라이언트 라이브러리)- 분산 추적 플랫폼(Jaeger) 클라이언트는 OpenTracing API의 언어별 구현입니다. 수동으로 또는 이미 OpenTracing과 통합된 Camel(Fuse), Spring Boot(RHOAR), MicroProfile(RHOAR/T©tail), Wildfly(EAP) 등의 다양한 기존 오픈 소스 프레임워크를 사용하여 분산 추적에 대해 애플리케이션을 조정하는 데 사용할 수 있습니다.
- 에이전트 (Jaeger agent, Server Queue, Processor Workers) - 분산 추적 플랫폼(Jaeger) 에이전트는 UDP(User Datagram Protocol)를 통해 전송되는 기간을 수신 대기하는 네트워크 데몬입니다. 에이전트는 조정된 애플리케이션과 동일한 호스트에 배치되어야 합니다. 일반적으로 Kubernetes와 같은 컨테이너 환경에서 사이드카를 보유하여 수행됩니다.
- Jaeger 수집기 (Collector, Queue, Workers) - Jaeger 에이전트와 유사하게 Jaeger 수집기는 기간을 수신하여 처리를 위해 내부 큐에 배치합니다. 이를 통해 Jaeger 수집기는 기간이 스토리지로 이동할 때까지 기다리지 않고 클라이언트/에이전트로 즉시 돌아갈 수 있습니다.
- 스토리지(데이터 저장소) - 수집기에는 영구 스토리지 백엔드가 필요합니다. Red Hat OpenShift 분산 추적 플랫폼 (Jaeger)에는 스토리지 범위를 위한 플러그형 메커니즘이 있습니다. Red Hat OpenShift distributed tracing platform(Jaeger)은 Elasticsearch 스토리지를 지원합니다.
- 쿼리(쿼리 서비스) - 쿼리는 스토리지에서 추적을 검색하는 서비스입니다.
- Ingester (Ingester Service) - Red Hat OpenShift 분산 추적 플랫폼은 수집기와 실제 Elasticsearch 백업 스토리지 간의 버퍼로 Apache Kafka를 사용할 수 있습니다. Ingester는 Kafka에서 데이터를 읽고 Elasticsearch 스토리지 백엔드에 쓰는 서비스입니다.
- Jaeger 콘솔 - Red Hat OpenShift 분산 추적 플랫폼 (Jaeger) 사용자 인터페이스를 사용하면 분산 추적 데이터를 시각화할 수 있습니다. 검색 페이지에서 추적을 찾고 개별 추적을 구성하는 기간의 세부 사항을 확인할 수 있습니다.
2.4.4.3. Red Hat OpenShift 분산 추적 플랫폼 기능
Red Hat OpenShift 분산 추적 플랫폼은 다음과 같은 기능을 제공합니다.
- Kiali와의 통합 - 올바르게 구성된 경우 Kiali 콘솔에서 분산 추적 플랫폼 데이터를 볼 수 있습니다.
- 높은 확장성 - 분산 추적 플랫폼 백엔드는 단일 장애 지점이 없으며 비즈니스 요구 사항에 따라 확장할 수 있도록 설계되었습니다.
- 분산 컨텍스트 전파 - 다양한 구성 요소의 데이터를 함께 연결하여 완전한 엔드 투 엔드 추적을 만들 수 있습니다.
- Zipkin과의 역호환성 - Red Hat OpenShift 분산 추적 플랫폼에는 Zipkin의 드롭인 대체 기능으로 사용할 수 있는 API가 있지만 Red Hat은 이 릴리스에서 Zipkin 호환성을 지원하지 않습니다.
2.4.5. 다음 단계
- OpenShift Container Platform 환경에 Red Hat OpenShift Service Mesh를 설치할 준비를 합니다.