오늘도 기록하는 중 GitHub

Container & Orchestration/Kubenetes

Istio란?

YongE 2025. 5. 19. 17:35

🚀 서비스 메시


이번엔 쿠버네티스를 다룰 때 자주 나오는 기술인 Istio에 대해 알아보려고 한다! 설치는 나중에 쿠버네티스를 본격적으로 다뤄볼 때 언급하고 오늘은 이게 무엇인지에 대해서만 작성하려고 한다.

🌐 서비스 메시란 무엇인가?

서비스 메시는 마이크로서비스 아키텍처에서 서비스 간 통신을 관리하고 제어하는 인프라 레이어를 의미한다. 현대적인 클라우드 네이티브 애플리케이션이 복잡해지면서 서비스 간 통신 문제를 해결하기 위한 방법으로 등장했다. 서비스 메시는 서비스 간 통신에 대한 네트워킹, 보안, 관측 기능을 애플리케이션 코드와 분리하여 제공한다.

서비스의 수가 증가하면 잠재적 통신 경로의 수도 기하급수적으로 증가한다. 예를 들어 두 서비스에는 오직 두 개의 통신 경로만 있지만, 10개의 서비스에는 90개의 통신 경로가 생긴다. 이러한 복잡한 통신을 효율적으로 관리하기 위해 서비스 메시가 필요하다.

💡 Istio의 정의

Istio는 마이크로서비스 아키텍처의 관리, 보안 및 관찰 가능성을 단순화하는 것을 목표로 하는 오픈 소스 Service Mesh 플랫폼이다. C++로 개발된 고성능 프록시인 Envoy를 기반으로 동작하며, Kubernetes 환경에서 각 애플리케이션들의 네트워크 연결을 쉽게 설정하고 제어할 수 있도록 지원한다.

간단히 말해, Istio는 "내 마음대로 네트워크를 제어하는 가상 네트워크"라고 볼 수 있다. 실제 서비스 코드를 변경하지 않고도 네트워크 레벨에서 다양한 기능을 제공하기 때문이다.

🏗️ Istio의 아키텍처와 구성 요소

Istio는 크게 Control Plane과 Data Plane으로 구성된다. 이 두 계층이 어떻게 구성되고 동작하는지 살펴보자.

📊 데이터 플레인 (Data Plane)

데이터 플레인은 실제 서비스 간 통신이 이루어지는 계층이다. 주로 Envoy 프록시로 구성되며, 다음과 같은 역할을 수행한다.

  • 트래픽 라우팅. 서비스 간 요청을 적절히 라우팅한다.
  • 로드 밸런싱. 트래픽을 여러 서비스 인스턴스에 균형있게 분배한다.
  • 헬스 체크. 서비스의 상태를 주기적으로 확인한다.
  • 보안. TLS 암호화, 인증 등의 보안 기능을 제공한다.
  • 메트릭 수집. 서비스 간 통신에 대한 다양한 메트릭을 수집한다.

데이터 플레인은 쿠버네티스 관점에서 다음과 같은 형태로 존재한다.

  1. Ingress Gateway. 클러스터 내부로 들어오는 트래픽을 제어하는 Envoy 프록시다.
  2. Mesh. 실제 애플리케이션과 함께 사이드카 형태로 배포되는 Envoy 프록시다.
  3. Egress Gateway. 클러스터 외부로 나가는 트래픽을 제어하는 Envoy 프록시다.

다음은 데이터 플레인의 구조를 텍스트로 표현한 것이다.

[외부 트래픽] --> [Ingress Gateway] --> [Service A + Envoy Sidecar] --> [Service B + Envoy Sidecar] --> [Egress Gateway] --> [외부 서비스]
                                           |
                                           v
                                    [Service C + Envoy Sidecar]

🧠 컨트롤 플레인 (Control Plane)

컨트롤 플레인은 Istio의 두뇌 역할을 하며, 서비스 메시의 전반적인 동작을 제어하고 관리한다. 주요 구성 요소는 다음과 같다.

  • Pilot. 서비스 디스커버리, 트래픽 관리, 라우팅 규칙 설정 등을 담당한다.
  • Citadel. 보안 관련 기능을 제공하며, 인증, 암호화, 접근 제어 등을 처리한다.
  • Galley. Istio의 구성 관리를 담당하며, 사용자가 정의한 구성을 검증하고 배포한다.

