[Architecture] MSA : Istio 개념 잡기

Cover image

Istio

Istio의 정의

Istio는 애플리케이션 네트워크 기능을 유연하고 쉽게 자동화할 수 있는 투명한 언어 독립적인 방법을 제공하는 현대화된 서비스 네트워킹 레이어인 서비스 메시입니다. 클라우드 기반 애플리케이션을 구성하는 다양한 마이크로 서비스르르 관리하는데 널리 사용되는 솔루션이며 마이크로 서비스가 서로 통신하고 데이터를 공유하는 방법을 지원합니다.

Istio를 통해서 느슨하게 결합된 마이크로 서비스를 통해 앱을 어셈블하고, 새로운 클라우드 기반 앱을 관리할 수 있습니다. 또한 서비스 코드 변경 없이 로드배런싱, 서비스 간 인증, 모니터링 등을 적용해서 마이크로 서비스를 쉽게 관리할 수 있습니다.

Istio는 애플리케이션 코드를 변경할 필요 없이 서비스 간 트래픽 흐름을 관리하고 액세스 정책을 적용하여 원격 분석 데이터를 집계합니다. 또한 기존의 분산형 애플리케이션에 투명하게 레이어하여 배포 복잡성을 완화시킵니다.

Service Mesh 란?

  • 애플리케이션의 다양한 부분들이 서로의 데이터를 공유하는 방식을 제어하는 방법입니다.
  • 좀 더 자세하게 이야기 한다면, API 등을 사용해서 마이크로 서비스간 통신을 안전하고, 빠르고, 신뢰할 수 있게 만들기 위해 설계된 전용 인프라 계층입니다.
  • Service Discovery, Load Balancing, Dynamic Request Routing, Circuit Breacking, Retry and Timeout, TLS, Distributed Tracing, Metric 수집, Access Control, A/B Testing 기능 등을 지원합니다.

Istio Service Mesh의 장점

일관된 서비스 네트워킹 달성

네트워킹 운영자는 개발자 오버헤드를 추가하지 않고도 모든 서비스의 네트워킹을 일관성 있게 관리할 수 있습니다.

Istio 이점을 통해 서비스 보호

보안 운영자는 인증, 승인, 암호화를 비롯한 서비스 간 보안을 쉽게 구현할 수 있습니다.

애플리케이션 성능 향상

Canary Rollout(새로운 버전 모델 배포시, 소규모 사용자에게 먼저 제공함으로서 위험을 빠르게 감지하는 배포 전략)과 같은 권장사항을 구현하고 애플리케이션을 심도 있게 파악하여 성능을 개선하기 위해 집중해야하는 부분을 파악할 수 있습니다.


Istio의 구조

마이크로 서비스 간의 모든 네트워크 통신을 담당할 수 잇는 프록시인 Envoy를 사이드카 패턴으로 마이크로 서비스들에 배포한 다음, 프록시들의 설정 값 저장 및 관리/감독을 수행하고, 프록시들에 설정값을 전달하는 컨트롤러를 수행합니다.

그후 각각의 마이크로 서비스에 사이드카 패턴으로 배포된 Envoy 프록시를 데이터 플레인(Data Plane) 이라고 하며, 이를 컨트롤 하는 부분이 컨트롤 플레인(Control Plane)이라고 합니다.

Istio-Architecture

구성요소를 좀 더 자세하게 설명하면 다음과 같습니다.

Data Plane (데이터 플레인)

실제 데이터 트래픽이 돌아다니는 영역입니다. Envoy Proxy 세트로 구성되어 있습니다.

Envoy

Envoy는 사이드카 방식으로 각각의 마이크로서비스에 배포되어 서비스로 들어오고 나가는 모든 트래픽을 통제합니다. Envoy를 통해서 서비스를 호출할 때 호출하는 서비스의 IP주소는 파일럿에 저당된 엔드포인트 정보를 활용합니다.

Istio는 Envoy의 동적 서비스 디스커버리, 로드밸런싱, TLS 인증서 처리, HTTP/2, gRPC 프록시, 서킷브레이커, 헬스체크, 실패 삽입, 많은 메트릭 등의 기능을 사용할 수 있습니다.

사이드카 방식을 사용하기 때문에 기존 컨테이너나 코드를 재사용할 필요없이 그대로 사용가능합니다.

Control Plane (컨트롤 플레인)

트래픽 경로를 설정하고 관리하는 용도로 사용합니다.

Istio1.4 버전까지는 파일럿(Pilot), 믹서(Mixer), 시타델(Citadel), 갤리(Galley) 로 구성되어 있었으나 Istio1.5버전부터 4개의 모듈이 Istiod 라는 하나의 모듈로 통합되었습니다.

