새소식

인기 검색어

Service_Mesh/Istio

[Istio-1주차] Service Mesh 정의 및 Istio 소개 (이론)

  • -

목차

  1. 개요
    • 1.1. 서비스 메시란 무엇인가?
    • 1.2. Istio란 무엇인가?
    • 1.3. 왜 Istio인가?
  2. Istio 핵심 기능 및 아키텍처
    • 2.1. Istio의 주요 기능
    • 2.2. Istio 아키텍처
    • 2.3. Envoy 프록시와 사이드카 패턴
    • 2.4. 서비스 메시와 API 게이트웨이의 관계
  3. 서비스 메시 사용 시 고려할 점
  4. 결론

1. 개요


1.1. 서비스 메시란 무엇인가?


  • 서비스 메시(Service Mesh)는 프로세스 외부에서 분산된 애플리케이션 간의 네트워크 트래픽을 '투명하게' 관리하고, 보안 및 관찰 가능성(Observability)을 제공하는 인프라 계층을 의미한다.

  1. 등장 배경
    1. 기존 모놀리식 아키텍처 → 마이크로서비스 전환: 시스템이 분산됨에 따라 통신 복잡성이 증가하여, 다음과 같은 문제점이 대두되었다.
      • 복잡한 서비스 관계: 서비스 간 상호작용 증가로 장애 전파 위험도 증가
      • 관찰 가능성(Observability) 부족: 분산 시스템에서 무슨 일이 일어나고 있는지 파악하기 어려움
      • 일관된 보안 정책 부재: 다양한 팀이 서로 다른 보안 접근 방식 사용
    2. 내부망 진입점의 역할을 하는 GW(ex. API Gateway)의 경우 모든 동작 처리가 무거워지고, 내부망 내부 통신 제어는 어려웠다.
    3. 클라우드 인프라 신뢰성은 100%가 아니므로(일시적이거나 간혹 사용 불가능, SLA 99.99%), 이를 염두에 둔 앱을 설계할 필요성이 증가하였다.
      _
  2. 기존 시도
    • 서비스 상호작용 복원력/로드밸런싱을 높이기 위한 몇 가지 패턴이 발전하였다. (접힌 글 참고)
      • 더보기
        • 클라이언트 측 로드 밸런싱 Client-site load balancing (클라이언트에게 엔드포인트 목록을 제공하고 어떤 엔드포인트를 호출할지를 클라이언트가 결정)
        • 서비스 디스커버리 Service discovery (특정 논리적 서비스의 주기적으로 갱신되는 정상 엔드포인트 목록을 찾는 매커니즘)
        • 서킷 브레이커 Circuit breaking (오동작하는 것으로 보이는 서비스에 일정 시간 부하를 차단)
        • 격벽 Bulkheading (서비스 호출 시 클라이언트 리소스 사용량을 명시적 임계값으로 제한 (커넥션, 스레드, 세션 등))
        • 타임아웃 Timeouts (서비스 호출 시 요청, 소켓, 활성 liveness 등에 시간 제한을 적용)
        • 재시도 Retries (실패한 요청을 재시도)
        • 재시도 예산 Retry budgets (재시도에 제한을 적용. 즉, 일정 기간의 재시도 횟수를 제한하는 것 (예. 10초 동안 호출의 50%까지만 재시도 가능))
        • 데드라인 Deadlines (요청에 응답 유효 기간을 지정. 데드라인을 벗어나면 요청 처리를 무시)
    • 해당 내용은 개발자-Side의 '애플리케이션 네트워킹' 으로 적용 노력한 패턴들이다.
    • 그러나 개발팀이 적용 및 유지보수하기에는 라이브러리 의존성에 따른 이슈가 발생하였다.
      • ex) 구글의 stubby 프레임워크는 자바 런타임만을 대상으로 함
    • 서비스 메시는 Microservice 환경의 대응 개발에 투입된 개발자들에게, 위와 같은 추가 업무 부담을 줄여주기 위해 등장한 것이라고도 할 수 있다.
      • 기본적인 애플리케이션 네트워킹 문제는 특정 애플리케이션, 언어, 프레임워크만의 전유물이 아니다.
      • 재시도, 타임아웃, 클라이언트 측 로드 밸런싱, 서킷 브레이킹 등이 애플리케이션 기능을 차별화하는 것도 아니다.
      • 개발자가 시간 낭비 없이, 본인 업무에 집중하도록 해야 한다.
      • 애플리케이션 코드에 직접 구현해야 했던 기능(예: 로드 밸런싱, 재시도, 타임아웃 등)을 서비스 메시(인프라 영역)이 대신 처리할 수 있게끔 구현하는 것이 목표였다.
        _
  3. 인프라에 전가하기 위한 노력
    • 프록시 사용으로 관심사를 인프라로 옮기려는 시도를 진행하였다.
      • 필요한 것은 전통적 인프라 프록시(커넥션, 패킷 based)가 아니다.
        기존 통신 환경
      • 애플리케이션을 인식할 수 있고 서비스를 대신해 애플리케이션 네트워킹을 수행할 수 있는 7계층 프록시가 필요했다.
        애플리케이션 수정 없이, 모든 애플리케이션 통신 사이에 Proxy를 구현하는 방식
      • 프록시는 결국 DataPlane 이니, 이를 중앙에서 관리하는 ControlPlane을 두고 중앙에서 관리 가능하도록 설계하자. 가 서비스 메시 핵심 구조.
        Proxy에 대한 정책,설정 관리
        _
  4. 서비스 메시 구조
    • 하단 그림은 서비스 프록시가 데이터 플레인을 형성하는 방식을 보여준다.
      • 데이터 플레인
        • 모든 트래픽을 처리하고 관찰하는 곳이다.
        • 메시를 거쳐가는 트래픽을 설정하고 보호하고 제어하는 책임을 맡는다.
      • 컨트롤 플레인
        • 데이터 플레인의 동작을 설정하고 관리한다.
        • 메시의 두뇌이며, 운영자가 네트워크 동작을 조작할 수 있게끔 API를 노출한다.
      • 요청은 서비스 프록시를 통해 서비스로 전달된다.
      • 애플리케이션 수준 프록시(Data Plane)과 관리 구성 요소(Control Plane)과 함께 배치된 Service Mesh를 통해 네트워크 트래픽을 관리하고 정책이 구현된다. 이는 클라우드 네트워크 아키텍처에 필요한 다음 중요 기능을 제공한다.
        • 서비스 복원력
        • Observability(관찰 가능성) 신호
        • 트래픽 제어 기능
        • 보안
        • 정책 강제 Policy enforcement

    출처: https://livebook.manning.com/book/istio-in-action/chapter-1/77
    _

  5. 결론
  • 서비스 메시는 이 모든 기능을 애플리케이션 코드 변경이나 의존성 추가를 거의(혹은 전혀) 하지 않고도 서비스 운영자에게 제공한다.
  • 일부 기능에서는 애플리케이션 코드와 약간의 협업이 필요하지만, 크고 복잡한 라이브러리 의존성을 피할 수 있다.
  • 서비스 메시를 사용하면 애플리케이션을 구축하는 데 어떤 애플리케이션 프레임워크나 프로그래밍 언어를 사용했든지 상관없이 이러한 기능들이 일관되고 정확하게 구현되므로, 서비스 팀이 변화를 구현해 전달할 때 빠르고 안전하며 자신감 있게 움직일 수 있게 된다.

