Introduction

๋Œ€ํ‘œ์  Service Mesh ์ œํ’ˆ์ธ Istio์— ๋Œ€ํ•œ overview๋กœ Kubernetes๋ฅผ ๋ฐฐ๊ฒฝ์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค.

์ด ์ค‘ Service Mesh์˜ ๊ฐœ์š” ๋ฐ ์•„ํ‚คํ…์ฒ˜, ๊ทธ๋ฆฌ๊ณ  features ์ค‘ Traffic Management์— ๋Œ€ํ•ด ๋…ผํ•œ๋‹ค(์ดํ›„ Istio overview: Observability, Istio overview: Security, Istio overview: Extensibility, Etc. ๋กœ ์ด์–ด์ง„๋‹ค).

์ฐธ์กฐํ•œ ๋ฌธ์„œ๋Š” ๊ธ€ ๋‚ด๋ถ€ ๋ฐ References ์— ๋‹ฌ์•˜๋‹ค.

Service Mesh๋ž€

์ผ๋‹จ, ์ •์˜๋Š” Wikipedia์—์„œ ๊ฐ€์ ธ์™”๋‹ค.

ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๋˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์ด‰์ง„ํ•˜๋Š” ์ „์šฉ ์ธํ”„๋ผ ๊ณ„์ธต

Service Mesh๋Š” pod ์ˆ˜์ค€์˜ L7 traffic ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ผ์ข…์˜ overlay network์ด๋‹ค. sidecar ๋“ฑ์˜ ๊ธฐ๋ฒ•์œผ๋กœ ๊ฐ pod์— ๋ถ™์€ proxy๊ฐ€ ๋ชจ๋“  pod์— ๋Œ€ํ•œ in/outbound traffic๋ฅผ ์ œ์–ดํ•จ์œผ๋กœ, ๊ฐ์ข… ๋ถ€๊ฐ€์  features๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. API Gateway๋ฅผ cluster ์ „์ฒด์— ๋Œ€ํ•œ proxy๋ผ ํ•œ๋‹ค๋ฉด, Service Mesh๋Š” pod์— ๋Œ€ํ•œ proxy, ๊ทธ๋ฆฌ๊ณ  ์ด๋“ค proxy ๊ฐ„์˜ ์—ฐํ•ฉ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Architecture

์œ— ๊ทธ๋ฆผ์€ ์•ž์„  ๊ตฌ์กฐ ๊ด€์ ์˜ Istio์˜ ์ •์˜๋ฅผ ๋‚˜ํƒ€๋ƒ„๊ณผ ๋™์‹œ์— Istio๊ฐ€ ์—†๋Š” traffic ํ๋ฆ„๊ณผ์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

Istio๊ฐ€ ์—†๋Š” ์ƒ๋‹จ traffic์€ kube-proxy์— ์˜ํ•ด L4์—์„œ routing๋˜๋Š” ๋ฐ˜๋ฉด(L4 load balancing), Istio ๊ธฐ๋ฐ˜์˜ ํ•˜๋‹จ traffic์€ kube-proxy ์—†์ด L7์—์„œ routing๋˜์–ด(L7 load balancing), kube-proxy ์˜ ๊ฐœ์ž… ์—†์ด destination pod๋กœ ์ง์ ‘ ์ „๋‹ฌ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ Istio์˜ default LB algorithm์€ Least Request๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ kube-proxy์˜ random ๋ฐฉ์‹๋ณด๋‹ค ๋‚ฌ๋‹ค๊ณ .

Control plane์ธ istiod ๋Š” ์•ž์„  routing์— ํ•„์š”ํ•œ pod IP๋ฅผ ํฌํ•จํ•œ cluster ์ •๋ณด๋ฅผ ๊ฐ๊ฐ์˜ Istio proxy์— ๋™๊ธฐํ™”ํ•จ๊ณผ ๋™์‹œ์— ๊ฐ์ข… control message๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

์ฐธ๊ณ : sidecar-less Service Mesh
๊ทผ๋ž˜์— sidecar ์—†๋Š” ์•„ํ‚คํ…์ฒ˜์˜ Service Mesh๊ฐ€ ๋ถ€๊ฐ๋˜์—ˆ๋Š”๋ฐ, Istio๋Š” Ambient Mesh๋ผ ํ•˜์—ฌ Daemon Set(ztunnel)๊ณผ Deployment(waypoint)๋กœ envoy proxy์˜ ์—ญํ• ์„ ๋‚˜๋ˆ„๊ณ , Cilium์€ eBPF ๊ธฐ๋ฐ˜์œผ๋กœ DaemonSet์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ sidecar๋งŒ ์—†์„ ๋ฟ ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๋‹ค.

