본문 바로가기

EKS/istio

EKS istio - 1. Intro

istio는 무엇이며 istio를 사용했을 때, 어떠한 형태의 흐름을 갖게되는지 간단하게 설명하도록 하겠습니다.

 

istio란 무엇일까요?

우리가 실제로 서비스를 구축하고 운영하게 되면 장애가 발생하지 않을 수는 없습니다.

특히나 MSA 아키텍쳐로 구성 개발하게 되면 각 서비스간의 트래픽의 장애 모니터링 및 조치를 고민하게 됩니다.

 

Service Mesh를 통해 각 서비스간의 통신을 엮고 관리하는데, 그 방법은 아래와 같습니다.

출처 https://techcafe.tistory.com/133

 

먼저, istio는 control plane과 data plane으로 나뉩니다.

Control Plane은 경량 프록시를 서비스 옆에 컨테이너로 하나 띄워서 정책을 주고, 그 정책을 가지고 트래픽을 컨트롤하게 됩니다.

 

각 구성요소를 하나씩 보면,

  • Envoy
    서비스 메시를 구성하는 모든 서비스의 in/outboud 트래픽을 중계하고
    Load Balancing, TLS Termination, Circuit Breakers, Health Check, 가중치 기반 트래픽 분산등 다양한 기능을 수행합니다.
    Envoy는 동일한 Kubernetes Pod에 관련하여 위의 그림과 같이 서비스 옆에 사이드카 형식으로 컨테이너가 하나 더 띄워지게 됩니다.
    istio는 이 프록시 컨테이너를 통해 관련 리소스를 모니터링하고, Mixer가 이러한 신호를 가지고 정책 결정을 하게 됩니다.

  • Mixer
    Mixer는 독립적인 컴포넌트로, 서비스 메시에 대한 접근 제어, 정책을 적용하고 프록시로 부터 데이터를 수집하는 기능을 합니다.

  • Pilot
    Pilot은 Envoy 사이드카에 대한
    서비스 디스커버리, 라우팅(A/B 테스트, 카나리 배포), timeouts, retries, circuit breaker 같은 기능들을 제공합니다.

    트래픽 관련 행위를 제어하는 고레벨의 라우팅 룰을 Envoy에 특화된 설정으로 변환하고 런타임에 사이드카로 전달합니다.
    Pilot은 플랫폼에 특화된 서비스 검색 메커니즘을 추상화하고
    Envoy data plane API와 일치하는 모든 사이드카가 사용할 수 있는 표준 포맷으로 통합하는 역할을 합니다.

    따라서 istio는 하나의 설정으로 kubernetes, consol, nomad같은 다양한 환경에서 사용할 수 있습니다.

  • Citadel
    Citadel은 강력한 서비스-to-서비스, 그리고 end-user 인증을 내장된 자격증명과 크레덴셜 관리를 통해 제공합니다.
    0.5 release 부터, Istio는 role-based access control을 제공하여 서비스에 접근하는 사용자를 제어하도록 합니다.

따라서, 서비스 메시를 통해서, Proxy끼리의 Metric을 수집하고, 모니터링하며

해당 트래픽에 대한 Limit을 보고 전송해도 괜찮은 것인지, Request Success을 보고 Circuit Breaking을 통해 장애 요소가 발생한

서비스에 대한 트래픽 전송을 막는 다던지, Production에 배포전에 Stg소스를 미러링으로 배포하여 테스트 한다던지 등

서비스를 안전하게 운영하기 위한 요소들을 수행 테스트 해볼 수 있는 것입니다.

 

실제 구성을 하게되면 아래와 같은 요소들을 가지게 되며,

저는 이러한 형태를 구축하여서 Traffic에 대해서 모니터링하는 것을 할 예정이며, 이 구성이 맞는 방법이라고 할 수는 없습니다.

 

 

istio를 사용하게 되면, 먼저 모든 트래픽을 istio를 통해 들어오게 됩니다.

먼저 AWS에서는 ALB를 alb-ingress-controller가 모니터링 하고 있다가 ingress에 대한 배포가 수행되면,

이에 맞게 ALB와 리스너를 구축하고 istio ingress로 모두 매핑시키게 됩니다.

 

istio ingress는 istio ingressgateway(Proxy 역할)로 모든 트래픽을 전달하게 되면, istio service mesh로 라우팅하게 됩니다.

따라서 각 service gateway와 virtual service, destination rule에 대한 정의대로 트래픽들을 전달하면서

실제 구축된 서비스까지 트래픽을 전달하고 이 모든 과정을 istio pilot이 모니터링하게 되는 것입니다.

 

이에 대한 모니터링 지표를 그라파나를 통해서 볼 수 있게 됩니다.

다음 포스터부터 istio를 통한 각 request의 success rate 모니터링 데모를 구축해보겠습니다.