브렌쏭의 Veritas_Garage

[Istio] Make 'Kubernetes's Network' Great Again! 본문

[Project_하다]/[Project_공부]

[Istio] Make 'Kubernetes's Network' Great Again!

브렌쏭 2024. 8. 10. 10:45

Istio란?

쿠버네티스 내부 네트워크 연결을 보다 고급사용자용으로 끌어올리는 역할을 한다

 

Istio는 쿠버네티스(Kubernetes)와 같은 마이크로서비스 아키텍처에서 네트워크 연결을 효율적으로 관리하기 위해 설계된 오픈 소스 서비스 메쉬(Service Mesh) 솔루션입니다. Istio를 도입하면 복잡한 분산 네트워크 환경에서 각 애플리케이션 간의 트래픽을 제어하고 보안을 강화하며, 로깅 및 모니터링을 쉽게 구현할 수 있습니다. 이를 통해 쿠버네티스의 복잡성을 줄이고, 애플리케이션 개발 및 운영을 간소화할 수 있습니다.

Istio의 아키텍처

Istio는 Data PlaneControl Plane이라는 두 가지 주요 구성 요소로 나뉩니다.

1. Data Plane

모든 하위 서비스에 보조바퀴나 조수석처럼 끼워넣는 형태다

  • 실제로 애플리케이션 트래픽을 처리하는 부분으로, 각 서비스에 Sidecar 형태로 배포된 Envoy Proxy가 이 역할을 담당합니다.
  • Envoy: 경량화된 L7 전용 프록시로, HTTP, TCP 등의 프로토콜을 지원하며, Circuit Breaker, Retry, Timeout 등의 기능을 제공합니다.

2. Control Plane

  • Data Plane을 제어하는 구성 요소들로 구성됩니다. 이는 Istio의 중요한 기능을 담당하는 여러 컴포넌트를 포함합니다.
    • Pilot: Envoy에 대한 설정을 관리하고, 서비스 디스커버리, 트래픽 관리, 헬스 체크, 로드 밸런싱 등을 담당합니다.
    • Mixer: 서비스 간의 접근 제어 및 정책을 관리하며, 서비스 메쉬 전반에 걸쳐 모니터링 지표를 수집합니다. (최신 버전에서는 Pilot에 통합)
    • Citadel: 보안 기능을 담당하며, 인증서 관리와 통신 암호화(TLS)를 지원합니다.
    • Galley: Istio 구성 요소의 설정을 검증하고 관리합니다.

Istio의 주요 기능

1. 트래픽 관리

  • Istio는 버전 간 트래픽 분할, 컨텐츠 기반의 트래픽 라우팅 등의 기능을 제공하여, 서비스의 배포 및 운영 중에도 네트워크 트래픽을 정교하게 제어할 수 있습니다.
  • 예를 들어, 새로운 버전의 서비스로 일부 트래픽만을 전송하여 안정성을 테스트하거나, 사용자 에이전트에 따라 트래픽을 다르게 라우팅할 수 있습니다.

2. 서비스 간 안정성 제공

  • Istio는 헬스 체크, 서비스 디스커버리, 재시도(Retry), 타임아웃(Timeout), Circuit Breaker 등의 기능을 통해 서비스 호출의 안정성을 높입니다.
  • 장애가 발생한 서비스를 자동으로 제거하거나, 문제 발생 시 재시도 정책을 적용하여 전체 시스템의 안정성을 유지합니다.

3. 보안

  • Istio는 서비스 간 통신을 기본적으로 TLS로 암호화하며, 양방향 TLS(Mutual TLS)를 통해 서비스 간 상호 인증을 수행합니다.
  • JWT 토큰을 활용한 서비스와 사용자 간 인증 기능도 지원하며, 역할 기반 접근 제어(RBAC)를 통해 접근 권한을 세밀하게 관리할 수 있습니다.

4. 모니터링

  • Istio는 네트워크 트래픽을 모니터링하고, 각 서비스 간의 호출 관계, 응답 시간, 처리량 등의 다양한 지표를 수집하여 모니터링할 수 있습니다.
  • 이러한 지표는 Logging Backend에 저장되며, 운영 인프라에 맞춘 플러그인 아답터 구조로 쉽게 변환이 가능합니다.

Istio와 Kubernetes의 관계

Istio와 Kubernetes(K8s)는 마이크로서비스 아키텍처를 지원하기 위한 두 가지 핵심 기술로, 서로 상호 보완적인 역할을 합니다. Kubernetes는 컨테이너화된 애플리케이션을 관리하기 위한 오케스트레이션 플랫폼이며, Istio는 이러한 애플리케이션 간의 네트워크 트래픽을 제어하고 보안을 강화하는 서비스 메쉬입니다.