Mixer

  • 서비스 매쉬 엑세스 컨트롤 및 정책 관리 수행합니다.
  • Envoy와 다른 서비스에서 모니터링 지표 수집합니다.

Pilot

  • Envoy 설정 관리를 수행하는 모듈입니다.
  • Envoy가 호출하는 서비스의 주소를 얻을 수 잇는 Service Discovery 기능을 제공합니다.
  • 서비스 트래픽 라우팅 기능 제공합니다.
  • 서비스 안정성을 위해 서비스 간 호출시 Time out, Retry, Circuit Breaker(서킷 브레이커)같은 기능들을 제공합니다.

Citadel

  • 보안 관련 기능을 수행하는 모듈입니다.
  • 사용자 인증을 통해서 서비스/앤드 유저 간의 인증을 강화합니다.
  • TLS(SSL)을 이용하여 통신 암호화와 인증서 관리를 할 수 있습니다.

Galley

  • Istio 설정을 Validation, Ingestion, Processing, Distribution 하는 역할을 합니다.
  • 즉, Istio의 구성 및 설정을 검증하고 배포 관리를 진행합니다.

Istiod

Istio 1.5 이상 버전에서 제공되며 서비스 디스커버리, 설정관리, 인증관리 등을 수행합니다.

  • 트래픽 동작을 제어하는 라우팅 규칙을 Envoy 전용 설정으로 변환하고 마이크로 서비스에 사이드카 방식으로 Envoy를 배포합니다.
  • Envoy 설정 변경을 통해 서비스 메시 트래픽을 제어합니다.
  • 내장된 Identity나 Credential Management(증명 관리)을 통해서 강력한 서비스 간 인증 및 사용자 인증 기능을 지원합니다.
  • 인증 기관의 역할을 수행하, 데이터 플레인에서 안전한 mTLS 통신을 허용하는 인증서를 생성합니다.

Istio의 장점

Istio를 통해서 분산형 애플리케이션을 대규모로 제공할 수 있습니다. 아래와 같은 장점이 있습니다.

안전한 클라우드 기반 앱

Istio는 기본적인 보안 통신 채널을 제공하며 대규모 서비스 통신의 인증(Authentication), 권한부여(Authorization), 암호화(Encryption) 등을 통해서 애플리케이션 수준에서 보안을 강화할 수 있습니다.

효율적인 트래픽 관리

Istio는 간편한 규칙(Rule) 설정과 트래픽 라우팅(Traffic Routing) 기능을 통해서 서비스 간의 트래픽 흐름과 API 호출을 제어할 수 있습니다. 또한 서킷 브레이커(Circuit Breaker), 타임아웃(Timeout), Retry 등의 기능과 같은 서비스 레벨의 속성 구성을 단순화 할 수 있습니다.

이를 바탕으로 트래픽을 분할하여 A/B Test, Canary Rollout, Staged Rollout과 같은 작업을 쉽게 설정할 수 있습니다.

트래픽에 대한 더 나은 가시성과 독창적인 장애 복구 기능을 통해서 문제가 발생하기 전에 문제를 발견하고 서비스 호출을 안정화 시킬 수 있습니다.

서비스 메시 모니터링

Istio의 Tracing(트레이싱), Monitoring(모니터링), Logging(로깅) 기능으로 서비스 성능이 업스트림에 미치는 영향을 자세히 파악할 수 있습니다. 또한 서비스 성능이 업스트림이나 다운 스트림에 어떤 영향을 끼치는 지 파악할 수 있습니다. 또한 맞춤형 대시보드를 통해서 모든 서비스 성능을 보기 좋고, 다른 프로세스에 미치는 영향을 확인할 수 있습니다.

Kubenetes 및 가상 머신을 통한 간편한 배포

Istio는 컨테이너 및 가상 머신을 포함하여 기존과 최신 워크로드 모두에 대해 가시성과 네트워크 제어를 제공합니다.

즉, Istio는 플랫폼에 독립적입니다.

고급 기능을 통해 부하 분산 최소화

클라이언트 기반 라우팅, Canary Rollout과 같은 고급 기능과 함께 모든 트래픽에 자동화된 부하 분산을 사용할 수 있습니다.

정책 시행

액세스 제어, 비율 제한, 할당량을 지원하는 플러그인 가능한 정책 레이어 및 구성 API를 사용하여 정책을 시행할 수 있습니다.


마무리.

Istio에 대해 내용을 정리했습니다. 감사합니다.


출처