Service Mesh
서비스 메쉬(Service Mesh)란 애플리케이션의 서비스 간 통신을 처리하는 소프트웨어 계층이다. 애플리케이션의 여러 부분이 서로 데이터를 공유하는 방식을 제어하여 애플리케이션 수명주기 전반에 걸쳐 데이터의 일관성을 유지하며 통신할 수 있도록 한다.
컨테이너화된 마이크로서비스로 구성되며, 서비스 간 연결, 트래픽을 관리하고 추적 및 보안성을 강화하기 위해 모니터링, 로깅, 추적, 트래픽 제어와 같은 기능을 제공한다.
기능
트래픽 관리
트래픽 라우팅 규칙을 사용하여 서비스 간 트래픽 흐름과 API 호출을 쉽게 제어할 수 있으며, 더 나은 배포 전략을 가능하게 한다. 타임아웃, 재시도와 같은 서비스 수준 속성의 구성을 단순화할 수 있고, Canary 배포나 퍼센트 기반 트래픽 분할 등으로 단계정 롤아웃과 같은 중요 작업을 쉽게 설정할 수 있다.
보안
마이크로서비스가 요구하는 man-in-the-middle 공격 보호, 인증, 권한 부여 등과 같은 기능을 위한 보안 솔루션이 포함된다. TLS 암호화, 인증, 인가, 감사 도구를 제공하여 서비스를 데이터를 보호할 수 있다.
관찰 가능성
관찰 가능성이랑 상황을 유연하게 탐색하여 예상하지 못했을 문제의 원인을 신속하게 파악하는 것으로, 모니터링과는 다른 개념이다. 로그, 메트릭 및 추적 등과 같이 생성 데이터를 기반으로 시스템의 현재 상태를 측정하는 기능으로 서비스 메시는 통신에 대한 텔레메트리를 생성한다. 텔레메트리는 서비스 동작 관찰 가능성의 기초 자료로 활용되고, 운영자가 자료를 분석함으로써 애플리케이션 문제 해결 및 유지 관리, 최적화할 수 있도록 한다.
동작 방식
서비스 메쉬는 개별 서비스에서 통신을 제어하는 로직을 없애는 대신 인프라 계층으로 추상화한다. 여러 네트워크 프록시를 사용해 서비스 간 통신을 라우팅 하고 추적한다.
프록시는 네트워크와 마이크로서비스 간 중간 게이트웨이 역할을 하는데, 서비스로 들어오거나 나가는 모든 트래픽이 프록시 서버를 통해 라우팅 된다. 프록시는 개별적으로 실행되지만 논리적으로는 각 서비스의 옆에 있기 때문에 Sidecar라고 부르기도 한다.
데이터 플레인
서비스 메쉬의 데이터 처리 구성 요소로, 애플리케이션 간 프록시 네트워크로 구성된다. 서비스가 다른 서비스와 통신할 때 다음과 같은 작업을 수행한다.
1. 사이드카가 요청을 가로챈다.
2. 요청을 별도의 네트워크 연결로 캡슐화한다.
3. 소스 프록시와 목적지 프록시 간에 안전하고 암호화된 채널을 설정한다.
프록시는 서비스 간의 Low-Level 메시징 처리, 요청 재시도 등의 기능을 구현한다.
컨트롤 플레인
서비스 메쉬의 중앙 관리 및 구성 계층 역할을 수행하고, 메시를 작동하는 사람을 위한 인터페이스를 제공한다. 관리자는 컨트롤 플레인을 이용해 서비스 엔드포인트, 라우트 규칙, 부하 분산 정책 등과 같은 구성을 수행할 수 있다.
프록시는 구성 정보를 사용해 들어오는 요청을 처리할 방법을 결정하고, 구성 변경 사항을 수신하고 동작을 동적으로 조정한다.
참고 문서
https://www.samsungsds.com/kr/insights/service_mesh.html
https://aws.amazon.com/ko/what-is/service-mesh/
https://www.tibco.com/ko/reference-center/what-is-a-service-mesh
https://www.redhat.com/ko/topics/microservices/what-is-a-service-mesh