์ด ์•„ํ‚คํ…์ฒ˜์˜ ๋ชฉ์ ์€ sidecar pattern์˜ ๋ฆฌ์†Œ์Šค ๊ณผ๋‹ค ์‚ฌ์šฉ, ์„ฑ๋Šฅ ์ €ํ•˜, ์•„ํ‚คํ…์ฒ˜ ๋ณต์žก๋„ ์ฆ๋Œ€ ๋“ฑ์˜ ๋‹จ์  ๊ฐœ์„ ์œผ๋กœ, 24.05.13 ์— alpha์—์„œ beta๋กœ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด์„œ๋Š” Istio Internals: Ambient mode ์—์„œ ๋‹ค๋ฃจ๋ฉฐ, Istio overview ๊ธ€ ์ „์ฒด์—์„œ ํŠน๋ณ„ํ•œ ์–ธ๊ธ‰์ด ์—†๋Š” ์ด์ƒ ๋ชจ๋‘ sidecar mode๋ฅผ ์ƒ์ •ํ•œ๋‹ค.

ํƒ€ ์•„ํ‚คํ…์ฒ˜ ๋Œ€๋น„ ๋น„๊ต ์šฐ์œ„์ 

Service Mesh์˜ ๋ถ€๊ฐ€ ๊ฐ€์น˜๋Š” ํฌ๊ฒŒ ์„ธ ์˜์—ญ, ์ฆ‰ Traffic Management, Observability, Security๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋“ค์€ ๋ชจ๋‘ cross cutting concerns์— ํ•ด๋‹นํ•œ๋‹ค. ์ด๋“ค์€ ๊ทธ๊ฐ„ app์—์„œ SDK, Monkey patching, bytecode injection, ๋˜๋Š” agent ๋“ฑ์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์•„์˜ˆ ์ด๋ฃจ์ง€ ๋ชปํ•œ ๊ฒƒ๋“ค์ด๋‹ค.

์ด cross cutting concerns ์ œ๊ณต ๊ด€์ ์—์„œ ๋ณผ ๋•Œ, Service Mesh๋Š” ์ด๋“ค ๊ธฐ์กด ๋ฐฉ์•ˆ์— ๋น„ํ•ด ์•„ํ‚คํ…์ฒ˜์—์„œ ํŠนํžˆ ์šฐ์œ„๋ฅผ ์ ํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ ์ด๋ฅผ ๋‹จ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š”๋ฐ, ์ขŒ์ธก์€ Service Mesh๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ๋ฅผ ์šฐ์ธก์€ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

Service Mesh๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ(์šฐ์ธก)์™€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ(์ขŒ์ธก)์˜ ์•„ํ‚คํ…์ฒ˜

Service Mesh๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ(์šฐ์ธก)์™€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ(์ขŒ์ธก)์˜ ์•„ํ‚คํ…์ฒ˜

Service Mesh๋Š” application source code / process์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์—†์Œ๊ณผ ๋™์‹œ์—, ๋‹จ์ผ runtime ํ•˜์— ์ด๋“ค feature ๋ชจ๋‘๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋ฐ˜๋ฉด ๊ธฐ์กด ๋ฐฉ์•ˆ์˜ ๊ฒฝ์šฐ feature ๋ณ„๋กœ ๊ฐ๊ธฐ ๋‹ค๋ฅธ provider์™€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด feature ๊ฐ„์˜ ๊ฐ„์„ญ ๋ฐœ์ƒ ๋ฐ ์ผ๊ด€์„ฑ์„ ์žƒ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง๊ณผ ๋™์‹œ์—, ์ด๋“ค ๋ฐฉ๋ฒ• ์ค‘ ์ƒ๋‹น ์ˆ˜๋Š” application source code / process์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ๊ฐ–๋Š”๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด, Service Mesh๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์•ˆ์— ๋น„ํ•ด ๋‚ฎ์€ ๋ณต์žก๋„(๋†’์€ ์‘์ง‘์„ฑ๊ณผ ๋‚ฎ์€ ๊ฒฐํ•ฉ์„ฑ) ์™€ ์ ์€ ๊ด€๋ฆฌ ์ง€์ ์˜ ์žฅ์ ์„ ๊ฐ–๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค. ์•„ํ‚คํ…์ฒ˜๋Š” ๋ณต์žกํ• ์ˆ˜๋ก ์ทจ์•ฝํ•˜๋‹ค.

