IT 끄적이기

쿠버네티스(k8s) 학습하기 - Istio란?

미르아 2024. 12. 27. 17:52
728x90

Istio란?

Istio는 분산 애플리케이션(마이크로서비스)에서 다음과 같은 문제를 해결해주는 플랫폼입니다:

  • 서비스 간의 통신 제어: 서비스 간 트래픽 라우팅, 부하 분산, 실패 처리.
  • 보안: 서비스 간의 통신을 암호화(TLS)하고 인증 및 권한 부여를 처리.
  • 모니터링: 서비스 간의 성능, 요청 상태 등을 실시간으로 관찰.
  • 정책 관리: 특정 서비스에 대한 접근 제한, 트래픽 관리 정책 설정.

Istio의 주요 기능

1. 트래픽 관리

  • 라우팅:
    • 서비스 A가 서비스 B로 요청을 보낼 때 트래픽을 제어.
    • 예: 특정 버전의 애플리케이션으로만 트래픽을 보냄(예: Canary 배포).
  • 로드 밸런싱:
    • 여러 인스턴스에 트래픽을 고르게 분배.
  • 리트라이와 타임아웃:
    • 요청 실패 시 자동 재시도 및 타임아웃 설정.

2. 서비스 보안

  • mTLS(상호 TLS):
    • 서비스 간 통신을 암호화하고 인증.
  • 권한 제어:
    • 요청이 허용되거나 거부될 수 있는 정책 설정.

3. 관찰 가능성(Observability)

  • 모니터링:
    • Grafana, Prometheus 같은 도구와 통합하여 요청 상태를 추적.
  • 분산 트레이싱:
    • 요청이 서비스 간에 어떻게 이동하는지 추적(예: Jaeger, Zipkin과 통합).

4. 서비스 정책

  • 트래픽을 특정 조건에 따라 제한하거나, 서비스 간의 통신을 차단.

Istio의 아키텍처

Istio는 크게 두 가지 주요 컴포넌트로 이루어집니다:

1. 데이터 플레인(Data Plane)

  • 사이드카 프록시(Sidecar Proxy):
    • Istio는 각 서비스의 컨테이너 옆에 사이드카 프록시를 배치합니다(예: Envoy Proxy).
    • 이 프록시는 모든 네트워크 요청을 가로채고 관리합니다.
    • 사이드카 프록시가 트래픽을 암호화하고, 라우팅하며, 로깅 데이터를 수집합니다.

2. 컨트롤 플레인(Control Plane)

  • Istio 컨트롤 플레인은 데이터 플레인을 관리하고 정책을 설정합니다. 주요 컴포넌트는 다음과 같습니다:
    • Pilot: 트래픽 라우팅 설정 및 Envoy Proxy로 전달.
    • Citadel: 인증 및 보안 인증서 관리.
    • Mixer: 메트릭 수집, 모니터링, 정책 적용.

Istio를 사용하는 이유

  • 마이크로서비스 간 복잡성 관리:
    • 많은 서비스 간 통신이 이루어지는 환경에서 각 서비스의 네트워킹, 보안, 모니터링 로직을 분리.
  • 안정성:
    • 장애 복구, 트래픽 재시도 등으로 서비스의 안정성을 높임.
  • 효율적인 배포:
    • Canary 배포, A/B 테스트와 같은 전략적인 배포 방식 지원.
  • 표준화:
    • 모든 서비스에 동일한 방식의 보안 및 정책 적용.

Istio의 주요 사용 사례

  1. 서비스 간 암호화 통신:
    • 애플리케이션 코드를 수정하지 않고도 모든 서비스 간 통신을 자동으로 암호화.
  2. 트래픽 분배 및 Canary 배포:
    • 새로운 버전의 애플리케이션을 배포할 때, 일부 트래픽만 새 버전으로 라우팅.
  3. 서비스 장애 복구:
    • 한 서비스가 실패했을 때 다른 서비스로 요청을 재전송하거나 차단.
  4. 서비스 간 모니터링:
    • 어떤 요청이 성공했는지, 실패했는지, 얼마나 지연이 발생했는지 분석.

Istio 설치 및 사용

  1. Istio 설치
    • Helm 또는 istioctl 명령어를 사용해 쿠버네티스 클러스터에 Istio를 설치합니다.
    bash
    코드 복사
    istioctl install --set profile=demo
    
    
  2. Namespace에 Istio 사이드카 주입 활성화
    • 애플리케이션 네임스페이스에 Istio 사이드카 프록시를 자동으로 추가합니다.
    bash
    코드 복사
    kubectl label namespace <your-namespace> istio-injection=enabled
    
    
  3. 서비스 배포
    • 기존 애플리케이션 배포 방식에 사이드카 프록시가 추가됩니다.
    bash
    코드 복사
    kubectl apply -f my-deployment.yaml
    
    
  4. 트래픽 정책 설정
    • 트래픽 라우팅, 로드 밸런싱, 타임아웃 등을 설정하는 YAML 파일 작성.
    yaml
    코드 복사
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: my-service
    spec:
      hosts:
      - my-service
      http:
      - route:
        - destination:
            host: my-service
            subset: v1
    
    

Istio와 쿠버네티스의 관계

  • 쿠버네티스는 클러스터와 애플리케이션을 관리합니다.
  • Istio는 쿠버네티스 위에서 실행되며, 서비스 간 통신을 효율적으로 관리하는 데 초점을 둡니다.
  • 두 기술은 서로 보완적입니다. 쿠버네티스가 애플리케이션의 배포와 스케일링을 처리하고, Istio는 서비스 간 네트워크를 처리합니다.

정리

Istio는 다음과 같은 이유로 강력한 도구입니다:

  1. 서비스 간 네트워킹을 간단히 관리.
  2. 보안, 트래픽 제어, 모니터링 등을 쉽게 설정.
  3. 대규모 마이크로서비스 아키텍처에서 필수적인 도구.
728x90