Oracle Cloud Infrastructure (OCI) 에서 이스티오(ISTIO)를 활용한 서비스 메쉬(Service Mesh)에 대한 기술 정리 및 이를 데모로 구현한 내용을 정리합니다.
글 순서
5. 이스티오 데모 - 이스티오 설치, 엔보이 프록시 주입
6. 이스티오 데모 - 샘플 어플리케이션 (Bookinfo) 배포
8. 이스티오 데모 - 결함 주입(Fault Injection)
REFERENCES
아래 도서 및 사이트를 참조하여 작성한 문서입니다.
- 도메인 주도 설계로 시작하는 마이크로 서비스 개발 (위키북스)
- 쿠버네티스 완벽 가이드 (길벗)
- Istio로 시작하는 서비스 메시 (에이콘)
- Isitio Documentation
이스티오 트래픽 플로우
마이크로서비스 간 통신은 아래와 같이 엔보이를 반드시 통과하게 되어 있으므로 메트릭을 수집하고 트래픽을 제어할 수 있게 됩니다. 위 이스티오 아키텍처 그림 기준으로 살펴보겠습니다.
클라이언트
> 엔보이 (서비스 A가 속한 파드)
> 서비스 A
> 엔보이 (서비스 A가 속한 파드)
> 엔보이 (서비스 B가 속한 파드)
> 서비스 B
> 엔보이 (서비스 B가 속한 파드)
이스티오 라우팅 작동 방식
이스티오에서 서비스 요청에 대한 라우팅은 VirtualService와 DestinationRule 컴포넌트를 통해 이루어집니다.
- 서비스 A는 도메인 이름을 이용해서 서비스 B에 연결을 시도
- 서비스 B의 FQDN은 Virtual Service로 연결되어 요청에 대한 처리 여부를 결정
- Destination Rule은 최종 쿠버네티스 서비스를 결정하기 위한 매핑 수행
- 트래픽이 서비스 B의 해당 버전으로 라우팅
Gateway
Gateway는 외부에서 생성된 모든 요청에 서비스 엑세스를 제공하는 역할을 합니다. 대부분의 경우 게이트웨이는 쿠버네티스 로드밸런서와 함께 구성됩니다. 로드밸런서는 쿠버네티스 클러스터 외부에서 엑세스할 수 있는 퍼블릭 IP주소가 있으며, 로드 밸런서는 요청을 받으면 요청에 일치하는 이스티오 게이트웨이에 이를 위임합니다. 그 다음 게이트웨이는 이스티오 트래픽 라우팅을 사용해 요청을 적절한 서비스로 전송합니다.
VirtualService
VirtualService로 트래픽 라우팅 규칙을 정의합니다. 아래 설정파일에서는 v1과 v2 서브셋 사이에 트래픽을 분배하고 있습니다. 4개의 요청마다 3개를 이전 버전으로, 1개를 새 버전으로 보냅니다.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: webservice-wtdist-vs
spec:
hosts:
- webservice
http:
- route:
- destination:
host: webservice
subset: v2
weight: 25
- destination:
host: webservice
subset: v1
weight: 75
DestinationRule
VirtualService에서 정한 라우팅 규칙에 대해 해당 트래픽을 DestinationRule로 어떻게 보낼 것인지 결정합니다. 아래 설정파일에서는 두개의 서브셋(v1, v2)의 connectionpool을 구성하고, 풀링된 자원의 최대 수와 연결 타임아웃을 설정했습니다.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: webapp-destination
spec:
host: webservice # interpreted as reviews.foo.svc.cluster.local
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
connectTimeout: 30ms
subsets:
- name: v2
labels:
version: v6.2
- name: v1
labels:
version: v5.0
<END>