์ด์–ด์ง€๋Š” ๋‚ด์šฉ์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ Service Mesh์˜ ๋ถ€๊ฐ€ ๊ฐ€์น˜์ธ Traffic Management, Observability, Security ๊ฐ๊ฐ์— ๋Œ€ํ•ด Istio๊ฐ€ ์ œ๊ณตํ•˜๋Š” features์ด๋‹ค. ์ฐธ๊ณ ๋กœ, Istio์ด ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์€ TCP, TLS, HTTP1.1, HTTP2, HTTPS, gRPC, gRPC-web์˜ ๋ฒ”์šฉ ํ”„๋กœํ† ์ฝœ ์ด์™ธ์—๋„, mongo, mysql, redis์˜ ์œ ๋ช… ์ œํ’ˆ ํ”„๋กœํ† ์ฝœ๋„ ํฌํ•จํ•œ๋‹ค(์ฐธ๊ณ ).

Traffic Management

Traffic ManagementTasks that demonstrate Istio's traffic routing features.
https://istio.io/latest/docs/tasks/traffic-management/

ํ•œ๋งˆ๋””๋กœ ํ‘œํ˜„ํ•˜๋‹ค๋ฉด Kubernetes Service์— ๋Œ€ํ•œ L7 ๊ธฐ๋ฐ˜์˜ ์ œ์–ด๋กœ์„œ, Kubernetes Service๊ฐ€ ์‚ฌ์‹ค ์ƒ L4 Load Balancer์ž„์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด Service Mesh๋Š” L7 Load Balancer ๋ฐ ์ด๋“ค์„ ์ „์ฒด ๋˜๋Š” ๋ถ€๋ถ„์ ์œผ๋กœ ์ œ์–ดํ•˜๋Š” controller๋ผ๊ณ  ๋ณด์•„๋„ ํฌ๊ฒŒ ํ‹€๋ฆฌ์ง€ ์•Š๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” feature๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด Traffic Control, Resilience, DNS Proxying ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

Traffic Control

์•ž์„œ ๋…ผํ•œ L7 ๊ธฐ๋ฐ˜ ์ œ์–ด์˜ ์ง์ ‘์ ์ธ ์‘์šฉ์— ํ•ด๋‹นํ•œ๋‹ค.

  • Traffic routing: ์˜ˆ์ปจ๋ฐ, path๋‚˜ HTTP header ๊ฐ’์— ๋”ฐ๋ผ ํŠน์ • service๋กœ traffic์„ ๋ถ„๋ฅ˜ํ•œ๋‹ค. A/B Testing, Dark release ๋“ฑ ๊ตฌํ˜„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

  • Traffic splitting(shifting): Traffic์„ ๊ฐ€์ค‘์น˜๋ฅผ ๋‘์–ด ์—ฌ๋Ÿฌ service๋กœ ๋ถ„์‚ฐํ•œ๋‹ค. Canary, Blue/Green deployment ๋“ฑ ๊ตฌํ˜„์— ์œ ์šฉํ•œ๋ฐ, Canary๋Š” Kubernetes Service๋งŒ ๊ฐ–๊ณ ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ํŠน๋ณ„ํžˆ ์˜๋ฏธ์žˆ๋‹ค.

  • Traffic mirroring(shadowing): traffic์„ ๋ณต์ œํ•˜์—ฌ ๋‹ค์ˆ˜์˜ service๋กœ ์ „๋‹ฌํ•œ๋‹ค. ์˜ˆ์ปจ๋ฐ, ์ด๋ฅผ ํ†ตํ•ด ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ release๋˜์ง€ ์•Š์€ ์ƒˆ๋กœ์šด service์—์„œ ์‚ฌ์ „์— ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋‹ค. mirroring๋œ request์— ๋Œ€ํ•œ response๋Š” client๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค(fire and forget).

  • Ingress / Egress Gateway: service mesh ์ „์ฒด์— ๋Œ€ํ•œ in/outbound traffic ๊ด€๋ฆฌ(Ingress, Egress)๋กœ ์ด ์ค‘ inbound traffic ๊ด€๋ฆฌ feature๋Š” ์‚ฌ์‹ค ์ƒ API Gateway๋กœ์„œ, ์—ฌ๊ธฐ์—๋Š” Redis ์ง€์›์˜ rate limiting๋„ ํฌํ•จ๋œ๋‹ค.

Resilience