1.2. Istio란 무엇인가?

  • Istio는 구글, IBM, 리프트가 개발한 서비스 메시를 구현하는 대표적인 오픈소스 플랫폼이며, 마이크로서비스 환경에서 통신과 관련된 복잡성을 줄여주는 도구 역할을 수행한다.
  • Istio 는 그리스어로 '돛'을 의미한다. (k8s 의 경우 항해 용어를 채택하므로, 이에 어울리도록 이스티오 또한 네이밍한 것이라는 이야기가 있다.)
  • 서비스 메시 구조인 데이터 플레인(서비스 프록시), 컨트롤 플레인으로 구성된다.
  • 데이터 플레인: Envoy 프록시를 기반으로 한 서비스 프록시로 구성된다. 
    • 서비스 프록시
      • 애플리케이션 옆에 자리 잡고 있다.
      • 애플리케이션 간의 중개자 역할을 하며, 컨트롤 플레인이 전달한 설정에 따라 네트워킹 동작에 영향을 준다.
  • 컨트롤 플레인
    • 최종 사용자/운영자용 API, 프록시용 설정 API, 보안 설정, 정책 선언 등을 제공하는 몇 가지 구성 요소로 이루어져 있다.
  • Istio는 MSA 또는 서비스 지향 아키텍처 SOA 를 염두에 뒸지만, 그 아키텍처들에만 국한되지는 않으며 설계 상 쿠버네티스, 오픈시프트는 물론 가상머신과 같은 기존 배포 환경 등에서도 사용 가능하다. (배포 플랫폼에 구애받지 않는 관점으로 구성되었다.)

