MSA 시스템안에는 수십개의 Micro Service가 분리되어있고 동작하는 수백 ~ 수천개의 서비스 인스턴스들을 모니터링하고 로깅하고 관리해야한다.
또한 서비스간의 통신도 매우 복잡해진다.
이와 같은 프로그래밍 오버헤드를 낮추기 위해 나온 아키텍처가 바로 Service Mesh 이다.
Service Mesh
기존 서비스 아키텍처에서의 호출이 직접 호출방식이었다면 service mesh에서의 호출은 서비스에 딸린 proxy끼리 이뤄지게 된다.
이는 서비스의 트래픽을 네트워크단에서 통제할 수 있게 하고 또한 Client 의 요구에 따라 Proxy단에서 라우팅 서비스도 가능하게 할 수 있다.
이런 다양한 기능을 수행하려면 기존의 TCP기반의 proxy로는 한계가 있다.
그래서 Service Mesh에서의 통신은 사이드카로 배치된 경량화되고 L7계층 기반의 proxy를 사용하게 된다.
프록시를 사용해서 트래픽을 통제할 수 있다는 것까지는 좋은데 서비스가 거대해짐에 따라 프록시 수도 증가하게 된다.
이런 문제를 해결하기 위해서 각 프록시에 대한 설정정보를 중앙집중화된 컨트롤러가 통제할 수 있게 설계되었다.
프록시들로 이루어져 트래픽을 설정값에 따라 컨트롤하는 부분을 Data Plane이라고 하고
프록시들에 설정값을 전달하고 관리하는 컨트롤러 역할을 하는 Control Plane이라고 한다.
Service Mesh의 구현제들은 몇가지가 존재하지만 그 중 가장 커뮤니티가 큰 것은 Istio이다.
Istio
Data Plane의 메인 프록시로 Envoy Proxy를 사용하며 이를 컨트롤해주는 Control Plane의 오픈 소스 솔루션이 Istio이다.
Istio로 구성된 Service Mesh를 개략적으로 살펴보면 다음과 같다.
Pilot
- Envoy에 대한 설정 관리
- Service discovery 기능 제공
- 1. 새로운 서비스가 시작되고 pilot의 platform adapter에게 그 사실을 알림
- 2. platform adapter는 서비스 인스턴스를 Abstract model에 등록
- 3. Pilot은 트래픽 규칙과 구성을 Envoy Proxy에 배포
- 이러한 특징으로 Istio는 k8s, consul 등 여러 환경에서 트래픽 관리를 위해 동일한 운영자 인터페이스를 유지할 수 있다.
Mixer
- Service Mesh 전체에서 액세스 제어 및 정책 관리
- 각종 모니터링 지표의 수집
- 플랫폼 독립적, Istio가 다양한 호스트 환경 & 백엔드와 인터페이스할 수 있는 이유
Citadel
- 보안 모듈
- 서비스를 사용하기 위한 인증
- TLS(SSL) 암호화, 인증서 관리
Gallery
- Istio Configuration의 유효성 검사
Istio 기능
- Traffic Management: 쉬운 규칙 구성과 트래픽 라우팅을 통해 서비스 간의 트래픽 흐름과 API 호출을 제어할 수 있다.
- Security: 기본적으로 Envoy를 통해 통신하는 모든 트래픽을 자동으로 TLS 암호화한다.
- Policies: 서비스간 상호작용에 대해 access, role 등의 정책을 설정하여 리소스가 각 서비스에게 공정하게 분배되도록 제어한다.
- Observability: 강력한 모니터링 및 로깅 기능을 제공하여 문제를 빠르고 효율적으로 감지할 수 있게 한다.
Reference
'Network > 로드밸런서' 카테고리의 다른 글
MSA를 위한 L7 Proxy - Envoy proxy (0) | 2024.02.26 |
---|