Istio

Jdragon·2025년 1월 16일

msa

목록 보기
3/3
post-thumbnail

Istio 란?

기존 분산 애플리케이션에 투명하게 레이어링되는 오픈 소스 서비스 메시입니다. Istio의 강력한 기능은 서비스를 보안, 연결 및 모니터링하는 균일하고 효율적인 방법을 제공합니다. Istio는 서비스 코드를 거의 변경하지 않고도 부하 분산, 서비스 간 인증 및 모니터링을 위한 경로입니다. 다음을 제공합니다.

  • 상호 TLS 암호화, 강력한 ID 기반 인증 및 권한 부여를 통해 클러스터에서 안전한 서비스 간 통신을 제공합니다.
  • HTTP, gRPC, WebSocket 및 TCP 트래픽에 대한 자동 로드 밸런싱
  • 풍부한 라우팅 규칙, 재시도, 장애 조치 및 오류 주입을 통한 트래픽 동작의 세부적인 제어
  • 액세스 제어, 속도 제한 및 할당량을 지원하는 플러그형 정책 계층 및 구성 API
  • 클러스터 유입 및 유출을 포함하여 클러스터 내의 모든 트래픽에 대한 자동 메트릭, 로그 및 추적

Sidecar or ambient ?

Istio 서비스 메시는 논리적으로 데이터 플레인과 제어 플레인으로 분할합니다.

그만큼데이터 플레인마이크로서비스 간의 모든 네트워크 통신을 중재하고 제어하는 프록시 세트입니다. 또한 모든 메시 트래픽에 대한 원격 측정을 수집하고 보고합니다.

Sidecar mode

Istio는 2017년 첫 번째 릴리스부터 사이드카 패턴을 기반으로 구축되었습니다. Sidecar 모드는 잘 이해되고 철저히 검증 되었지만 리소스 비용과 운영 오버헤드가 발생합니다.

  • 배포하는 각 애플리케이션에는 사이드카로 주입된 Envoy 프록시가 있습니다.
  • 모든 프록시는 Layer 4와 Layer 7을 모두 처리할 수 있습니다.

Ambient mode

2022년에 출시된 Ambient 모드는 Sidecar 모드 사용자가 보고한 단점을 해결하기 위해 구축되었습니다. Istio 1.22 기준으로 단일 클러스터 사용 사례에 대해 프로덕션 준비가 완료되었습니다.

  • 모든 트래픽은 Layer 4 전용 노드 프록시를 통해 프록시됩니다.
  • 애플리케이션은 Layer 7 기능을 얻기 위해 Envoy 프록시를 통한 라우팅을 선택할 수 있습니다.

Virtual Service

Istio의 서비스 메쉬에서 트래픽을 관리하고 라우팅 규칙을 정희하는 중요한 개체입니다. 이를 사용하여 요청을 처리하는 방식, 즉 특정 서비스로의 트래픽 흐름을 제어할 수 있습니다. VirtualService 는 일반적으로 DestinationRule과 함께 사용되어, 요청을 서비스의 여러 버전 중 하나로 라우팅 할 수 있게 합니다.

VirtualService 의 주요기능

  1. 트래픽 라우팅 :
    • VirtualService는 HTTP, TCP, gRPC 등 다양한 프로토콜을 기반으로 트래픽을 정의할 수 있습니다.
    • 요청을 특정 서비스로 라우팅하거나, 서비스 내 여러 버전으로 분배할 수 있습니다.
  2. 동적 라우팅 규칙 설정 :
    • 트래픽을 특정 조건에 따라 동적으로 라우팅할 수 있습니다. 예를 들어, 요청의 헤더,, 쿼리 파라미터, URI 경로 등에 따라 트래픽을 분배할 수 있습니다.
  3. 트래픽 분할 :
    • A/B 테스트, Canary 배포, 트래픽의 점진적 배포를 위해 트래픽을 여러 서비스 버전 간에 나누어 보낼 수 있습니다.
    • 예를 들어, 전체 트래픽의 90%는 안정적인 버전으로 보내고, 나머지 10%는 새로 배포된 버전으로 보내는 방식입니다.
  4. 리트라이 및 타임아웃 설정:
    • 요청이 실패할 경우 자동으로 재시도하는 기능을 설정하거나, 타임아웃을 지정할 수 있습니다.
  5. 헤더 리다이렉션 및 리라이트:
    • 요청 헤더를 변경하거나 리다이렉션할 수 있습니다. 예를 들어, HTTP 요청의 User-Agent 헤더를 기반으로 라우팅을 변경하거나, URI를 리라이트하여 새로운 경로로 리디렉션할 수 있습니다.
  6. Fault Injection (장애 주입):
    - 서비스의 내구성을 테스트하기 위해 의도적으로 지연, 오류 등을 주입하여 장애 상황을 시뮬레이션할 수 있습니다.

VirtualService 예시

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-virtualservice
spec:
  hosts:
  - example.com
  http:
  - match:
    - uri:
        prefix: "/v1"
    route:
    - destination:
        host: example-service
        subset: v1
  - match:
    - uri:
        prefix: "/v2"
    route:
    - destination:
        host: example-service
        subset: v2

예시 설명

이 예시에서는 /v1 경로로 들어오는 요청은 example-servicev1 버전으로 라우팅되고, /v2 경로로 들어오는 요청은 v2 버전으로 라우팅됩니다.


VirtualService의 중요한 구성 요소

  • hosts:

    • 트래픽을 처리할 서비스의 도메인 이름을 지정합니다. 예를 들어, example.com과 같은 값을 지정할 수 있습니다.
  • http / tcp / tls:

    • 트래픽의 종류를 정의합니다.
      • http: HTTP 요청을
      • tcp: TCP 트래픽을
      • tls: TLS 암호화된 트래픽을 처리합니다.
  • match:

    • 라우팅 조건을 정의합니다. 예를 들어, 특정 URI 경로, 헤더 값, 메소드 등 다양한 조건을 사용할 수 있습니다.
  • route:

    • 트래픽을 라우팅할 대상과 그에 대한 설정을 정의합니다. 여기서 destination은 라우팅할 서비스와 서비스의 버전을 지정할 수 있습니다.
  • faultInjection:

    • 요청에 오류를 주입하는 설정을 할 수 있습니다. 예를 들어, 트래픽에 지연을 주거나 오류 상태를 반환하도록 설정할 수 있습니다.

VirtualService 활용 예시

  1. Canary 배포:

    • 새로운 버전의 애플리케이션을 배포할 때, 전체 트래픽 중 일부만 새로운 버전으로 보내어 점진적으로 배포할 수 있습니다.
  2. A/B 테스트:

    • 두 개 이상의 버전을 동시에 운용하면서 트래픽을 분할하여 성능이나 기능을 테스트할 수 있습니다.
  3. 트래픽 리다이렉션:

    • 특정 URI나 요청 헤더 값에 따라 트래픽을 다른 서비스나 엔드포인트로 리디렉션할 수 있습니다.

결론

Istio VirtualService는 다양한 라우팅 기능을 제공하여 서비스 간 트래픽을 세밀하게 제어하고, 서비스 메쉬 환경에서의 트래픽 관리 및 최적화를 가능하게 합니다.

profile
고졸개발자취업도전

0개의 댓글