Istio 구조


1.3. 왜 Istio인가?

  • Istio는 Envoy 프록시를 사용하여 네트워킹을 구현하여, 종속성에 영향을 받지 않는다.
    • Envoy는 구글 IBM 리프트(Lyft) 가 중심이 되어 개발하고 있는 오픈소스 소프트웨어이며, C++로 구현된 고성능 Proxy이다.
    • 중앙에서 설정 관리가 잘 된다. 즉, 원격에서 동적인 설정 관리가 유연하며, 풍부한 API 가 지원된다.
      • Nginx Ingress 와 같은 경우 컨테이너 설정을 동적으로 바꿀 수 없다. (컨테이너,프로세스 등 재기동 필요)
    • 애플리케이션 종속성에 영향을 받지 않으며 애플리케이션의 모든 트래픽을 프록시(L7)로 가로채서 제공한다.
  • Istio 의 Envoy 프록시를 통해 서비스간 네트워킹 이슈를 애플리케이션에서 인프라로 이동시킬 수 있다.
    • 언어나 프레임워크에 명시적 의존성 없이도 재시도, 타임아웃, 서킷 브레이커, 클라이언트 측 로드 밸런싱, 서비스 디스커버리, 메트릭 수집 등의 네트워크 관심사에 대해 구현하였다.
    • 서킷 브레이커, 시간 초과, 재시도, 서비스 디스커버리, 로드 밸런싱 등을 위해 언어별 복원력 라이브러리가 필요하지 않다. 또한, 메트릭 수집, 분산 트레이싱, 접근 제어도 처리한다.
    • 초당 요청 수, 실패 횟수, 서킷 브레이커 이벤트와 같은 여러 애플리케이션 네트워킹 메트릭을 수집하여 관찰 가능성(Observability)를 제공한다.
  • Istio는 기본적으로 보안이 활성화되어 있어 아키텍처 요구 사항을 충족한다.
    • 애플리케이션 네트워킹 양 끝단을 제어하므로 서비스 트래픽을 투명하게 암호화할 수 있다. (제로트러스트에 적합)
    • 서비스가 mTLS를 바로 사용할 수 있도록 키 및 인증서 발급, 설치, 로테이션을 관리할 수 있다.
    • 워크로드에 ID를 부여하고 이를 인증서에 포함시킬 수 있으며, ID를 사용해 강력한 접근 제어 정책을 구현할 수 있다.
  • Istio를 사용하면 할당량, 속도 제한, 조직 정책을 구현할 수 있다.
    • 정책 강제 policy enforcement 를 사용하면, 어떤 서비스가 서로 상호작용할 수 있고 어떤 서비스가 상호작용할수 없는지에 대해 아주 세밀한 규칙을 만들 수 있다.
  • Istio로 Kubernetes 환경에서 다양한 워크로드를 효과적으로 관리할 수 있다.

