IT/PaaS

Istio란 무엇인가?

twofootdog 2020. 8. 31. 00:27

이번 글에서는 Istio의 정의, 구조 및 특징에 대해 알아볼 것이다.

이 글의 순서는 다음과 같다.

1. 서비스 메쉬(Service Mesh)란?

2. Istio 정의

3. Istio 구조

4. Istio 구성요소

5. Istio 주요 특징

 

1. 서비스 메쉬(Service Mesh)란?

Istio가 서비스 메쉬(Service Mesh)를 구현할 수 있는 오픈소스이기 때문에, 우선 서비스 메쉬(Service Mesh)가 무엇인지 알아보자.

서비스 메쉬(Service Mesh)란 API 등을 사용하여 마이크로 서비스 간 통신을 안전하고, 빠르고, 신뢰할 수 있게 만들기 위해 설계된 전용 인프라 계층이다. 서비스 메쉬는 보통 Application 서비스에 경량화 프록시(Proxy)를 사이드카(sidecar) 방식으로 배치하여 서비스 간 통신을 제어하며, Service Discovery, Load Balancing, Dynamic Request Routing, Circuit Breacking, Retry and Timeout, TLS, Distributed Tracing, Metric 수집, Access Control, A/B Testing 기능 등을 지원한다.  

그렇다면 서비스 메쉬는 왜 필요할까? 시스템의 규모에 따라 다르지만, MSA 시스템에서 수십개의 마이크로 서비스가 동작할 수 있고 그보다 많은 인스턴스들이 동작할 수 있기 때문에 관리하기가 매우 복잡하다. 또한 인스턴스가 수행되는 네트워크 간의 레이턴시, 신뢰성, 안전성 등을 보장할 수도 없다. 이러한 문제점들은 어플리케이션 계층에서 해결할 수도 있지만(예를 들면 Hystrix, Resilience4j 등을 활용한 Circuit Breaker 기능 추가), 그렇게 되면 Application 언어 및 런타임에 종속성이 생기고, 기능 변경 등을 할 때마다 비용이 발생한다.

그렇기 때문에 마이크로 서비스 운영할 때에는 별도의 소스 수정이 필요없이 인프라 레벨에서 안정적으로 관리할 수 있는 서비스 메쉬가 필요하다.

 


2. Istio 정의

Istio는 서비스 매쉬(Service Mesh)를 구현할 수 있는 오픈소스 솔루션이다. 

Istio를 사용하면 서비스 코드 변경 없이 로드밸런싱, 서비스 간 인증, 모니터링 등을 적용하여 마이크로 서비스를 쉽게 관리할 수 있다.

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

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

 


3. Istio 구조

Istio의 구조를 보면 아래와 같다.

 

그럼 이제 Istio 구성요소에 대해 알아보도록 하자.

 


4. Istio 구성요소

4.1.데이타 플레인(Data Plane)

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

 

4.2. 컨트롤 플레인(Control Plane)

데이터 플레인(Data Plane)인 Envoy를 컨트롤하는 부분이다.

Istio1.4 버전까지는 파일럿(Pilot), 믹서(Mixer), 시타델(Citadel), 갤리(Galley)로 구성되어 있었지만, Istio1.5버전부터 4개의 모듈이 Istiod 라는 하나의 모듈로 통합되었다(이 글을 작성하는 때는 2020년 9월이며  Istio 버전은 1.7 버전이다)

 

그럼 우선 1.4버전까지 Istio의 컨트롤 플레인을 구성했던 모듈들에 대해 알아보자

 

- 믹서(Mixer) : 서비스 매쉬 엑세스 컨트롤 및 정책 관리 수행. Envoy와 다른 서비스에서 모니터링 지표 수집(서비스 응답시간, 평균 처리량 등)

- 파일럿(Pilot) : Envoy 설정 관리를 수행하는 모듈. Envoy가 호출하는 서비스의 주소를 얻을 수 있는 서비스 디스커버리(Service Discovery)기능을 제공. 서비스 트래픽 라우팅 기능 제공(서비스에서 서비스로 호출하는 경로를 컨트롤). 서비스 안정성을 위해 서비스 간 호출 시 재시도(retry), 서킷브레이커(circuit breaker), 타임아웃(timeout) 등의 기능 제공. 

- 시타델(Citadel) : 보안 관련 기능을 수행하는 모듈. 사용자 인증(Authentication), 인가(Authorization)을 통한 서비스/앤드유저 간 인증 강화. TLS(SSL)을 이용한 통신 암호화 및 인증서(Certification) 관리

- 갤리(Galley) : Istio의 구성 및 설정 검증. 배포 관리 수행

 

 

다음으로 istio1.5 이상 버전에서 제공하는 통합 컨트롤 플레인인 istiod서비스 디스커버리(Service Discovery), 설정 관리(Configuration Management), 인증 관리(Certificate Management) 등을 수행한다. 

 

- 트래픽 동작을 제어하는 라우팅 규칙을 Envoy 전용 설정으로 변환하고, 마이크로 서비스에 사이드카 방식으로 Envoy를 배포

