Introduction
๋ํ์ Service Mesh ์ ํ์ธ Istio์ ๋ํ overview๋ก Kubernetes๋ฅผ ๋ฐฐ๊ฒฝ์ผ๋ก ์ค๋ช ํ๋ค.
Istio overview: Architecture, Traffic Management, Istio overview: Observability ๋ฐ Istio overview: Security ์ ์ด์ด, ๋ง์ง๋ง์ผ๋ก Istio์ ํ์ฅ์ฑ๊ณผ ํ Service Mesh ์ ํ์ ๋ํด ๋ ผํ๋ค.
์ฐธ์กฐํ ๋ฌธ์๋ ๊ธ ๋ด๋ถ ๋ฐ References ์ ๋ฌ์๋ค.
Summary
- Istio/Envoy์๋ ๋ค์์ filter์ ์ฐ๊ฒฐ๋ก ์ด๋ฃจ์ด์ง Filter chain์ด ์์ด, ๊ฐ filter๋ฅผ ์ฌ์ฉํ์ฌ request / response์ ๋ํ ๋ค์ํ ๋ถ๊ฐ์ action์ ์ถ๊ฐํ ์ ์๋ค.
- Envoy์๋ ๋ค์์ configurable Built-In filters๊ฐ ์์ด ๋ณ๋ ํ๋ก๊ทธ๋๋ฐ ์์ด๋ ๋ค์ํ ์๊ตฌ์ ๋์์ด ๊ฐ๋ฅํ๋ค.
- Lua์ WebAssembly(WASM)์ ์ฌ์ฉํ์ฌ Built-In filters ์ด์ธ์ ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฅ์ ์ฝ์ ๊ฐ๋ฅํ๋ค.
- Istio ์ด์ธ์๋ Cilium, Linkerd, Kuma, Consul ๋ฑ Service Mesh ์ ํ์ ๋ค์ํ๋ค.
Istio์ ํ์ฅ์ฑ์ ๊ดํ์ฌ
Istio์์์ ํ์ฅ์ Istio Proxy์ ๋ํ ํ์ฅ์ ์๋ฏธํ๋๋ฐ, ๋๋ถ๋ถ์ Istio proxy ํ ๊ธฐ๋ฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Envoy์ ํฌ๊ฒ ์์กดํ๋ค. Istio์ ์ญํ ์ ์ฌ์ค ์ Envoy ๊ธฐ๋ฅ์ ๋ํ interfaces ์ ๊ณต์ผ๋ก, EnvoyFilter ๋ฐ WasmPlugin Istio resource๊ฐ ์ด๋ค interface์ ํด๋นํ๋ค.
Envoy filter chain
Istio์ feature ํ์ฅ์ Envoy filter๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค. Envoy์๋ ๋ค์์ filter์ ์ฐ๊ฒฐ๋ก ์ด๋ฃจ์ด์ง Filter chain์ด ์์ด, ๊ฐ filter๋ request / response์ ๋ํ ๋ณํ์ ๋ด๋นํ๋ค.

