์ด ๋ฌธ์์์๋ Gateway API + Istio์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์ค์ ์ ์ฉ์ ํ์ํ ๊ตฌ์ฑ ์์๋ค์ ์ค๋ช ํฉ๋๋ค.
Gateway API
Kubernetes SIG Network์์ ๊ฐ๋ฐํ ์ฐจ์ธ๋ Ingress API๋ก, L4/L7 ๋ผ์ฐํ
์ ์ํ ๊ณต์ Kubernetes ํ๋ก์ ํธ์
๋๋ค.
2023๋
๋ง v1.0 GA ์ถ์ ์ดํ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ์ฌ, ์๋ก์ด ๋คํธ์ํฌ ๊ตฌํ์ ํ์ค์ผ๋ก ์๋ฆฌ์ก์์ต๋๋ค.
Gateway API์ ํต์ฌ ์ค๊ณ ์์น
- ์ญํ ๊ธฐ๋ฐ (Role-oriented):
- ๊ธฐ์กด Ingress๋ ํ๋์ Ingress ๋ฆฌ์์ค์ ๋ชจ๋ ์ค์ ์ด ์์ฌ ์์์ต๋๋ค.
- Gateway API๋ ์ญํ ๋ณ๋ก Gateway, HTTPRoute ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฆฌํ๊ณ , ๊ฐ ์ญํ ๋ณ๋ก ์ฑ ์๊ณผ ๊ด๋ฆฌ ๋ฒ์๋ฅผ ๋ช ํํ ๊ตฌ๋ถํฉ๋๋ค. ์๋ฅผ ๋ค์ด, DevOps Engineer๊ฐ GatewayClass์ Gateway๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์ผ๋ฐ Software Engineer๋ HTTPRoute๋ง ์ ๊ฒฝ ์ธ ์ ์์ต๋๋ค.
- ์ด์์ฑ (Portable):
- Istio, Cilium ๋ฑ ๋ค์ํ ๊ตฌํ์ฒด์์ ๋์ผํ CRD๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํํ๋ ฅ (Expressive): ํค๋ ๋งค์นญ, ํธ๋ํฝ ๊ฐ์ค์น ๋ฑ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ผ๋ก ์ง์ํฉ๋๋ค.
- ํ์ฅ์ฑ (Extensible):
- ์ถ๊ฐ ํน์/๊ณ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํ์ฒด๋ณ๋ก ๋ณ๋ CRD๋ฅผ ์ ์ํ๋ ๋ฑ ๊ตฌํ์ฒด๋ณ๋ก ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด Istio์ VirtualService์ DestinationRule, NGINX Gateway Fabric์ ClientSettingsPolicy ๋ฑ์ด ์์ต๋๋ค.
Gateway API์ ์ฃผ์ ๊ตฌ์ฑ ์์
| ๋ฆฌ์์ค | ๊ด๋ฆฌ ์ฃผ์ฒด | ์ค๋ช |
|---|---|---|
| GatewayClass | Infrastructure Provider | ์ด๋ค Gateway ๊ตฌํ์ฒด(Istio, Cilium ๋ฑ)๋ฅผ ์ฌ์ฉํ ์ง ์ ์ |
| Gateway | DevOps Engineer | ํฌํธ, ๋๋ฉ์ธ, TLS ๋ฑ ์ธํ๋ผ ์์ค ์ค์ |
| HTTPRoute | Software Engineer | ์์ ์ ์ฑ์ผ๋ก ํธ๋ํฝ์ ๋ผ์ฐํ ํ๋ ๊ท์น ์ ์ |
| GRPCRoute | Software Engineer | gRPC ํธ๋ํฝ์ด ํ์ํ ๊ฒฝ์ฐ |
| TCPRoute/UDPRoute | Software Engineer | L4 ํธ๋ํฝ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ (Alpha) |
Ingress์์ ์ฐจ์ด์ (Gateway API๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ )
| ํญ๋ชฉ | Ingress | Gateway API |
|---|---|---|
| ์ญํ ๋ถ๋ฆฌ | ๋จ์ผ ๋ฆฌ์์ค์ ๋ชจ๋ ์ค์ ํผ์ฌ | GatewayClass/Gateway/Route๋ก ์ฑ ์ ๋ถ๋ฆฌ |
| ํ๋กํ ์ฝ | HTTP, HTTPS | HTTP, HTTPS, gRPC, TCP, UDP |
| ๋ผ์ฐํ | ๊ธฐ๋ณธ ๊ฒฝ๋ก ๊ธฐ๋ฐ | ํค๋, ๊ฐ์ค์น, ๋ฉ์๋ ๋ฑ ๊ณ ๊ธ ๋ผ์ฐํ |
| Canary ๋ฐฐํฌ | Annotation ํ์ | weight ํ๋๊ฐ ํ์ค ์คํ์ด๋ฏ๋ก ๋ฐ๋ก ํธ๋ํฝ ๋ถ๋ฐฐ ๊ฐ๋ฅ |
| ์ด์์ฑ | Annotation์ด ๊ตฌํ์ฒด๋ง๋ค ๋ค๋ฆ | ํต์ฌ ๊ธฐ๋ฅ์ ํ์ค CRD, ๊ณ ๊ธ ๊ธฐ๋ฅ๋ง ์ถ๊ฐ CRD ์ ์๋ก ํ์ฅ |
| Cross-NS Route Attachment | ๋ฏธ์ง์ | ๋ค๋ฅธ NS์ Gateway์ Route ์ฐ๊ฒฐ ๊ฐ๋ฅ1 |
| Cross-NS Backend Reference | ๋ฏธ์ง์ | ๋ค๋ฅธ NS์ Service๋ฅผ backendRef๋ก ์ฐธ์กฐ ๊ฐ๋ฅ2 |
Ingress ๊ฐ๋ฐ์ Gateway API๋ก ์ ํ๋์์ผ๋ฉฐ, ๋น๋ถ๊ฐ ๊ณต์กดํ์ง๋ง ์ ์ฐจ Deprecated ๋ ์์ ์
๋๋ค.3
์ ๊ท ํ๋ก์ ํธ๋ ์ฒ์๋ถํฐ Gateway API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
Istio
Service Mesh๋?
๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ์๋น์ค ๊ฐ ํต์ ์ ํ์ํ ๊ณตํต ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์ธํ๋ผ ๋ ์ด์ด์์ ์ฒ๋ฆฌํด์ฃผ๋ ๊ธฐ์ ์ ๋๋ค.
Service Mesh๊ฐ ์๋ค๋ฉด ๋ค์์ ์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค:
| ๋ฌธ์ | ์ง์ ๊ตฌํ ์ |
|---|---|
| ์๋น์ค ๊ฐ ์ํธํ | ๊ฐ ์ฑ์ TLS ์ค์ , ์ธ์ฆ์ ๊ด๋ฆฌ ์ฝ๋ ์ถ๊ฐ |
| ์ฌ์๋/ํ์์์/์ํท๋ธ๋ ์ด์ปค | ๊ฐ ์ฑ์ Resilience ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ |
| ํธ๋ํฝ ๊ด์ธก | ๊ฐ ์ฑ์ ๋ฉํธ๋ฆญ/ํธ๋ ์ด์ฑ SDK ์ฝ์ |
| ์ ๊ทผ ์ ์ด | ๊ฐ ์ฑ์ ์ธ์ฆ/์ธ๊ฐ ๋ก์ง ๊ตฌํ |
์ด ๊ณผ์ ์์ ์ค๋ณต ์ฝ๋, ์ธ์ด๋ณ๋ก ๋ค๋ฅธ ๊ตฌํ, ์ผ๊ด์ฑ ์๋ ์ ์ฑ ์ ์ฉ ๋ฑ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. Service Mesh๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ชจ๋ ๊ฒ์ ์ฑ ์ธ๋ถ์์ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Istio๋?
Google, IBM, Lyft๊ฐ 2016๋ ์์ํ ์คํ์์ค Service Mesh๋ก, 2023๋ CNCF Graduated ํ๋ก์ ํธ๊ฐ ๋์์ต๋๋ค. ํต์ฌ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํธ๋ํฝ ๊ด๋ฆฌ: ์ฌ์๋, ํ์์์, ์ํท๋ธ๋ ์ด์ปค, ํธ๋ํฝ ๋ถํ ๋ฑ
- ๋ณด์: mTLS ์ํธํ, ์ธ์ฆ/์ธ๊ฐ, ์ ์ฑ ์ผ๊ด์ฑ ์๋ ์ ์ฉ
- ๊ด์ธก์ฑ: Grafana, Prometheus ๋ฑ๊ณผ ์ฐ๋๋๋ ๋ฉํธ๋ฆญ/ํธ๋ ์ด์ฑ/๋ก๊น
๋ค๋ฅธ Service Mesh์์ ๋น๊ต
| ํญ๋ชฉ | Istio | Linkerd | Cilium Service Mesh |
|---|---|---|---|
| ํ๋ก์ | Envoy (L7 ํ์คํ) | linkerd2-proxy (๊ฒฝ๋) | eBPF (์ปค๋ ๋ ๋ฒจ) |
| ๊ธฐ๋ฅ ๋ฒ์ | ๊ฐ์ฅ ํ๋ถ | ์ฌํํจ ์ฐ์ | ๋คํธ์ํฌ ์ฑ๋ฅ ์ฐ์ |
| ๋ณต์ก๋ | ๋์ | ๋ฎ์ | ์ค๊ฐ |
| Ambient Mode | ์ง์ | ๋ฏธ์ง์ | ๊ธฐ๋ณธ์ด Sidecarless |
Istio๋ฅผ ์ ํํ๋ ์ด์ :
- ๊ฐ์ฅ ์ฑ์ํ๊ณ ๊ธฐ๋ฅ์ด ํ๋ถํจ (CNCF Graduated)
- ๋ฉํฐํด๋ฌ์คํฐ, VM ์ํฌ๋ก๋ ๋ฑ ๋ค์ํ ํ๊ฒฝ ์ง์
- Ambient Mode๋ก Sidecar ๋ฐฉ์์ ๋จ์ ํด๊ฒฐ
Ambient Mode๋?
๊ธฐ์กด Sidecar ๋ฐฉ์์ ๋จ์ ์ ํด๊ฒฐํ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์ธ ์ํคํ ์ฒ์ ๋๋ค. 1.24 ๋ฒ์ ์์ Stable์ด ๋์์ต๋๋ค. Pod๋ง๋ค Envoy sidecar๋ฅผ ์ฃผ์ ํ๋ ๋์ , ๋ ธ๋ ๋ ๋ฒจ L4 ํ๋ก์(ztunnel)์ ์ ํ์ L7 ํ๋ก์(Waypoint)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฅ์ :
- ๋ฎ์ ๋ฆฌ์์ค ์๋น: ๋ ธ๋๋น ํ๋์ ztunnel๋ก CPU/๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ
- ๊ฐ์ํ๋ ์ด์: Pod์ ๋ ๋ฆฝ๋ ํ๋ก์๋ก ์ด์๋๋ฉฐ, ์ญํ ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์์ ํ ๋ถ๋ฆฌ
- ์ ์ง์ ๋์ ๊ฐ๋ฅ: L4, L7 ํ๋ก์๋ฅผ ์ ํ์ ์ผ๋ก ์ถ๊ฐํ์ฌ ์ ์ง์ ์ผ๋ก ๋์ ๊ฐ๋ฅ
Istio ์ํคํ ์ฒ
Istio๋ ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ธ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ์ ์ ์ฑ
๊ณผ ์ค์ ์ ๊ด๋ฆฌํ๊ณ ๋ฐ์ดํฐ ํ๋ ์ธ์ผ๋ก ์ ๋ฌํ๋ฉฐ, istiod๊ฐ ๊ทธ ์ญํ ์ ์ํํฉ๋๋ค.
๋ฐ์ดํฐ ํ๋ ์ธ์ ztunnel(L4)๊ณผ waypoint(L7)๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ค์ ๋ก ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
flowchart TB subgraph ControlPlane["์ปจํธ๋กค ํ๋ ์ธ"] istiod["istiod<br/>(์ค์ ๋ฐฐํฌ, ์ธ์ฆ์ ๊ด๋ฆฌ, ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ)"] end subgraph DataPlane["๋ฐ์ดํฐ ํ๋ ์ธ (Ambient Mode)"] ztunnel["ztunnel<br/>(L4: mTLS, ์ธ์ฆ/์ธ๊ฐ)"] waypoint["Waypoint Proxy<br/>(L7: HTTP ์ ์ฑ , ํ ๋ ๋ฉํธ๋ฆฌ)"] end subgraph App["์ ํ๋ฆฌ์ผ์ด์ "] pod1["Pod A"] pod2["Pod B"] end istiod -->|์ค์ /์ธ์ฆ์ ์ ๋ฌ| ztunnel istiod -->|์ค์ /์ธ์ฆ์ ์ ๋ฌ| waypoint pod1 <-->|ํธ๋ํฝ| ztunnel pod2 <-->|ํธ๋ํฝ| ztunnel ztunnel <-->|L7 ํ์์| waypoint
์ฃผ์ CRD
| CRD | ์ฉ๋ |
|---|---|
| VirtualService | ํธ๋ํฝ ๋ผ์ฐํ ๊ท์น (์ฌ์๋, ํ์์์, ํธ๋ํฝ ๋ถํ ๋ฑ) |
| DestinationRule | ๋ฐฑ์๋ ์ ์ฑ (๋ก๋๋ฐธ๋ฐ์ฑ, ์ํท๋ธ๋ ์ด์ปค, ์ฐ๊ฒฐ ํ ์ค์ ๋ฑ) |
| AuthorizationPolicy | ์ ๊ทผ ์ ์ด (์ด๋ค ์๋น์ค๊ฐ ์ด๋ค ์๋น์ค๋ฅผ ํธ์ถํ ์ ์๋์ง) |
| PeerAuthentication | mTLS ๋ชจ๋ ์ค์ (STRICT, PERMISSIVE ๋ฑ) |
| RequestAuthentication | JWT ๊ฒ์ฆ ๋ฑ ์์ฒญ ์์ค ์ธ์ฆ |
| EnvoyFilter | Envoy ์ ์์ค ์ค์ (์ตํ์ ์๋จ, ์๋ ์ฐธ๊ณ ) |
VirtualService vs HTTPRoute
| ํญ๋ชฉ | HTTPRoute (Gateway API) | VirtualService (Istio) |
|---|---|---|
| ํ์คํ | Kubernetes ํ์ค | Istio ์ ์ฉ |
| ์ ์ฉ ๋ฒ์ | North-South (์ธ๋ถโ๋ด๋ถ) | North-South + East-West (๋ด๋ถโ๋ด๋ถ) |
| ์ด์์ฑ | ๋ค๋ฅธ ๊ตฌํ์ฒด๋ก ์ด๋ ๊ฐ๋ฅ | Istio์ ์ข ์ |
| ๊ธฐ๋ฅ | ๋ผ์ฐํ , ํธ๋ํฝ ๋ถํ , ํค๋ ๋งค์นญ | HTTPRoute์ ๊ธฐ๋ฅ + ์ฌ์๋, ํ์์์, fault injection ๋ฑ |
์์ฝํ๋ฉด ๊ธฐ๋ฅ์ ์ผ๋ก๋ VirtualService๊ฐ ๋ ํ๋ถํ์ง๋ง, ํ์คํ๋ ๋ค๋ฅธ Gateway API ๊ตฌํ์ฒด๋ก ์ด์ ๊ณํ์ด ์๋ค๋ฉด HTTPRoute๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์ ์ ์์ต๋๋ค.
EnvoyFilter ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
EnvoyFilter๋ ํ์ค CRD๋ก ํํํ ์ ์๋ Envoy ์ ์์ค ์ค์ ์ด ํ์ํ ๋ ์ ํ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋ถ๊ฐํผํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ:
| ์ํฉ | ์์ |
|---|---|
| ์์ฒญ ๋ณธ๋ฌธ ํฌ๊ธฐ ์ ํ | max_request_bytes ์ค์ |
| ์ปค์คํ ํค๋ ์กฐ์ | ํน์ ์กฐ๊ฑด์์๋ง ํค๋ ์ถ๊ฐ/์ญ์ |
| Rate Limiting | Envoy์ local/global rate limit ํํฐ |
| Lua/WASM ํ๋ฌ๊ทธ์ธ | ๋ณต์กํ ์์ฒญ/์๋ต ๋ณํ ๋ก์ง |
์ฃผ์์ฌํญ:
- ๋ฒ์ ํธํ์ฑ: Istio/Envoy ์ ๊ทธ๋ ์ด๋ ์ EnvoyFilter๊ฐ ๊นจ์ง ์ ์์. ์ ๊ทธ๋ ์ด๋ ํ ๋ฐ๋์ ํ ์คํธ ํ์
- Ambient Mode ์ ์ฝ: ztunnel์ Envoy๊ฐ ์๋๋ฏ๋ก EnvoyFilter ์ ์ฉ ๋ถ๊ฐ. Waypoint Proxy์๋ง ์ ์ฉ ๊ฐ๋ฅ
- ๋๋ฒ๊น ์ด๋ ค์: ํ์ค CRD์ EnvoyFilter๊ฐ ์์ด๋ฉด ๋ฌธ์ ์ถ์ ์ด ๋ณต์กํด์ง
Helm Charts
| Chart | ์ค๋ช |
|---|---|
istio-base | Istio CRD ๋ฐ ํด๋ฌ์คํฐ ๋ ๋ฒจ ๋ฆฌ์์ค ์ค์น |
istiod | ์ปจํธ๋กค ํ๋ ์ธ (istiod) ์ค์น |
istio-cni | CNI ํ๋ฌ๊ทธ์ธ - Pod ๋คํธ์ํฌ ์ค์ ๋ด๋น |
ztunnel | Ambient Mode L4 ํ๋ก์ DaemonSet |
istio-gateway | Gateway ๊ตฌํ์ฒด (์ธ๋ถ ํธ๋ํฝ ์ฒ๋ฆฌ ์ ํ์) |
Reference
- Gateway API
- Gateway API vs Ingress: The Future of Kubernetes Networking
- Istio official website
- Istio Ambient Mode