2. Istio 핵심 기능 및 아키텍처


2.1. Istio의 주요 기능

  1. 트래픽 관리: Istio는 서비스 간 트래픽의 라우팅, 로드 밸런싱, 복원력을 제공한다. 운영자는 트래픽 흐름을 제어하고 카나리 릴리즈, 다크 런치, 단계적 롤아웃, A/B 스타일 테스트와 같은 세밀한 릴리즈 구현이 가능하다.
  2. 보안: Istio는 서비스 간 통신 암호화를 위한 상호 TLS(mTLS)를 제공하며, 인증 및 권한 부여를 통해 강력한 보안 환경을 구축한다. 키 및 인증서 발급과 로테이션을 자동으로 관리한다. 이스티오는 서비스가 mTLS를 바로 사용할 수 있도록 키 및 인증서 발급, 설치, 로테이션을 관리한다.
  3. 관측 가능성(Observability): Istio는 원격 측정, 로깅 및 모니터링 기능을 내장하여 서비스 상태를 시각적으로 확인하게 해준다. 메트릭과 분산 트레이싱 데이터를 수집하고 병목 현상이나 성능 문제를 분석할 수 있다.

2.2. Istio 아키텍처

Istio는 크게 데이터 플레인(Data Plane)과 컨트롤 플레인(Control Plane)으로 구성된다.

출처: https://istio.io/latest/docs/ops/deployment/architecture/

  • 데이터 플레인: Envoy 프록시가 각 서비스 옆에 사이드카 형태로 배치되어 다음과 같은 역할을 수행한다.
    • 서비스 간 통신 가로채기
    • 트래픽 제어(예: 라우팅 및 타임아웃 설정, Canary 배포)
    • TLS 암호화 및 인증
    • 메트릭 및 로그 수집
  • 컨트롤 플레인: 컨트롤 플레인은 Istiod라는 핵심 컴포넌트를 중심으로 구성되며 다음 역할을 담당한다.
    • 서비스 디스커버리
    • 트래픽 정책 전달
    • 인증 및 인가
    • 사이드카 프록시 설정 전파

또한, Istio Gateway를 통해 외부 트래픽의 진입/출입을 관리하고, Observability(가시성)를 위해 OpenTracing, Prometheus, Grafana 등의 모니터링 솔루션과 연동 가능하다.


Istiod 구성 요소

  • Legacy Architecture (istio 1.5 이전)

Legacy Architecture (istio 1.5 이전)

  • 1.5 이전 버전은 pilot, galley, citadel, mixer로 구성된 MSA 구조
  • istio가 컨트롤 플레인을 MSA 구조에서 istiod 단일 구조로 전환한 것에 대한 이야기:

 

  • Latest architecture

출처: https://istio.io/v1.6/docs/ops/deployment/architecture/#istiod

 

  • istiod 하나만 있는 모노리틱 컴포넌트 (내부에서 서비스 동작)

구성 요소 (상세)

  • 파일럿(Pilot): Traffic Management, and Service Discovery
    • Traffic Management: 프록시 라우팅 규칙 관리. istio의 각종 Traffic Management API(VirtualServiceDestinationRuleGatewaysServiceEntrySidecar)가 동작할 수 있도록 Envoy에 주입
    • Service Discovery: 서비스 디스커버리와 로드밸런싱 설정 제공. K8s 클러스터와 Istio 서비스 매시에 새로운 인스턴스가 Deploy 될 시 해당 정보를 반영한 새로운 Envoy 규칙을 각 Envoy Proxy에 전파
  • 갤리(Galley): Configuration Management
    • Istio와 쿠버네티스(TLS 연결 및 파일럿에 필요한 설정)를 연결해 주며, 서비스 메시 구성 데이터를 검증하고 변환(VirtualService, DestinationRule 같이 K8s 리소스로 정의한 것들을 읽어서 검증하고, Envoy Proxy가 이해 가능한 형태로 변환)
  • 시타델(Citadel): Certificate Generation
    • 보안 기능을 담당하며, TLS 인증서 발급 및 관리를 통해 서비스 간 통신의 암호화 수행
      (istio 워크로드 사이에 mTLS 통신을 세팅 하기 위해서 Certificate를 싸인하고 주입)