Kubernetes와 Istio의 기본 역할

  • Kubernetes (K8s):
    • Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 운영을 자동화하는 오케스트레이션 플랫폼입니다.
    • 주요 기능에는 컨테이너의 스케줄링, 서비스 디스커버리, 로드 밸런싱, 자동 복구(self-healing), 자동 확장 등이 포함됩니다.
    • Kubernetes는 다양한 클러스터 리소스를 관리하고, 이를 통해 애플리케이션이 안정적으로 실행되도록 보장합니다.
  • Istio:
    • Istio는 Kubernetes 환경에서 서비스 간의 통신을 관리하고, 네트워크 트래픽의 세부 제어, 보안, 관찰성(observability) 기능을 제공합니다.
    • Istio는 서비스 간 통신을 위한 프록시 레이어를 추가하여, 트래픽 관리, 보안, 로깅, 모니터링을 수행합니다.
    • Istio는 Kubernetes 클러스터 내에서 실행되는 각 서비스의 네트워크 연결을 관리하고, 복잡한 마이크로서비스 환경에서 운영을 간소화합니다.

Kubernetes와 Istio의 상호 관계

1. 서비스 디스커버리

  • Kubernetes는 자체적으로 서비스 디스커버리를 지원하여 클러스터 내에서 실행 중인 서비스들을 발견하고 연결할 수 있습니다.
  • Istio는 이 기능을 확장하여, 더 세밀한 트래픽 제어와 라우팅 정책을 적용할 수 있도록 합니다.
  • 예를 들어, Istio는 서비스의 특정 버전으로만 트래픽을 라우팅하거나, 특정 조건에 따라 트래픽을 분기하는 기능을 제공합니다.

2. 네트워크 관리

  • Kubernetes는 클러스터 내의 네트워크 연결을 기본적인 수준에서 관리하지만, Istio는 네트워크 트래픽을 더 세밀하게 제어할 수 있습니다.
  • Istio는 트래픽의 리트라이, 타임아웃, Circuit Breaker와 같은 고급 네트워크 제어 기능을 제공합니다.
  • Istio는 각 서비스에 Envoy Sidecar Proxy를 주입하여, 모든 네트워크 트래픽이 이 프록시를 통과하도록 하고, 이를 통해 다양한 네트워크 정책을 실행할 수 있습니다.

3. 보안

  • Kubernetes는 네임스페이스와 RBAC(Role-Based Access Control) 등을 통해 기본적인 보안 관리를 제공합니다. 그러나 Istio는 서비스 간 통신에 대한 추가적인 보안 계층을 제공합니다.
  • Istio는 Mutual TLS(mTLS)를 통해 서비스 간 통신을 암호화하고, 서비스 간의 상호 인증을 수행합니다. 또한 JWT 토큰을 활용한 사용자 인증 및 서비스 간 권한 제어 기능도 제공합니다.

4. 모니터링 및 로깅

  • Kubernetes는 기본적으로 컨테이너와 포드의 상태 모니터링을 수행하지만, Istio는 서비스 간의 호출 관계와 네트워크 트래픽을 더 상세하게 모니터링할 수 있는 기능을 제공합니다.
  • Istio는 서비스 메쉬 내의 모든 트래픽을 관찰하고, 이 정보를 기반으로 분석, 로깅, 모니터링을 수행합니다. 이를 통해 운영자는 서비스 간의 의존성, 트래픽 흐름, 성능 이슈 등을 명확히 파악할 수 있습니다.

5. 배포 전략 지원

  • Kubernetes는 롤링 업데이트나 블루-그린 배포와 같은 배포 전략을 지원합니다. Istio는 이와 함께 카나리 배포A/B 테스팅과 같은 더 정교한 트래픽 분할 및 배포 전략을 지원합니다.
  • Istio는 트래픽의 일부만을 새 버전의 서비스로 라우팅하는 등의 기능을 통해 새로운 버전의 안정성을 검증하는 데 도움이 됩니다.

Istio와 Kubernetes의 통합

Istio는 Kubernetes 환경에서 원활하게 동작하도록 설계되었습니다. Istio는 Kubernetes 클러스터 내에 설치되며, 클러스터의 모든 네임스페이스에 걸쳐 작동할 수 있습니다. Istio는 Kubernetes의 기본 네트워킹 기능을 확장하여 더 강력한 서비스 메쉬 기능을 제공하며, Kubernetes의 네이티브 기능과 잘 통합됩니다.

  • Istio 설치: Istio는 Helm 차트나 Istioctl과 같은 도구를 통해 Kubernetes 클러스터에 쉽게 설치할 수 있습니다.
  • 자동 사이드카 주입: Istio는 Kubernetes의 웹훅(Webhook)을 사용하여 각 서비스의 Pod에 Envoy 사이드카 프록시를 자동으로 주입할 수 있습니다. 이를 통해 애플리케이션 코드를 수정하지 않고도 Istio의 기능을 활용할 수 있습니다.
  • Kubernetes와의 연동: Istio는 Kubernetes의 네이티브 리소스(예: Service, Ingress)를 인식하고, 이를 기반으로 트래픽 관리 및 정책을 설정할 수 있습니다.
Comments