ref
Istio란
Istio는 마이크로 서비스 아키텍쳐에서 개발되는 다양한 어플리케이션에서 기능이나 구조를 따로 변경하지 않고 그 위에 추가되어 동작할 수 있는 계층화 기술이 적용된 오픈소스 서비스 메쉬입니다.
마이크로서비스 아키텍쳐에서 서비스 간의 통신을 관리하고 보안을 강화하며, 트래픽 제어 및 모니터링을 쉽게 할 수 있도록 도와줍니다.
서비스메쉬
서비스메쉬는 마이크로서비스 아키텍쳐에서 서비스 간의 통신을 관리하고 제어하기 위한 인프라 계층입니다.
서비스 메쉬는 다음과 같은 기능을 제공합니다.
- 트래픽 관리: 서비스 간의 트래픽 라우팅, 로드 밸런싱, 서비스 디스커버리 등을 통해 트래픽 흐름을 효율적으로 관리합니다.
- 보안: 서비스 간의 통신을 암호화하고, 인증 및 인가를 통해 보안을 강화합니다.
- 모니터링 및 로깅: 서비스 간의 트래픽을 모니터링하고 로그를 수집하여 시스템의 상태를 추적하고 문제를 디버깅할 수 있게 합니다.
- 정책 관리: 서비스 간의 통신 정책을 정의하고 적용할 수 있습니다.
서비스 메쉬의 주요 구성 요소는 다음과 같습니다:
- 데이터 플레인(Data Plane): 애플리케이션의 각 서비스에 부착되는 프록시로, 트래픽을 가로채고 제어합니다. 이 프록시는 일반적으로 사이드카 패턴으로 배포됩니다.
- 컨트롤 플레인(Control Plane): 데이터 플레인 프록시를 관리하고 구성하는 역할을 합니다. 서비스 디스커버리, 트래픽 관리, 보안 정책 등을 중앙에서 관리합니다.
Istio는 대표적인 서비스 메쉬 솔루션으로, 엔보이(Envoy)라는 프록시를 데이터 플레인으로 사용하여 이러한 기능을 구현합니다.
Envoy 프록시
Envoy 프록시는 서비스 메쉬의 데이터 플레인 역할을 하는 오픈 소스 엣지 및 서비스 프록시입니다. Lyft에서 개발되었으며, 고성능, 보안성, 유연성을 갖춘 마이크로서비스 아키텍처를 지원합니다. Envoy는 다음과 같은 기능을 제공합니다:
- 로드 밸런싱: 다양한 로드 밸런싱 알고리즘을 지원하여 트래픽을 여러 서비스 인스턴스에 고르게 분배합니다.
- 서비스 디스커버리: 서비스 레지스트리를 통해 동적으로 서비스 위치를 파악하고 라우팅합니다.
- 모니터링 및 로깅: 상세한 통계와 추적 기능을 제공하여 서비스 간의 통신을 모니터링하고 로그를 수집합니다.
- 보안: TLS를 통한 통신 암호화와 인증/인가 기능을 제공하여 보안을 강화합니다.
- 트래픽 관리: HTTP/2 및 gRPC를 포함한 다양한 프로토콜을 지원하며, 트래픽의 흐름을 세밀하게 제어할 수 있습니다.
Envoy는 주로 사이드카 패턴으로 배포됩니다. 각 마이크로서비스 옆에 Envoy 프록시를 배치하여 서비스 간의 통신을 가로채고 제어합니다. 이렇게 하면 애플리케이션 코드를 수정하지 않고도 서비스 메쉬의 기능을 활용할 수 있습니다.
Envoy 프록시의 주요 특징
- 고성능: Envoy는 효율적인 멀티스레드 아키텍처를 사용하여 높은 성능을 제공합니다.
- 확장성: 플러그인 아키텍처를 통해 기능을 쉽게 확장할 수 있습니다.
- 가용성: Envoy는 분산 시스템에서 고가용성을 유지하도록 설계되었습니다.
이러한 특징 덕분에 Envoy는 Istio와 같은 서비스 메쉬 솔루션에서 데이터 플레인으로 널리 사용되고 있습니다.
Envoy 프록시의 사이드카(Side-car) 패턴
Envoy 프록시가 사이드카 패턴으로 붙어있다는 것은, 각 마이크로서비스와 함께 Envoy 프록시가 별도의 프로세스로 배포된다는 것을 의미합니다. 사이드카 패턴은 애플리케이션 컨테이너와 같은 Pod 안에 보조 컨테이너를 추가하여 동작하는 방식입니다. Kubernetes 환경에서 이 패턴이 자주 사용됩니다.
사이드카 패턴의 작동 방식
- Pod 구성: 각 마이크로서비스는 독립된 Pod에 배포됩니다. 이 Pod에는 마이크로서비스 컨테이너와 함께 Envoy 프록시 컨테이너가 포함됩니다.
- 트래픽 가로채기: 마이크로서비스 컨테이너로 들어오고 나가는 모든 네트워크 트래픽은 Envoy 프록시를 거쳐 이동합니다. 이렇게 하면 Envoy가 트래픽을 제어하고 관리할 수 있습니다.
- 기능 추가: Envoy 프록시는 로드 밸런싱, 서비스 디스커버리, 모니터링, 보안 등의 기능을 제공하여 마이크로서비스 간의 통신을 최적화합니다.
예시
Kubernetes 환경에서, Pod은 다음과 같은 구조로 구성될 수 있습니다:
Pod
├── 마이크로서비스 컨테이너
└── Envoy 프록시 컨테이너
장점
- 투명성: 애플리케이션 코드의 변경 없이 네트워크 기능을 추가할 수 있습니다.
- 독립성: 프록시와 애플리케이션이 독립적으로 배포되고 관리될 수 있습니다.
- 확장성: 사이드카 패턴을 통해 쉽게 기능을 확장하고 관리할 수 있습니다.
예시
만약 서비스 A가 서비스 B와 통신해야 한다면, 요청은 다음과 같은 경로를 따릅니다:
- 서비스 A의 애플리케이션 컨테이너 -> 서비스 A의 Envoy 프록시 -> 서비스 B의 Envoy 프록시 -> 서비스 B의 애플리케이션 컨테이너
이렇게 하면 서비스 간의 모든 트래픽이 Envoy 프록시를 거치게 되어, Istio와 같은 서비스 메쉬에서 제공하는 다양한 기능을 활용할 수 있습니다.
Istio Addon 설치
istio_github 에서 samples를 다운받아 아래의 명령어로 설치할 수 있다.
kubectl apply -f samples/addons
Private EKS를 사용한다면, 이미지 path를 ECR로 수정해주면된다.
댓글