Service Mesh

Istio - (1) Introduction

Operation CWAL 2021. 3. 27. 14:16

Service Mesh

 

Service Mesh는 Application을 구성하는 Microservice간의 통신을 제어하거나, 추적할 수 있는 별도의 Infrastructure Layer를 의미한다. L7에서 HTTP URL Path, Header 등을 기반으로 동작하며, 보통은 Proxy를 비즈니스 로직을 수행중인 Microservice 옆에 Sidecar로 붙여서 Network Traffic을 대신 전달(routing)하는 방식으로 구성한다.

 

출처 - Redhat

 

그렇다면 왜 Service Mesh가 필요할까? 기존 Monolithic Application의 경우 로그 파일을 직접 확인하거나, tcpdump 등으로 패킷 내용을 추적하여 트러블슈팅이 가능했다. 또한 Process, Thread 간의 데이터 전달은 인스턴스 내부에서 이루어지므로 제대로 코딩했다는 가정하에 안정성과 신뢰성을 보장할 수 있다. 

하지만 수백~수천개의 서비스가 실행중인 Microservice Architecture는 경우가 다르다. 서비스가 계속해서 실시간으로 생성/제거되며, 서비스 간의 셀 수 없이 많은 통신이 발생한다. 무엇보다도 분산 컴퓨팅의 함정(Fallacies of Distributed Computing)에서 알 수 있듯, 통신의 기반이 되는 네트워크의 안정성과 신뢰성은 100% 보장되진 않는다.

그리고 이러한 문제를 해결하기 위해 Service Mesh 개념이 도입되었으며, 현재 시장엔 Istio, Linkerd, Consul 등 다양한 솔루션이 존재한다. 이번 시간엔 상대적으로 많이 쓰이는 Istio에 대해서 알아보고자 한다.

Istio

Istio는 Kubernetes(또는 Mesos) 기반의 MSA에 대해 Service Mesh 역할을 담당한다. 다른 서비스와 동일하게 Istio 역시 K8s 위에 Pod으로 배포되며, 다음과 같은 Architecture를 갖고 있다.

 

출처 - istio.io

Istio는 Control plane(istiod)과 Data plane(envoy proxy)를 통해 Service Mesh를 구현하였다. Data Plane에서 envoy를 Pod마다 sidecar 형식으로 proxy 역할을 수행하며 Microservice 간의 통신을 제어한다. 또한 발생하는 모든 트래픽 정보를 수집하고 Control Plane에 report는 기능도 수행한다. 이에 비해 Control Plane은 별도의 영역에서 data plane을 관리하고 제어하는 기능을 담당한다. 이를 요약하면 다음과 같다.

 

  • Data plane
    • Envoy proxy: C++로 개발된 고성능, 경량화 proxy로 모든 Service Mesh 내 서비스의 모든 inbound/outbound 트래픽을 중재한다. Istio의 Data Plane은 envoy proxy들로만 구성된다.
      • 트래픽 제어 
        • 특정 Label을 갖는 Pod(subset)에 개별 Loadbalancing 규칙 적용
        • 퍼센티지(%) 기반의 트래픽 분산을 통한 Staged Rollout 배포
        • HTTP/2, gRPC 프록시
      • 네트워크 안정성
        • Fault Injection
        • Failover
        • Circuit Breaker
        • Health check
      • 보안
        • Rate 제한
        • TLS
  • Control Plane
    • istiod
      • Service Discovery: Mesh 내 트래픽을 정확히 전달하기 위해 endpoint 위치를 알고 있어야 한다
      • service-to-service, end-user 인증
      • Pilot: Data plane 환경설정 서버
      • Galley: 설정 확인 및 검증, 전달
      • Citadel: 인증서 서명, secret 생성, CA 연계 등
      • Telemetry: envoy로부터 전달받은 telemetry 데이터 집계 및 metric 생성

 

참고로 Istio v1.5 이전까진 Control Plane의 Pilot, Citadel, Galley 이 별도의 Microservice로 존재하였으나, 설치/설정 등의 복잡성으로 인해 1.5 이후부터 istiod 하나의 Component로 통합되었다. 

 

What comes next?

실습에 앞서 개념을 명확히 이해하는 것도 좋지만, 설명이 길어질 수록 흥미도 떨어질 수 밖에 없다. 다음 시간엔 본격적으로 K8s 클러스터(EKS)를 구축하고 그 위에 Istio를 설치하는 내용을 다룰 예정이다.

 

Istio - (2) Istio 설치(EKS)

AWS EKS EKS는 AWS에서 제공하는 'K8s as a Service'로 사용자가 쉽게 K8s 클러스터를 생성할 수 있다. 구체적인 개념과 사용법은 필자가 작성해놓은 페이지들이 있으므로 참고하기 바란다. 따라서 EC2 SSH K

cwal.tistory.com

 

참고

'Service Mesh' 카테고리의 다른 글

Istio - (5) Destination Rule 응용  (0) 2021.04.06
Istio - (4) Traffic Management  (0) 2021.04.05
Istio - (3) Gateway와 VirtualService  (1) 2021.03.27
Istio - (2) Istio 설치(EKS)  (0) 2021.03.27