Istio 서비스 메시란 무엇입니까?

hi·2023년 3월 28일
0

쿠버네티스

목록 보기
6/60

Istio가 제공하는 핵심 기능


서비스 디스커버리 (Service Discovery)

애플리케이션의 고가용성을 보장하기 위해선 부하에 따라 스케일링 작업이 필요합니다. 서비스 디스커버리는 새 작업을 수행할 준비가 된 사용 가능한 서비스 노드를 추적합니다. 서비스 노드를 더 이상 사용할 수 없는 경우 서비스 디스커버리는 사용 가능한 노드 목록에서 해당 노드를 제거합니다.

라우팅 (Routing)

쿠버네티스는 Istio를 통해 보다 서비스 간의 트래픽을 보다 유연하고 미세하게 제어할 수 있습니다. 아래 목록은 Istio가 제공하는 기능입니다.

  • 로드 밸런싱 (LoadBalancing)
    Istio는 라운드 로빈, 랜덤, 가중치, 최소 요청과 같은 여러 알고리즘을 기반으로 한 로드 밸런싱을 허용합니다.

  • 상태 확인 (Health Check)
    Istio는 사용 가능한 노드에 포함하기 전 헬스체크를 통해 서비스가 사용 가능한 상태인지 (작동, 실행, 응답) 파악하고 가용성을 보장합니다.

  • 자동 배포 (Automatic Deployment)
    사용된 배포 유형에 따라 Istion는 가중치를 적용해 트래픽을 새 노드로 유도합니다.

탄력성 (Resilience)

Istio는 서비스 타임아웃, 재시도 횟수 등을 기반으로 회로 차단 기능을 제공합니다.

보안 (Security)

Istio는 키 관리를 포함한 TLS 기반 암호화를 지원해 액세스 제어를 합니다.

텔레메트리 (Telemetry)

Istio는 네트워크 호출을 추적할 수 있고, 호출 소스에서 시작된 여러 서비스의 호출을 추적할 수 있으며 메트릭을 수집할 수 있습니다.

Istio 아키텍처

Istio 기능은 애플리케이션 내에서도 구현될 수 있습니다. Istio는 사이드카 패턴을 사용하는 데 이를 통해 각 서비스의 앞에서 인/아웃바운드 요청을 관찰, 확인, 처리합니다. 또한 모든 트래픽은 프록시로 보내지며, 이때 추가적인 규칙이나 정책, 결함 주입, 회로 차단, 카나리 배포 등의 기법을 적용할 수 있습니다.

Istio의 논리적 구성 요소

데이터 플레인

데이터 플레인은 인스턴스에 흐르는 모든 네트워크 패킷을 변환, 전달, 모니터링하는 역할을 수행합니다. 여기엔 Health Check, 라우팅, 서비스 디스커버리, 로드 밸런싱, 보안 및 텔레메트리와 같은 주요 기능이 있습니다. 따라서 데이터 플레인은 서비스 메시 전체에 배포된 사이드카 프록시로 볼 수 있습니다.

컨트롤 플레인

컨트롤 플레인은 새로운 서비스가 발견되면 기존 서비스 목록을 갱신한 다음 프록시에서 새 서비스의 존재를 파악하고 트래픽을 지시하는 데 사용됩니다. 컨트롤 플레인에는 서킷 브레이킹, 로드 밸런싱, 타임아웃, 보안 정보 등의 기본 구성 정보가 저장됩니다.

작업 단순화를 위한 Istio의 4가지 주요 구성 요소

믹서 (Mixer)

믹서는 플랫폼 독립적인 구성 요소로 Istio 시스템에서 인프라 백엔드가 제공하는 텔레메트리 수집, 할당량 적용, 빌링 시스템 등과 같은 기본 지원 기능을 추상화합니다. 또한 권한 부여 정책을 시행합니다.
일반적으로 서비스는 이러한 세부 정보를 얻기 위해 인프라 백엔드와 특정 프로토콜로 긴밀하게 바인딩돼 제약 사항과 종속성을 증가시킵니다. 서비스가 파일 시스템에 로그를 쓰는 상황을 예시로 들자면, 컨테이너는 일시적으므로 서비스 로그가 시간이 지남에 따라 손실될 수 있습니다. 이를 해결하기 위해선 별도의 클라우드 서비스에 로그를 보내야 합니다. 그러나 이러한 경우 종속성이 생기고 따라서 개발자는 비즈니스 로직이 아닌 로깅 처리에 많은 시간을 투자하게 됩니다. Istio는 이 데이터 수집을 책임지고 믹서는 IStio가 인프라 백엔드와 상호작용할 수 있도록 균일한 추상화를 제공합니다.