Microservice๋Š” Monolith ๋Œ€๋น„ ๋†’์€ ์•„ํ‚คํ…์ฒ˜ ๋ณต์žก๋„๋กœ ์ธํ•˜์—ฌ ํ•„์—ฐ์ ์œผ๋กœ ์ทจ์•ฝํ•˜๋‹ค. ๋‹จ์ ์œผ๋กœ Monolith์˜ function call ๋Œ€๋น„ Microservice์˜ API call์€ network๋กœ ์ธํ•ด ์‹คํŒจ๋ฅ ์ด ๊ธ‰์†ํžˆ ์˜ฌ๋ผ๊ฐ„๋‹ค. ํšŒ๋ณตํƒ„๋ ฅ์„ฑ์œผ๋กœ ๋ฒˆ์—ญ๋˜๋Š” Resilience๋Š” ์ด์— ๋Œ€ํ•œ ๋Œ€๋น„์ด๋‹ค.

  • Timeout: ์ง€์ •ํ•œ timeout๊นŒ์ง€ service๋กœ๋ถ€ํ„ฐ response๊ฐ€ ์—†์œผ๋ฉด, timeout response๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์–ด๋–ค ์ด์œ ์—์„œ๊ฑด application level์—์„œ ์ ์ ˆํ•œ timeout์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋Œ€์‘๊ณผ ์‘๋‹ต ์‹œ๊ฐ„์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

  • Retry: ์ตœ์ดˆ ํ˜ธ์ถœ์— ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ์ง€์ •ํ•œ ํšŸ์ˆ˜๋งŒํผ ์žฌ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•œ๋‹ค. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” network ์ด์Šˆ, ์ˆœ๊ฐ„์  ๋ถ€ํ•˜ ๋“ฑ์œผ๋กœ ์ธํ•œ ์„œ๋น„์Šค ์˜ค๋ฅ˜๋Š” ์ƒ์‹œ ์žˆ๊ธฐ ๋งˆ๋ จ์ด๊ณ  ํ˜ธ์ถœ ์žฌ์‹œ๋„๋งŒ์œผ๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

  • Circuit breaking: Circuit breaking์€ ๊ณ„๋‹จ์‹ ์‹คํŒจ(Cascading Failure)์˜ ๋Œ€ํ‘œ์  ํ•ด๊ฒฐ์•ˆ์œผ๋กœ, ์ง€์ •ํ•œ ๊ธฐ์ค€์„ ๋„˜์–ด์„œ๋ฉด ๋ฌธ์ œ์˜ service๋กœ traffic์ด ์œ ์ž…๋˜์ง€ ์•Š๋„๋ก ์‚ฌ์ „์— ์ฐจ๋‹จํ•œ๋‹ค.

  • Fault Injection: Service์— ๊ด€๊ณ„์—†์ด ์ง€์ •ํ•œ ์ง€์—ฐ, ๋น„์œจ, ์˜ค๋ฅ˜ ์ฝ”๋“œ๋กœ ์‘๋‹ตํ•œ๋‹ค. client์˜ ์˜ค๋ฅ˜ ๋Œ€์‘ ํ…Œ์ŠคํŠธ์— ์œ ์šฉํ•˜๋‹ค.

  • Locality Load Balancing: ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ์ง€์—ญ์ (Locality) ๋‹จ์œ„, ์ฆ‰ Region(e.g. ๊ตญ๊ฐ€), Zone(e.g. ์ง€์—ญ), Subzone(e.g. ์„œ๋ฒ„ ๋ž™)์— ๋”ฐ๋ผ load balancing์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” ์ง€์—ญ์  ๊ด€์ ์˜ load balancing ๋ฟ ์•„๋‹ˆ๋ผ disaster recovery, ์ฆ‰ failover์˜ ์ฃผ์š” ์ˆ˜๋‹จ์ด ๋œ๋‹ค.

DNS Proxying

Istio ์ž์ฒด์ ์œผ๋กœ Kubernetes Service์™€ ServiceEntry Istio resource๋ฅผ ํ†ตํ•œ ์™ธ๋ถ€ ์„œ๋น„์Šค DNS ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ, application์˜ coreDNS ๋“ฑ์œผ๋กœ์˜ DNS lookup ์—ฐ์‚ฐ์„ โ€œdrastically(๊ณต์‹ ๋ฌธ์„œ ํ‘œํ˜„)โ€ ๊ฐ์†Œ์‹œํ‚จ๋‹ค. ์ด๋Š” FQDN ๋ฏธ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ DNS lookup ํšŸ์ˆ˜ ์ฆ๊ฐ€ ์ด์Šˆ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋ฟ ์•„๋‹ˆ๋ผ, istiod๊ฐ€ DNS entry๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์„œ๋น„์Šค๋กœ์˜ DNS lookup ์—ฐ์‚ฐ์„ ์ œ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Istio DNS proxy: ์ง€์—ฐ ๊ฐœ์„ , DNS ๋ถ€ํ•˜ ๊ฐ์†Œ ์—์„œ ์ƒ์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

Istio overview: Observability ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

References

๋ณธ ๊ธ€ ์ž‘์„ฑ์— ์ฃผ๋กœ ์ฐธ์กฐํ•œ ๋ฌธ์„œ์ด๋‹ค.

DocumentationLearn how to deploy, use, and operate Istio.
https://istio.io/latest/docs/
Istio in ActionSolve service-to-service communication challenges with an Istio-based service mesh! This practical guide helps you reduce the operational complexity of your microservices.
https://www.manning.com/books/istio-in-action

Comments