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๋ 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
ํ๋ง๋๋ก ํํํ๋ค๋ฉด 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
๋ณธ ๊ธ ์์ฑ์ ์ฃผ๋ก ์ฐธ์กฐํ ๋ฌธ์์ด๋ค.
https://www.manning.com/books/istio-in-action


Comments