Istio v1.5 이후부터는 위의 세 컴포넌트가 istiod라는 하나의 컴포넌트로 통합되어 배포된다. istiod는 쿠버네티스 커스텀 리소스의 변경을 감지하여 Envoy 전용 구성으로 변환한 후 사이드카에 전파하는 역할을 한다.

컨트롤 플레인의 구조를 텍스트로 표현하면 다음과 같다.

                [istiod]
                   |
     +-------------+-------------+
     |             |             |
[Pilot 기능]   [Citadel 기능]  [Galley 기능]
     |             |             |
     v             v             v
[서비스 디스커버리] [보안 관리]   [구성 검증]

🛠️ Istio의 핵심 기능

🔄 트래픽 관리 (Traffic Management)

Istio의 트래픽 관리 기능은 서비스 간 트래픽 흐름을 세밀하게 제어할 수 있게 해준다. 다음과 같은 기능을 제공한다.

  • 라우팅 규칙. 요청을 특정 서비스 버전으로 라우팅한다.
  • 로드 밸런싱. HTTP, TCP, WebSocket 등 다양한 프로토콜에 대한 로드 밸런싱을 제공한다.
  • 서킷 브레이커. 오류가 발생한 서비스로의 트래픽을 차단하여 장애 확산을 방지한다.
  • 타임아웃/재시도. 요청에 대한 타임아웃 설정 및 자동 재시도 기능을 제공한다.
  • 카나리 배포. 새 버전을 점진적으로 배포하는 전략을 지원한다.

예를 들어, A 서비스와 B 서비스가 있고 B 서비스는 2개 인스턴스로 스케일링되어 있을 때, Istio를 사용하면 A에서 B로 가는 트래픽을 2:8 비율로 로드 밸런싱할 수 있다.

[A 서비스] ---> 20% ---> [B 서비스 v1]
         \
          \-> 80% ---> [B 서비스 v2]

🔒 보안 (Security)

Istio는 서비스 메시 내의 모든 통신에 대해 강력한 보안 기능을 제공한다.

  • mTLS (Mutual TLS). 서비스 간 양방향 인증을 통한 암호화 통신을 지원한다.
  • 인증/권한 관리. 서비스 간 접근 제어 및 인증 정책을 적용한다.
  • 정책 적용. 트래픽에 대한 보안 정책을 적용하고 관리한다.

특히 mTLS는 서비스 간 통신 시 클라이언트와 서버가 각자의 인증서를 교환하고 검증하는 과정을 통해 보다 안전한 통신을 보장한다.

[서비스 A]                     [서비스 B]
    |                            |
    +---------암호화 통신-----------+

👁️ 관측 가능성 (Observability)

Istio는 서비스 메시 내의 모든 트래픽에 대한 가시성을 제공한다.

  • 메트릭 수집. 서비스 간 통신에 대한 다양한 메트릭을 자동으로 수집한다.
  • 로깅. 트래픽에 대한 상세 로그를 제공한다.
  • 분산 트레이싱. 여러 서비스를 거치는 요청의 전체 경로를 추적한다.
  • 시각화 도구 지원. Grafana, Jaeger/Zipkin, Kiali 등과 통합된다.

트레이싱 엔진은 요청 플로우의 전체 그림을 하나로 완성하여 아키텍처 상에서 오동작할 수 있는 영역을 인식하기 쉽도록 도와준다.

[사용자 요청] --> [서비스 A] --> [서비스 B] --> [서비스 C]
                    |             |             |
                    v             v             v
                    [트레이스 ID: abc-123] <-- 분산 트레이싱 --+
                    |                                    |
                    +-------------+---------------------+
                                  v
                            [시각화 도구]

🧩 Istio 리소스 및 구성 예제

Istio는 쿠버네티스 커스텀 리소스를 사용하여 다양한 설정을 관리한다. 주요 리소스는 다음과 같다.

