인생을 코딩하다.

[쿠버네티스] 쿠버네티스(k8s) 서비스 메시 패턴의 구현체인 Istio란? 본문

Infra

[쿠버네티스] 쿠버네티스(k8s) 서비스 메시 패턴의 구현체인 Istio란?

Hyung1 2021. 11. 2. 17:44
728x90
반응형

쿠버네티스 서비스 메시 패턴의 구현체인 Istio란?

초창기 MSA 기술인 넷플릭스 OSS나 스프링 클라우드 기반의 서비스를 구축 및 운용할 때의 문제점은 API 게이트웨이, 서비스 레지스트리, 컨피그 서비스와 같이 운영 관리를 위한 여러 개의 기반 서비스를 별도로 각각 만들어야 한다는 번거러옴과 더불어 아래 그림과 같이 업무 처리 마이크로서비스에 스프링 클라우드 서비스를 사용하기 위한 라이브러리를 비즈니스 로직과 함께 탑재해야 한다는 점이였습니다.

또한 스프링 클라우드는 자바 기반이기 때문에 마이크로서비스가 자바 외의 다른 언어로 폴리글랏하게 구현된 경우에는 스프링 클라우드 서비스를 아예 사용할 수조차 없습니다.

 

그런데 최근에는 MSA 문제 영역 해결을 위한 기능(서비스 탐색, 서킷 브레이커,  추적, 로드 밸런싱 등)을   비즈니스 로직과 분리해서 네트워크 인프라 계층에서 수행하게 하는 서비스 메시 패턴이 선호되고 있습니다.

 

서비스 메시 패턴의 대표적 구현체를 이스티오(Istio)라고 부릅니다.  이스티오는 애플리케이션이 배포되는 컨테이너에 완전히 격리되어 별도의 컨테이너로 배포되는 사이드카 패턴을 적용해서 서비스 디스커버리, 라우팅, 로드 밸런싱, 로깅, 모니터링, 보안, 트레이싱 등의 기능을 제공합니다.

 

이러한 이스티오는 쿠버네티스에 탑재되어 서비스 메시 기능을 지원합니다. 그리고 Istio는 Envoy 프록시 의 확장 버전을 사용합니다. Envoy는 서비스 메시의 모든 서비스에 대한 모든 인바운드 및 아웃바운드 트래픽을 중재하기 위해 C++로 개발된 고성능 프록시입니다. Envoy 프록시는 데이터 플레인 트래픽과 상호 작용하는 유일한 Istio 구성 요소입니다.

 

Envoy 프록시는 서비스에 대한 사이드카로 배포되어 다음과 같이 Envoy의 많은 기본 제공 기능으로 서비스를 논리적으로 보강합니다.

  • 동적 서비스 검색
  • 부하 분산
  • TLS 종료
  • HTTP/2 및 gRPC 프록시
  • 회로 차단기
  • 상태 확인
  • % 기반 트래픽 분할이 있는 단계적 출시
  • 결함 주입
  • 풍부한 측정항목

Envoy 프록시가 활성화하는 일부 Istio 기능 및 작업은 다음과 같습니다.

  • 트래픽 제어 기능: HTTP, gRPC, WebSocket 및 TCP 트래픽에 대한 풍부한 라우팅 규칙으로 세분화된 트래픽 제어를 시행합니다.
  • 네트워크 복원 기능: 설정 재시도, 장애 조치, 회로 차단기 및 오류 주입.
  • 보안 및 인증 기능: 보안 정책을 시행하고 구성 API를 통해 정의된 액세스 제어 및 속도 제한을 시행합니다.

Istio 서비스 메시의 아키텍쳐는 논리적으로 데이터 플레인 과 컨트롤 플레인 으로 분할됩니다.

  • Data Plane(데이터 플래인)
    • 서비스 옆에 사이드카(Envoy)를 붙여, 서비스로 들어오고 나가는 트래픽을 Envoy를 통해 통제합니다.
    • 유입/유출 트래픽 통제 : Ingress/Egress Controller
  • Control Plane(컨트롤 플래인)
    • 메시는 그물망이라는 뜻이며, 서비스 메시는 촘촘한 서비스 네트워크 망을 제공한다는 의미입니다.
    • 사이드카 패턴은 모든 서비스에 컨테이너에 추가로 사이드카 컨테이너가 배포되는 패턴으로 각 서비스를 연게할 때 한 서비스가 다른 서비스를 직접 호출하지 않고 사이드카인 프락시를 통해 연계해서 개발자가 별도의 작업 없이 관리 및 운영에 대한 서비스를 적용할 수 있게한 패턴입니다.
    • 그 외, 서비스 탐색, 로드 밸런싱, 동적 라우팅, 서킷 브레이커, 분산 추적, 매트릭 수집

스프링 클라우드 + 넷플릭스 OSS를 사용했을 때보다 이스티오의 장점은 무엇일까요?

스프링 클라우드와 넷플릭스 OSS를 이용한 경우에는 스프링 클라우드로 각 서비스를 먼저 구축하고 마이크로서비스 애플리케이션 자체도 코드 내부에 스프링 클라우드 사용을 위한 클라이언트 코드가 탑재되어야 합니다. 하지만 서비스 메시를 적용하는 경우에는 마이크로서비스마다 함께 배포되는 사이드카 프락시에 운영 관리를 위한 기능이 별도로 담겨있기 때문에 마이크로서비스는 순수 비즈니스 로직에 집중할 수 있습니다.

이스티오는 스프링 클라우드와 넷플릭스 OSS에서 제공했던 대부분의 기능을 모두 제공하면서 동시에 차별점도 있습니다.

주요기능

  • 트래픽관리: 동적 라우팅, 로드 밸런싱
  • 보안 통신: 보안 통신 채널(TLS), 인증/인가/암호화
  • 관측성: 메트릭, 분산 트레이싱, 로깅

스프링 클라우드 및 넷플릭스 OSS와의 차별점

  • 애플리케이션 코드의 변경이 거의 없습니다. 스프링 클라우드나 넷플릭스 OSS 기반은 비즈니스 로직과 함께 코드로 표현돼야 하지만 이스티오는 완전히 사이드카로 격리되며 yamll 파일과 같은 설정 파일에 의해 정의됩니다.
  • 폴리글랏 애플리케이션도 지원합니다. 스프링 클라우드나 넷플릭스 기반은 자바 언어만 지원하나 이스티오는 각 마이크로서비스를 다른언어(java, node.js, c#)로 작성한 경우에도 지원 가능합니다.
  • 이스티오는 쿠버네티스와 완벽하게 통합된 환경을 지원합니다.

 

 

728x90
반응형
Comments