안프라 백엔드는 벤더에 따라 달라질 수 있습니다. 따라서 믹서는 확장성과 이식성을 위해 어댑터라는 범용 플러그인을 제공합니다.

어댑터

어댑터를 통해 믹서가 인프라 백엔드와 상호작용하고 Istio를 제외한 나머지를 인프라 제공자로부터 추상화된 상태로 유지할 수 있습니다. 이중 흔하게 사용되는 어댑터는 아래와 같습니다.

로깅 백엔드 (Logging)

로깅 백엔드는 서비스의 로그를 처리하고 저장하는 데 도움을 줍니다.

  • 클라우드와치 (Cloud Watch): 믹서는 아마존 클라우드와치 (Amazon CoudWatch) 에 매트릭을 제공하고 아마존 클라우드와치 로그 (Amazon CoudWatchLogs)에 로그를 보낼 수 있습니다.
  • 플루언트d (Fleuntd): 플로언트d 데몬에 로그를 전달합니다.

할당량 백엔드 (Quota)

할당량 백엔드는 다른 엔드포인트 할당량을 추적하는 데 도움을 줍니다.

  • 레디스 쿼터 (Redis Quota): 고정 또는 롤링 윈도우 알고리즘에 관한 유입량 제한 쿼터를 지원합니다. 레디스 쿼터는 Redis를 사용해 데이터를 저장합니다.

인가 백엔드 (Authorization)

인가 백엔드는 Istio 메시 내부 및 외부의 모든 요청을 승인하는 데 도움을 줍니다.

  • 목록: IP 주소 또는 정규식 패턴에 관한 간단한 화이트리스트 및 블랙 리스트 검사를 수행합니다.

텔레메트리 백엔드 (Telemetry)

텔레메트리 백엔드는 파드에서 수집된 텔레메트리 데이터를 처리하는 데 도움을 줍니다.

  • 스탯D: 통계 데이터를 스탯D 모니터링 백엔드로 전달합니다.

속성 (Attribute)

속성은 요청의 특성을 정의하는 가장 작은 데이터입니다. 속성에는 요청 경로, 요청이 전달되는 IP 주소, 응답 코드, 응답 크기, 요청 크기 등이 포함됩니다. 믹서는 이런 속성을 처리하고 구성에 따라 다른 인프라 백엔드에 관한 호출을 합니다.

구성 모델 (Configuration Model)

구성 모델은 어댑터 및 템플릿 기반으로 템플릿은 속성이 어댑터에 공급되는 방법을 정의합니다.

  • 핸들러 (Handler): 핸들러는 어댑터의 구성을 정의합니다. 스탯D의 경우 요청 수는 어댑터에 공급되는 하나의 속성일 수 있습니다.
  • 인스턴스 (Instance): 인스턴스 속성을 어댑터 입력에 매핑하는 방법을 정의합니다. 요청 수의 경우 인스턴스 구성 메트릭은 값을 1로 정의할 수 있습니다.
  • 규칙 (Rule): 규칙은 이러한 흐름들을 실행할 시기를 정의합니디.

파일럿 (Pilot)

파일럿은 서비스 디스커버리를 제공하며 라우팅, 타임아웃, 재시도, 서킷 브레이킷 등을 용이하게 합니다. 파일럿은 플랫폼별 서비스 디스커버리 방식을 Istio와 분리해 쿠버네티스, 노마드 등과 같은 여러 컨테이너 오케스트레이션 환경에서 Istio를 실행할 수 있습니다. Istio는 모든 파드의 사이드카에서 Envoy 프록시를 사용해 트래픽과 구성을 처리합니다. 파일럿은 트래픽 관련 구성을 Envoy 구성으로 변환하고 런타임 시 사이드카로 푸시합니다.

각 서비스의 트래픽 제어를 가능하게 하기 위해 파일럿은 각 서비스 모델에 메시를 유지합니다. 스냅샷 및 서비스 디스커버리에 관한 모든 업데이트는 서비스 모델 측면에서 추적됩니다.

0개의 댓글