🚪 Gateway

Gateway 리소스는 서비스 메시의 경계에서 인바운드 및 아웃바운드 트래픽을 관리한다. 다음은 Nginx를 Istio Gateway로 노출하는 예제이다.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: nginx-gateway
  namespace: default
spec:
  selector:
    istio: gateway  # gateway 컨트롤러의 label
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"  # 이 호스트에 대한 트래픽을 제어

🌐 VirtualService

VirtualService는 요청이 서비스로 라우팅되는 방법을 정의한다. Gateway와 함께 사용하여 트래픽 규칙을 설정할 수 있다.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: nginx-vs
  namespace: default
spec:
  hosts:
  - "*"
  gateways:
  - nginx-gateway  # 이 VirtualService가 위의 Gateway와 연결
  http:
  - route:
    - destination:
        host: nginx.default.svc.cluster.local  # 실제 서비스
        port:
          number: 10080  # 지정한 포트로 라우팅

🔐 PeerAuthentication

PeerAuthentication 리소스는 서비스 간 mTLS 설정을 위해 사용된다.

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: example-peer-auth
  namespace: default
spec:
  mtls:
    mode: STRICT  # 엄격한 mTLS 모드 적용

🚦 Istio 데이터 플레인의 모드


Istio의 데이터 플레인은 네트워크 트래픽을 제어하는 핵심 요소다 Kubernetes 클러스터에서 Istio는 Sidecar 모드와 Ambient 모드라는 두 가지 방식을 제공한다 각 모드는 트래픽 처리 방식과 리소스 활용 관점에서 차이를 보인다.
보다 자세한 정보는 공식문서에서 볼 수 있다.

https://istio.io/latest/docs/overview/dataplane-modes/

🚌 Sidecar 모드

🛠️ 동작 원리

  • 애플리케이션 Pod에 Envoy 사이드카 프록시가 주입된다
  • 모든 인바운드·아웃바운드 트래픽이 사이드카를 통해 처리된다

🔧 특징

  • Layer 4와 Layer 7 프로토콜 모두 지원한다
  • 세밀한 트래픽 제어와 모니터링이 가능하다
  • Pod마다 프록시가 추가되므로 리소스 소비와 운영 복잡도가 증가한다

Sidecar 아키텍쳐 예시

🌫️ Ambient 모드

🛠️ 동작 원리

  • 각 노드에 Ztunnel DaemonSet이 배포된다
  • 워크로드 Pod가 네트워크 트래픽을 Ztunnel으로 리다이렉션한다
  • Layer 7 기능이 필요할 때는 네임스페이스 단위로 Waypoint Envoy 프록시를 옵션으로 연결한다

Ambient 아키텍쳐 예시

🔧 특징

  • Pod에 사이드카 주입이 불필요해 리소스 효율성이 높다
  • 애플리케이션 설정이나 코드 변경 없이 메시를 적용할 수 있다
  • 기본적으로 L4 트래픽만 처리하므로 세밀한 L7 제어는 제한된다
  • L7 처리가 필요할 경우 Waypoint로 보완할 수 있다

🔍 Istio의 활용 사례

Istio는 다양한 상황에서 활용될 수 있다.

  1. 마이크로서비스 통신 관리. 복잡한 마이크로서비스 환경에서 서비스 간 통신을 효율적으로 관리한다.
  2. 점진적 배포 전략. A/B 테스팅, 카나리 배포 등 다양한 배포 전략을 쉽게 구현한다.
  3. 멀티 클라우드 환경. 여러 클라우드 환경에 걸쳐 있는 서비스 간 통신을 통합 관리한다.
  4. 보안 강화. mTLS를 통한 서비스 간 암호화 통신 및 접근 제어를 적용한다.
  5. 모니터링 및 디버깅. 서비스 메시 전반의 트래픽 상태를 모니터링하고 문제를 진단한다.
  6. 서킷 브레이커. 목적지 마이크로서비스에 문제가 있을 때 접속을 차단하고 출발지 마이크로서비스에 요청 에러를 반환한다.
반응형