TLS traffic์ ๋ํ Envoy filter chain์ ๊ตฌ์กฐ. Envoy filter chain ์์ ์์ธํ ๋ ผํ๋ค.
์ ๊ทธ๋ฆผ์ ์๊ธฐ ๋งํฌ - Life of a Request์ ๋ด๊ธด ๋ค์์ ๊ทธ๋ฆผ ์ค filter chain ๋ถ๋ถ์ ์์ถํ ๊ฒ์ผ๋ก, ๊ฐ connection ๋ณ filter chain์ด ์ฃผ์ด์ ธ request/response (์ข ๋ฅ) ๋ณ๋ก ์๋ก ๋ ๋ฆฝ์ ์ธ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
Envoy filter๋ ํฌ๊ฒ Listener Filter, Network Filter๋ก ๋๋๊ณ , Network Filter ์ค ํ๋์ธ HCM(HTTP Connection Manager)๋ filter chain ๋ง์ง๋ง์ ์์นํ์ฌ, ์์ฒด์ ์ผ๋ก ๋ค์์ sub-filter, ์ฆ HTTP filter chain์ ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ HTTP filter chain์ ๋ง์ง๋ง์ Router Filter ๋ก ๋๋๋ค.
Built-In filters
Envoy๊ฐ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ filter๋ ๋ค์ํ ์์ค์์ filter ์ข ๋ฅ ๋ณ๋ก ๋งค์ฐ ๋ง๋ค.
Listener filter ์๋ก๋ (Global rate limiting๊ณผ๋ ํจ๊ป ์ฌ์ฉ๋๋) Local rate limiting์ด๋ UDP Listener filters๊ฐ ์๊ณ , Network filter์๋ Redis๋ Kafka์ ๊ฐ์ 3rd party ์ ํ ํ๋กํ ์ฝ์ ๋ํ ์ง์๋ง์ ๋ณด์ด๋ฉฐ, HTTP filter๋ ๋ณ๋๋ก ๋
ผํ Lua, WASM filter ๋ฅผ ํฌํจํ์ฌ ์ฌ์ค ์ Built-in filter์ด ์ง์ค๋ ๋ถ๋ถ์ด๋ค.
์๋๋ ์ด๋ค(๋งํฌ) ์ค ํนํ ๋์ ๋ HTTP filter ์์ด๋ค.
- ๋ฒ์ฉ: Cache, Echo, Header Mutation, Kill Request, Rate Limit, Stateful session, Tap
- ๋ณด์: Basic Auth, CORS, CSRF, Credential Injector, RBAC
- gRPC: Field Extraction, HTTP/1.1 bridge, gRPC-JSON transcoder
- AWS/GCP: AWS Lambda, AWS Request Signing, DynamoDB, GCP Authentication
Lua filter
Built-In filter๋ง์ผ๋ก๋ ํด๊ฒฐ์ด ์๋๋ ์๊ตฌ์ ๋ํ ๋ ๊ฐ์ง ํด๊ฒฐ์ ์ค ๊ฐํธํ ๋ฐฉ๋ฒ์ผ๋ก, Envoy๋ Lua script๋ฅผ ์ง์ํ์ฌ custom ๋ก์ง ์ถ๊ฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. HTTP filter ์ค ํ๋๋ก LuaJIT ์์์ ๋์ํ๋ค.
Istio EnvoyFilter via mockserver ์์ ์์ ๋ฅผ ํตํด ์ข๋ ์์ธํ ๋ค๋ฃฌ๋ค.
์ฐธ๊ณ ๋ก ๋ฐ๋ก ์๋์์ ๋ ผํ WASM(WebAssembly)์ ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ๊ณผ ๋ณด์์ ์ํด (๋ถํธํจ์ ๊ฐ์ํ๋๋ผ๋) ์ฌ์ฉ๋๋๋ฐ, LuaJIT ์ฑ๋ฅ ์ญ์ ๊ทธ๋ฆฌ ๋ฌด์ํ ์ํฉ์ ์๋ ๋ฏ ํ๋ค(ํ๊ธฐ ๋งํฌ ์ฐธ๊ณ ).
WASM vs Lua: Lua with JIT is very fast even compared to statically typed, compiled languages.
WASM(WebAssembly) filter
custom logic ์ถ๊ฐ๋ฅผ ์ํ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก, Envoy๋ WebAssembly๋ฅผ L4 ๋์์ Network filter์ HTTP filter๋ก ์ง์ํ๋ฉฐ, Istio๋ WasmPlugn ์ ํตํด ์ด๋ค์ ๊ฐ๊ฐ ์ง์ํ๋ค(PluginType ์ฐธ์กฐ).
WebAssembly ํน์ฑ ์ ๋ค์์ ์ธ์ด(C++, Rust, Go, TypeScript)๋ฅผ ์ง์ํ๊ณ binary image๋ OCI(Open Container Initiative) ํธํ ๊ฐ๋ฅํ๊ธฐ์ ์ผ๋ฐ์ ์ธ Container registry์ ๋ฑ๋ก ์ญ์ ๊ฐ๋ฅํ๋ค. WasmPlugin ์ Kubernetes์ฒ๋ผ container registry์์ wasm image๋ฅผ ๋ฐ๋๋ก ๊ณ ์๋์ด ์๋ค.
Proxy-Wasm overview ์์ ์์ธํ ๋ ผํ๋ค.
๊ธฐํ ํ์ฅ ๋ฐฉ๋ฒ
์ด์ธ์๋ Envoy filter๋ Network filter, HTTP filter ๋ชจ๋์ ๋ํด golang filter๋ฅผ ์ง์ํ์ฌ, golang์ผ๋ก custom filter ๊ตฌํ ๊ฐ๋ฅํจ๊ณผ ๋์์, Envoy๊ฐ C++๋ก ์์ฑ๋ open-source์ธ ํน์ฑ ์ C++๋ก๋ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ์์ ๋ฅผ ๋ณด๋ฉด ๊ทธ๋ฆฌ ์ด๋ ค์ ๋ณด์ด์ง๋ ์๋๋ค.
ํ์ง๋ง ๋ฌธ์ ๋ ๋ฐฐํฌ๋ก ๋ง๋ binary๋ฅผ Istio์ ์ ์ฉํ๋ ค๋ฉด, ์๋ ๋งํฌ์ Istio proxy source code์ ๋ฃ์ด Istio proxy ์์ฒด๋ฅผ buildํ๊ณ , ๊ธฐ์กด Istio proxy๋ฅผ ๊ต์ฒดํด์ผ ํ๋ค๋ ์ ์ด๋ค. ๋ฌผ๋ก Istio ๋ฒ์ ์ด ๋ฐ๋ ๋๋ง๋ค ํจ๊ป ๊ด๋ฆฌํด์ผํ๋ค๋ ์ ์ ๋ค์ด๋ค.
Istio ์ด์ธ์ Service Mesh ์ ํ์ ๋ํด
Istio ์ด์ธ์ Cilium, Linkerd, Kuma, Consul ๋ฑ Service Mesh ์ ํ์ ๋ค์ํ๋ค. ์ด์ค Cilium์ ๋์ ์ฑ๋ฅ์ eBPF CNI๋ก ํนํ ์ ๋ช ํ๋ฐ, CNI ๋ด์ Service Mesh ๊ธฐ๋ฅ์ ํฌํจํ sidecar-less Service Mesh์๊ณผ ๋์์ Istio๋ฅผ ํฌํจํ ๋ค์์ Control Plane์ ์ง์ํ๋ค. ๋ํ Linkerd๋ ํ Service Mesh ์ ํ๊ณผ๋ ๋ฌ๋ฆฌ Envoy๊ฐ ์๋ ์์ฒด proxy๋ฅผ ์ฌ์ฉํจ๊ณผ ๋์์ ๋์ ์ฑ๋ฅ์ผ๋ก ์ ๋ช ํ๋ค.
Cilium vs Linkerd vs Istio ์ฑ๋ฅ ๋น๊ต. ํฐ ์ฐจ์ด๋ ์์ผ๋ ์ด์จ๊ฑด Istio๊ฐ ๊ฐ์ฅ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค. ๋ค๋ง Istio Sidecar mode์์์ ๋น๊ต๋ผ Ambient mode ์ฌ์ฉ ์์๋ ์ข๋ ๋์ ๋ฏ ํ๋ค.
์ด์ ๊ฐ์ ์ํฉ์์๋ Istio๋ฅผ ์ค์ฌ์ผ๋ก Service Mesh๋ฅผ ๋ถ์ํ ์ด์ ๋, ๋ ํผ๋ฐ์ค, ์ปค๋ฎค๋ํฐ ๋ฐ Istio Internals: Ambient mode ๋ฅผ ๊ณ ๋ คํ์ ๋, ์ฌ์ ํ Istio๊ฐ Service Mesh์ ์ ๋ ์ฃผ์๋ก ํ์ ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
References
๋ณธ ๊ธ ์์ฑ์ ์ฃผ๋ก ์ฐธ์กฐํ ๋ฌธ์์ด๋ค.
https://www.manning.com/books/istio-in-action



Comments