2.3. Envoy 프록시와 사이드카 패턴

  • Envoy는 Istio의 핵심 구성 요소로, 고성능 애플리케이션 L4/7 Proxy이다.
  • 네트워크의 투명성을 목표, 다양한 필터체인 지원(L3/L4, HTTP L7), 동적 configuration API 제공, api 기반 hot reload 제공한다.
  • Envoy의 각 애플리케이션 인스턴스와 함께 배포되는 Sidecar 패턴은 다음과 같은 장점을 제공한다.
    • 애플리케이션 코드 변경 없이 네트워크 기능 구현
    • 추가 홉 없이 트래픽 처리
    • 분산 트레이싱 스팬(span) 수집으로 병목 현상 분석 가능
  • Envoy는 리프트에서 SOA 인프라의 일부로 개발됐으며, 언어나 프레임워크에 명시적 의존성 없이도 재시도, 타임아웃, 서킷 브레이커, 클라이언트 측 로드 밸런싱, 서비스 디스커버리, 보안, 메트릭 수집 등의 네트워크 관심사를 구현할 수 있다.
  • 엔보이를 사용하면 서비스 간에 어떤 일이 일어나고 있는지 자동으로 알 수 있게 되는데, 바로 여기서 예상치 못한 복잡성을 많이 발견하게 된다.
  • 엔보이 프록시는 서비스 아키텍처에서 공통적인 서비스 간 신뢰성과 관찰 가능성 문제를 해결할 수 있는 기반이며, 이 기반을 토대로 이런 문제를 애플리케이션에서 인프라로 이동시킬수 있다.
  • Istio 구성요소와 envoy
    • 컨트롤 플레인(istiod) - ADS 를 이용한 Configuration 동기화 - 데이터 플레인(istio-proxy → envoy)

Envoy 용어

https://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request

  • Cluster : envoy 가 트래픽을 포워드할 수 있는 논리적인 서비스 (엔드포인트 세트), 실제 요청이 처리되는 IP 또는 엔드포인트의 묶음을 의미.
  • Endpoint : IP 주소, 네트워크 노드로 클러스터로 그룹핑됨, 실제 접근이 가능한 엔드포인트를 의미. 엔드포인트가 모여서 하나의 Cluster 가 된다.
  • Listener : 무엇을 받을지 그리고 어떻게 처리할지 IP/Port 를 바인딩하고, 요청 처리 측면에서 다운스트림을 조정하는 역할.
  • Route : Listener 로 들어온 요청을 어디로 라우팅할 것인지를 정의. 라우팅 대상은 일반적으로 Cluster 라는 것에 대해 이뤄지게 된다.
  • Filter : Listener 로부터 서비스에 트래픽을 전달하기까지 요청 처리 파이프라인
  • UpStream : envoy 요청을 포워딩해서 연결하는 백엔드 네트워크 노드 - 사이드카일때 application app, 아닐때 원격 백엔드
  • DownStream : Envoy에 연결하는 엔터티, 사이드카가 아닌 모델에서는 원격 클라이언트

  • Envoy는 구성을 동적으로 관리하기 위한 강력한 API 제공이 중요하다.

