Istio를 이용하여 마이크로 서비스 트래픽 관리하기  

Istio를 사용하여 마이크로 서비스에 대한 고급 트래픽 관리 및 요청 추적 기능 적용하기

Last updated

개발자들이 소형의 빠른 구현과 복원력을 강화에 초점을 맞춘 마이크로 서비스를 선호하면서 대형 모노리스앱(monolithic app)에서 멀어지고 있습니다. 이 새로운 생태계의 요구 사항을 만족하려면, 개발자는 로드 밸런스, 고급 트래픽 관리, 요청 추적 및 연결 기능이 있는 마이크로 서비스가 배포된 네트워크를 구성해야 합니다.

By Anthony Amanse, Animesh Singh

Overview

최근 애플리케이션을 개발했다면 모노리스(Monolithic)앱이 과거의 것이 되었다는 것을 알 수 있습니다. 오늘날 애플리케이션은 서비스 디스커버리, 등록, 라우팅 및 연결에 관한 것들로 구성되어 있습니다. 이는 마이크로 서비스 아키텍처 개발자 및 운영자에게 완전히 새로운 도전 과제를 제시합니다.

서비스 메시의 크기가 커지고 복잡도가 높아지면 이를 이해하고 관리하는 것이 얼마나 어려운지 이미 알고 있습니다. 동일한 내용을 질문으로 표현하면 다음과 같습니다: 증가하는 마이크로 서비스를 어떻게 연결하고, 부하를 분산하며, 역할 기반 라우팅을 제공 할 수 있을까요? 마이크로 서비스들에서 외부로 트래픽을 나가게 하려면 어떻게 해야 할까요? 그리고, 카나리아 배포는 어떻게 테스트할까요? self-contained 앱을 만드는 것이 충분하지 않은데, 마이크로 서비스 세계의 복잡성을 어떻게 관리 할 수 있을까요?

IBM, Google 및 Lyft의 공동 작업인 Istio는 이러한 문제를 해결 할 수 있도록 설계 되었습니다. Istio는 플랫폼이나 소스 코드 또는 벤더에 상관없이 서로 다른 마이크로 서비스끼리 네트워크를 원활하게 연결하고, 관리 및 보호 할 수 있는 방법을 개발자에게 제공하는 개방형 기술입니다. 본 과정에서는 Istio가 컨테이너 기반의 사이드카 아키텍처를 통해 제공하는 마이크로 서비스 간 통신 및 인바운드, 아웃바운드 트래픽에 대한 정교한 관리 및 제어기능을 배우게 됩니다. 또한 요청 추적에 대한 모니터링 및 수집으로 애플리케이션의 트래픽 흐름에 대한 통찰력을 높이는 방법도 배우게 됩니다. 본 과정은 새로운 유형의 마이크로 서비스 지향 애플리케이션을 다루는 모든 이에게 적합합니다.

Flow

  1. 사용자는 쿠버네티스에 구성된 앱을 배포합니다. “BookInfo” 앱은 네 개의 마이크로 서비스로 작성되어 있습니다. 각각의 마이크로 서비스는 서로 다른 언어인 Python, Java, Ruby 그리고 Node.js로 작성되어 있습니다. Reviews 마이크로 서비스는 Java로 작성되었고 세 가지 버젼이 있습니다.
  2. 앱이 Istio 기능을 사용하게 하려면 사용자가 Istio envoy를 주입해야 합니다. Envoy는 각각의 마이크로 서비스에 사이드카로서 배포됩니다. Envoy를 마이크로 서비스에 주입한다는 것은 Envoy 사이드카가 서비스에 대한 인바운드, 아웃바운드 연결을 관리하는 것을 의미합니다. 그런 다음 사용자가 Istio에서 실행 중인 앱에 접근합니다.
  3. 이제 앱을 배포한 후, 사용자는 예제 앱에 대해 고급 Istio 기능을 구성합니다. 트래픽 흐름 관리를 위해 사용자는 가중치와 HTTP 헤더 기반으로 서비스 라우트를 수정합니다. 이 단계에서, Review 마이크로 서비스의 버전1과 3이 각각 트래픽의 50%씩 얻게 되고, 버전2는 특정 사용자에 대해서만 활성화 됩니다.
  4. 사용자가 서비스에 대한 접근 제어를 구성합니다. Review 버젼3에서 Ratings 마이크로 서비스로 접근하는 트래픽 차단을 위해, Mixer 룰을 생성합니다.
  5. 앱에 대한 배포와 설정이 끝난 후에 사용자는 원격 측정 정보와 로그 수집을 활성화 합니다. 메트릭과 로그 정보 수집을 위해 Istio Mixer를 구성하고, 필요한 Istio 애드-온인 Prometheus와 Grafana를 설치합니다. 추적 범위 수집을 위해 Zipkin 애드-온을 설치하고 구성합니다.
  6. 사용자는 Bookinfo를 위해 Bluemix의 Compose for MySQL 데이터베이스와 같은 외부 데이터 소스를 생성합니다.
  7. 원본 예제인 BookInfo 앱의 세 개의 마이크로 서비스 Details, Ratings & Reviews를 수정하여 MySQL 데이터 베이스를 사용하도록 합니다. MySQL 데이터 베이스에 접속하기 위해 Details 마이크로 서비스에는 MySQL Ruby gem이 추가되고, Ratings 마이크로 서비스에는 MySQL 노드 모듈이 추가됩니다. Reviews 마이크로 서비스 버젼 1, 2, 3에는 mysql-connector-java 종속성이 추가 됩니다.
  8. 사용자는 앱을 배포하고 egress 트래픽에 대한 Envoy 프록시를 활성화 합니다. Envoy 프록시는 각각의 마이크로 서비스 옆에 사이드카로서 배포됩니다. 이는 Envoy 사이드카가 서비스에 대한 인바운드, 아웃바운드 연결을 관리하는 것을 의미합니다. 이 경우, Envoy는 http/https 프로토콜만을 지원하므로 MySQL deployment용 IP 범위 내에서 제공되는 MySQL 연결 트래픽을 프록시가 가로채지 않도록 구성됩니다. 앱이 활성화되어 실행될 때, 사용자는 IP와 Node 포트를 사용하여 앱에 접근 할 수 있습니다.

Components

Istio

마이크로 서비스를 연결, 관리 및 안전하게 하기 위한 오픈 플랫폼입니다.

Bluemix DevOps Toolchain Service

개발, 배포 및 운영 작업을 지원하는 도구 통합을 가능하게 합니다.

Technologies

클라우드

인터넷을 통해 컴퓨팅 및 IT 리소스에 엑세스합니다

컨테이너 오케스트레이션

컨테이너형 애플리케이션의 배포, 스케일링 및 관리의 자동화.

Containers

앱 실행에 필요한 모든 요소를 포함하는 가상 소프트웨어 객체.

Java

애플리케이션을 만들기 위한 안전한 객체 지향 프로그래밍 언어.

Microservices

클라우드 내 최신 애플리케이션 구성의 구성요소 제공을 위해 경량 프로토콜을 사용하는 세분화된 약결합 서비스들의 집합.

Node.js

서버사이드 JavaScript 코드를 실행하기 위한 오픈 소스 JavaScript 런타임 환경입니다.

Related Blogs

귀하가 입력한 쇼트코드 검색조건에 매치되는 포스팅이 존재하지 않습니다.

Related Links