- Envoy 설정 변경(Istio의 Traffic Management API 활용)을 통한 서비스 메시 트래픽 세부 제어

- 내장된 identity나 자격증명관리(Credential Management)를 통해 강력한 서비스 간 인증 및 사용자 인증 기능을 지원

- 인증기관(Certificate Authority. CA)의 역할 수행. 데이터 플레인에서 안전한 mTLS통신을 허용하는 인증서를 생성

 

5. Istio 주요 특징

5.1. 트래픽 관리(Traffic Management)

Istio의 간편한 규칙(Rule) 설정과 트래픽 라우팅(Traffic Routing) 기능을 통해 서비스 간의 트래픽 흐름과 API 호출을 제어할 수 있다. 또한 서킷 브레이커(Circuit Breaker), 타임아웃(Timeout), 재시도(Retry) 기능과 같은 서비스 레벨의 속성 구성을 단순화하고, 백분율 기반으로 트래픽을 분할하여 A/B Test, Canary Rollout, 단계적(Staged) Rollout 과 같은 작업을 쉽게 설정할 수 있다. 

트래픽에 대한 더 나은 가시성과 독창적인 장애 복구 기능을 통해 문제가 발생하기 전에 문제를 찾고, 서비스 호출을 더욱 안정적으로 만들고, 어떤 상황에서든 네트워크를 더욱 안정적으로 만들 수 있다(트래픽 관리 개념 가이드)

 

5.2. 보안(Security)

Istio의 보안기능을 통해 개발자는 어플리케이션 레벨의 보안에 보다 더 집중할 수 있다. Istio는 기본적인 보안 통신 채널을 제공하며, 대규모 서비스 통신의 인증(Authentication), 권한부여(Authorization), 암호화(Encryption) 등을 관리한다. Istio를 사용하면 기본적으로 서비스 통신은 보호되기 때문에, 다양한 프로토콜이나 런타임에서 어플리케이션 변경을 거의 하지 않고 일관된 정책을 시행할 수 있다. Istio는 플랫폼에 독립적이지만 쿠버네티스 네트워크 정책과 함께 사용하면 파드(pod)간 혹은 서비스(Service)간 통신을 보호하는 기능 등의 다양한 이점이 있다(보안 개념 가이드)

 

5.3. 관찰 가능성(Observability)

Istio의 강력한 트레이싱(Tracing), 모니터링(Monitoring), 로깅(Logging) 기능으로 서비스 매쉬에 배포된 서비스들에 대해 더욱 자세히 파악할 수 있다. Istio의 모니터링 기능을 통해 서비스 성능이 업스트림/다운스트림에 어떤 영향을 끼치는지 파악할 수 있다. 또한 맞춤형 대쉬보드를 통해 모든 서비스 성능 대한 가시성 확인 및 성능이 다른 프로세스들에 미치는 영향 등을 확인 할 수 있다. 

 

5.4. 플랫폼 지원(Platform support )

Istio는 플랫폼에 독립적이며 클라우드, On-Premise, Kubernetes, Mesos 등을 포함한 다양한 환경에서 실행되도록 설계되었다. Istio는 Kubernetes에 배포하거나 Consul을 사용하여 Nomad에 배포할 수 있다. 

 

5.5. 통합과 사용자정의(Integration and Customization)

Istio의 구성 요소들은 확장 및 커스터마이징을 통해서 ACL, 로깅, 모니터링, 할당량, 감사 등를 위한 기존 솔루션들과 통합될 수 있다.

 


참고

istio.io/v1.4/docs/ops/deployment/architecture/

 

Architecture

Describes Istio's high-level architecture and design goals.

istio.io

istio.io/latest/docs/concepts/what-is-istio/

 

What is Istio?

Introduces Istio, the problems it solves, its high-level architecture, and its design goals.

istio.io

 

https://jason-lim.tistory.com/5

 

MSA 관리를 위한 Service Mesh : ISTIO - 1

Service Mesh란 무엇일까? - Service mesh 개요 Service mesh라는 용어는 microservice를 구현할 때 service에 해당되는 application에 대한 구조, 그들간의 네트워크를 이야기할 때 항상 등장한다. 이 Service me..

jason-lim.tistory.com

https://medium.com/dtevangelist/service-mesh-%EB%9E%80-8dfafb56fc07

 

Service Mesh 란?

수년간 Enterprise IT환경은 급격하게 변하고 있습니다. 특히 Cloud로 대변되는 시스템 구축 환경의 변화에 따라 이를 잘 활용할 수 있는 다양한 Architecture들이 대두되고 있습니다.

medium.com

arisu1000.tistory.com/27865

 

istio란 무엇인가?

2017년 5월에 Google, Lyft, IBM에서 내놓은 서비스 메쉬(Service Mesh) 솔루션입니다. 서비스 메쉬는 마이크로서비스아키텍처(MSA) 구조에서 각 서비스들간의 트래픽을 제어하는 역할을 합니다. 주요 기능

arisu1000.tistory.com