Envoy 구조

  • Service Mesh 솔루션이나, Gateway API 구현체들은 Envoy를 내부적으로 사용하고 있다.
    • Envoy가 제공하는 동적 구성을 위한 API (xDS Sync API)를 이용하여 다양한 네트워크 정책을 구성하게 된다.
    • Envoy의 xDS Sync API는 아래와 같은 레이어에서 동작한다.
      • LDS - Listener Discovery Service
      • RDS - Route Discovery Service
      • CDS - Cluseter Discovery Service
      • EDS - Endpoint Discovery Service

https://blog.naver.com/yu3papa/223614975957


2.4. 서비스 메시와 API 게이트웨이의 관계

  • Istio와 서비스 메시 기술은 API 게이트웨이와 몇 가지 유사점과 차이점을 공유한다.
  • API 게이트웨이 인프라는 API 관리 제품군에서 조직의 공개 API에 외부에서 접근할 수 있는 엔드포인트를 제공하는 데 사용한다.
  • API 게이트웨이의 역할은 크게 두 가지다.
    • 공개 API에 보안, 속도 제한, 할당량 관리, 메트릭 수집 기능을 제공하는 것
    • API 계획 명세, 사용자 등록, 요금 청구와 기타 운영 문제를 포함하는 전반적 API 관리 솔루션에 공개 API를 연결하는 것이다.
  • API 게이트웨이는 트래픽이 흐르는 중앙집중 시스템을 만들기 때문에 병목 현상의 원인이 될 수 있다.
  • 반면, 서비스 메시에서 프록시는 서비스와 함께 배치되므로 추가 홉을 거치지 않는다.
  • 또한 서비스 메시는 탈중앙적이므로, 각 애플리케이션은 자신의 프록시를 자신의 워크로드에 맞게 설정할 수 있고 시끄러운 이웃(noisy neighbor) 시나리오에 영향을 받지 않는다.
  • 각 프록시는 짝 애플리케이션 인스턴스와 함께 있으므로, 애플리케이션이 알아차리거나 적극적으로 참여할 필요 없이 전송 매커니즘을 처음부터 끝까지 end-to-end 보호할 수 있다.
  • Istio 같은 서비스 메시 기술이 계속 성숙하게 되면, API 관리가 서비스 메시 위에 구축되고 전문 API 게이트웨이 프록시가 필요하지 않게 될 것이다.

3. 서비스 메시 사용 시 고려할 점

  1. 프록시에 익숙하지 않을 경우 연결 구성 미흡으로 통신 장애가 발생할 수 있다 (디버깅 어려움).
  2. 또 하나의 인프라 영역이 만들어지므로 메시 잘못 구성 시 잘 돌아가는 서비스에 영향을 미쳐버릴 수 있다. (격리 측면에서 말한것)
  3. 레이어 추가로 복잡성이 증가 (운영상의 이슈 발생 가능, R&R 절차/거버넌스 사전 수립 필요)

4. 결론

  • Istio는 마이크로서비스 환경에서 네트워킹 문제를 해결하고 보안 및 관찰 가능성을 제공하는 강력한 도구다.
  • 이를 통해 개발자는 코드 변경 없이 복잡한 네트워킹 요구사항을 충족할 수 있으며 운영자는 안정적이고 효율적인 서비스를 구축할 수 있다.
  • 서비스 메시 기술은 점점 더 중요한 역할을 하고 있으며, Istio는 하나의 적합한 방법으로 제공되고 있다.

 

실습: https://lati-tech.tistory.com/entry/Istio-1주차-Istio-첫걸음-실습

 

[Istio-1주차] Istio 첫걸음 (실습)

1. 환경Istio in action 책: docker desktop, k8s 1.21.1, istio 1.13 (22.02.11 출시된 구 버전으로, istio-proxy init 실패) - Link스터디 : docker (kind - k8s 1.23.17 ‘23.2.28 - Link) , istio 1.17.8(’23.10.11) - Link2. 구성Kind(k8s) 구성

lati-tech.tistory.com

 

Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.