devopsstory blog


12. Service Mesh

Application을 구성하는 Microservice간의 통신을 제어하거나, 추적할 수 있는 별도의 Infrastructure Layer를 가지는 도구들 총칭

L7에서 HTTP URL Path, Header 등을 기반으로 동작하며, 보통은 Proxy를 비즈니스 로직을 수행중인 Microservice 옆에 Sidecar로 붙여서 Network Traffic을 대신 전달(routing)하는 방식으로 구성

12.1. Service Mesh 이점

MSA 환경의 효율적인 DevOps 가능

1) Traffic Control 트래픽 관리

Istio는 회로 차단기, 시간 초과 및 재시도와 같은 서비스 수준 속성의 구성을 단순화하고 A/B 테스트, 카나리아 배포 및 백분율 기반 트래픽 분할을 통한 단계적 출시와 같은 중요한 작업을 쉽게 설정할 수 있음

Traffic Control Component

bcho blog

Gateway

외부로부터 트래픽을 받는 최앞단으로, 트래픽을 받을 호스트명과 포트, 프로토콜을 정의
웹서버에서 virtual host를 정의하는 것과 같음

Virtual Service

들어온 트래픽을 서비스로 Routing 하는 기능
쿠버네티스의 Service가 목적지가 되는 것이고, 실제로 Virtual Service의 기능은 URI 기반으로 라우팅을 하는 Ingress와 유사
클라이언트가 쿠버네티스의 Service를 호출할때 라우팅 규칙에 따라서 적절한 쿠버네티스 Service로 라우팅 해주는 기능

Destination Rule

Virtual Service가 쿠버네티스 Service로 트래픽을 보내도록 라우팅을 했다면, 그 다음 Destination Rule은 그 서비스로 어떻게 트래픽을 보낼것인가를 정의 (하나의 Detination Rule은 하나의 Service에 대해서만 정의)

Virtual Service가 라우팅을 해서 Service로 트래픽을 보내면, 실제로는 그 안에 있는 Pod 들에 라우팅이 되는데, 어느 Pod 들로 트래픽을 보낼지, 그리고, 어떻게 보낼지를 정의

아래 예제는 my-svc.{namespace}.svc.cluster.local 서비스로 보내는 트래픽을 어떻게 보낼지를 정의하였는데, my-svc.{namespace}.svc.cluster.local 를 version이라는 pod 의 label에 따라서 v1,v2,v3 로 그룹핑을 하였다. 이를 subset

2) Observability 관찰

Istio를 통해 모니터링되는 서비스가 상호 작용하는 방식을 철저히 이해

3) Security 보안

강력한 ID, 강력한 정책, 투명한 TLS 암호화, AAA(인증, 권한 부여 및 감사) 도구를 제공하여 서비스와 데이터를 보호



12.2. Istio

k8s에서는 Service Mesh로 Istio를 사용

k8s가 서비스 관점의 관리 도구 Isotio는 어플리케이션(트래픽) 관점의 관리 도구

Istio Architecture

image 출처

Envoy 특징

일종의 Proxy 서비스로 application 트래픽을 인지하고, 트래픽을 programmable하게 관리하는 도구

Istio가 yaml 파일 읽어서 envoy 설정으로 자동 변환

apiVersion: networking.istio.io/v1alpha3
Kind: VirtualService



13. 그밖의 Service mesh

13.1. Linkerd

13.2. Consul