티스토리 뷰

728x90
반응형

 

[Kubernetes] 3. 서비스메시 Istio, 이해하고 연동하기

 

 

 

 

 

 

 

 

 

이전 글을 읽으려면 아래 게시물을 클릭해주세요!

 

 

[Kubernetes] 1. Ubuntu에 Kubernetes 설치하기
[Kubernetes] 2. Kubernetes 위에 hello kubernetes bootcamp! 프로젝트 배포해보기

 

 

 

 

 

이번 3장에서는 쿠버네티스 서비스메시를 구성해보려고 합니다.

1. 서비스메시(Service mesh)란?

서비스메시(Service mesh)란?
Infrastructure Layer단에서 MSA 서비스 간 통신에 있어 복잡성을 해결하기 위한 방법입니다.
서비스 메시의 대표 기능으로는 크게 애플리케이션 트래픽 관리, 관찰 가능성(observability), 보안이 있습니다.

 

 

Istio는 대표적인 서비스메시 아키텍처이며,

쿠버네티스 각각의 Pod 안에 Istio의 메인 프록시인 envoy proxy container를 띄워

필요한 로직들을 함께 배포하는 방식을 사용합니다.


이러한 패턴을 Sidecar Pattern(사이드카 패턴)이라고 하고,

Pod안에 proxy container를 삽입하는 것을 Sidecar Injection이라고 부릅니다.

서비스간 모든 트래픽을 프록시하며 Service Discovery, Health Check, Routing, Load Balancing, Security, Observability 기능을 수행하게 됩니다. 

 

Istio는 크게 Data Plane과 Control Plane 두가지 영역으로 분리되어 있습니다.
Data Plane은 실제 데이터가 통신되는 영역으로, 마이크로서비스로 들어오고 나가는 모든 트래픽을 통제합니다.
Control Plane은 데이터 트래픽을 관리하는 영역으로, Data Plane을 제어합니다.

 

 

https://istio.io/latest/docs/ops/deployment/architecture/

 

위 Istio 아키텍처에서 Control plane 부분을 보면,

Control Plane에는 istiod라고 Pilot, Citadel, Galley 3가지의 기능이 있습니다.

1) Pilot
data plane에 있는 envoy에 대한 설정을 관리하는 역할을 합니다.
service discovery, retry, circuit breaker, timeout 등의 기능을 제공합니다.
서비스에서 서비스로 호출하는 경로를 컨트롤합니다.

2) Citadel
보안에 관련된 기능을 담당하는 모듈입니다.
서비스를 사용하기 위한 사용자 인증 (Authentication)과 인가(Authorization)을 담당합니다.
TLS 암호화나 사용자 인증에 필요한 인증서(Certification)을 관리합니다.

3) Galley
istio configuration의 유효성을 검사합니다.
istio의 구성 및 설정을 검증하고 배포관리를 수행합니다.

 

 

여기까지 Istio에 대해 학습을 해보았고, 이제 Istio를 설치해봅니다.

아래 istio 사이트에 설치 튜토리얼이 아주 친절하게 작성되어 있습니다.

https://istio.io/latest/docs/setup/getting-started/

 

Getting Started

Try Istio’s features quickly and easily.

istio.io

 

 

2. Istio 설치하기

1. master node에서 Istio를 다운받고 Istioctl 경로를 추가합니다.

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.17.1 && export PATH=$PWD/bin:$PATH

 

2. Istio를 설치합니다.

이 설치 작업은 조금 오래걸릴 수 있습니다.

Processing resources for Egress gateways, Ingress gateways. Waiting for Deployment/istio-sostey/istio-... 부분에서 에러가 난다면 포트가 제대로 열려있지 않은 것이니 ACG를 확인해보셔야 합니다.

 

istioctl install --set profile=demo -y

 

istio-system을 확인해 봤을 때 아래와 같이 egressgateway, ingressgateway, istiod 모두 READY 1/1, Running으로 나오면 정상적으로 설치가 완료된 것입니다.

kubectl get pods -n istio-system

 

 

 

3. Pod 앱을 배포할 때 Envoy 사이드카 프록시를 자동으로 삽입하도록 합니다.

kubectl label namespace default istio-injection=enabled

 

 

 

3. 샘플 애플리케이션 배포

그리고 Istio Getting Started 페이지에 있는 샘플 애플리케이션을 배포해봅시다.

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

 

Envoy 컨테이너가 자동적으로 삽입되었다면 포드 상태를 확인해 보았을 때 READY에 2/2로 뜰 것 입니다.

kubectl get pods

 

Ingressgateway 정보를 확인합니다.

kubectl -n istio-system get service istio-ingressgateway

 

 

 

다음장에서는 Istio의 Telemetry를 알아보겠습니다.
Istio Telemetry: grafana, prometheus, jaeger, kiali

728x90
반응형
댓글