[Daily morning study] Service Mesh์ Istio ๊ฐ๋
#daily morning study
Service Mesh๊ฐ ์ ํ์ํ๊ฐ
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์๋ ์์ญ~์๋ฐฑ ๊ฐ์ ์๋น์ค๊ฐ ์๋ก HTTP/gRPC๋ก ํต์ ํ๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ณตํต ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋๋ค.
- ํธ๋ํฝ ์ ์ด: ์ฌ์๋, ํ์์์, ์ํท ๋ธ๋ ์ด์ปค
- ๋ณด์: ์๋น์ค ๊ฐ mTLS ์ธ์ฆ/์ํธํ
- ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ: ๋ถ์ฐ ํธ๋ ์ด์ฑ, ๋ฉํธ๋ฆญ, ๋ก๊ทธ
- ๋ก๋๋ฐธ๋ฐ์ฑ: ๊ณ ๊ธ ๋ผ์ฐํ (๊ฐ์ค์น, ํค๋ ๊ธฐ๋ฐ)
์ด๋ฐ ๊ธฐ๋ฅ์ ๊ฐ ์๋น์ค ์ฝ๋์ ์ง์ ๊ตฌํํ๋ฉด ์ธ์ด๋ง๋ค ์ค๋ณต ๊ตฌํ์ด ์๊ธฐ๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค. Service Mesh๋ ์ด ๋ก์ง์ ์ธํ๋ผ ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํด ์๋น์ค ์ฝ๋์ ๋ฌด๊ดํ๊ฒ ์ ์ฉํ๋ค.
Service Mesh์ ๊ตฌ์กฐ
Service Mesh๋ ๋ฐ์ดํฐ ํ๋ ์ธ(Data Plane)๊ณผ ์ปจํธ๋กค ํ๋ ์ธ(Control Plane)์ผ๋ก ๋๋๋ค.
| ๊ตฌ๋ถ | ์ญํ | ์์ |
|---|---|---|
| ๋ฐ์ดํฐ ํ๋ ์ธ | ์ค์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์ฌ์ด๋์นด ํ๋ก์ | Envoy |
| ์ปจํธ๋กค ํ๋ ์ธ | ํ๋ก์์ ์ค์ ๊ณผ ์ ์ฑ ์ ์ค์์์ ๊ด๋ฆฌ | Istiod |
์ฌ์ด๋์นด ํจํด: ๊ฐ Pod์ Envoy ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ์๋์ผ๋ก ์ฃผ์ ํด ๋ชจ๋ ์ธ๋ฐ์ด๋/์์๋ฐ์ด๋ ํธ๋ํฝ์ด ํ๋ก์๋ฅผ ํตํ๋๋ก ํ๋ค.
[Service A] โ [Envoy (sidecar)] โโnetworkโโโถ [Envoy (sidecar)] โ [Service B]
โ โ
โโโโโโโโโโโโโ Istiod โโโโโโโโโโโโโโโโโ
(์ค์ /์ ์ฑ
๋ฐฐํฌ)
Istio ์ฃผ์ ๊ตฌ์ฑ ์์
Istiod (์ปจํธ๋กค ํ๋ ์ธ)
Istio 1.5 ์ดํ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ํตํฉ๋๋ค. ๋ด๋ถ์ ์ผ๋ก ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ํฌํจํ๋ค.
- Pilot: ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ, ํธ๋ํฝ ๊ด๋ฆฌ ๊ท์น์ Envoy์ ๋ฐฐํฌ
- Citadel: ์ธ์ฆ์ ๋ฐ๊ธ ๋ฐ ๊ฐฑ์ (mTLS์ฉ)
- Galley: ์ค์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ๋ถ๋ฐฐ
Envoy ํ๋ก์ (๋ฐ์ดํฐ ํ๋ ์ธ)
C++๋ก ์์ฑ๋ ๊ณ ์ฑ๋ฅ L7 ํ๋ก์. Istio์ ๋ฐ์ดํฐ ํ๋ ์ธ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ ๋ค์์ ์ฒ๋ฆฌํ๋ค.
- ๋์ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ
- HTTP/2, gRPC, WebSocket ์ง์
- ์ํท ๋ธ๋ ์ด์ปค, ์ฌ์๋, ํ์์์
- ์์ฒญ๋ณ ๋ฉํธ๋ฆญ ์์ง
Istio ํต์ฌ ๋ฆฌ์์ค
VirtualService
ํธ๋ํฝ ๋ผ์ฐํ ๊ท์น์ ์ ์ํ๋ค. Kubernetes์ Service ์์์ ๋ ์ ๊ตํ ๋ผ์ฐํ ์ ์ถ๊ฐํ๋ค.
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
์ ์ค์ ์ end-user: jason ํค๋๊ฐ ์๋ ์์ฒญ๋ง v2๋ก ๋ณด๋ด๊ณ ๋๋จธ์ง๋ v1์ผ๋ก ๋ผ์ฐํ
ํ๋ค.
DestinationRule
๋ผ์ฐํ ๋์(subset)์ ์์ฑ์ ์ ์ํ๋ค. ๋ก๋๋ฐธ๋ฐ์ฑ ์ ์ฑ , ์ํท ๋ธ๋ ์ด์ปค, TLS ์ค์ ๋ฑ์ ํฌํจํ๋ค.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
outlierDetection:
consecutive5xxErrors: 5
interval: 30s
baseEjectionTime: 30s
outlierDetection์ด ์ํท ๋ธ๋ ์ด์ปค ์ญํ ์ ํ๋ค. 5xx ์ค๋ฅ๊ฐ 5ํ ์ฐ์ ๋ฐ์ํ๋ฉด ํด๋น ์ธ์คํด์ค๋ฅผ 30์ด ๋์ ๋ก๋๋ฐธ๋ฐ์ฑ์์ ์ ์ธํ๋ค.
PeerAuthentication
์๋น์ค ๊ฐ mTLS ์ ์ฑ ์ ์ค์ ํ๋ค.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: production
spec:
mtls:
mode: STRICT # ๋ค์์คํ์ด์ค ๋ด ๋ชจ๋ ์๋น์ค ๊ฐ mTLS ๊ฐ์
STRICT: mTLS๋ง ํ์ฉPERMISSIVE: ํ๋ฌธ ํธ๋ํฝ๊ณผ mTLS ๋ชจ๋ ํ์ฉ (๋ง์ด๊ทธ๋ ์ด์ ์ ์ฌ์ฉ)DISABLE: mTLS ๋นํ์ฑํ
Istio ํธ๋ํฝ ๊ด๋ฆฌ ๊ธฐ๋ฅ
์นด๋๋ฆฌ ๋ฐฐํฌ
๊ฐ์ค์น ๊ธฐ๋ฐ ๋ผ์ฐํ ์ผ๋ก ์ ์ง์ ๋ฐฐํฌ๋ฅผ ๊ตฌํํ๋ค.
http:
- route:
- destination:
host: frontend
subset: stable
weight: 90
- destination:
host: frontend
subset: canary
weight: 10
ํดํธ ์ธ์ ์ (Fault Injection)
์นด์ค์ค ์์ง๋์ด๋ง ๋ชฉ์ ์ผ๋ก ์๋์ ์ผ๋ก ์ง์ฐ์ด๋ ์ค๋ฅ๋ฅผ ์ฃผ์ ํด ์ฅ์ ๋ด์ฑ์ ํ ์คํธํ๋ค.
http:
- fault:
delay:
percentage:
value: 10.0
fixedDelay: 5s
abort:
percentage:
value: 5.0
httpStatus: 500
route:
- destination:
host: ratings
์ ์ฒด ์์ฒญ์ 10%์ 5์ด ์ง์ฐ์ ์ฃผ๊ณ , 5%๋ 500 ์ค๋ฅ๋ฅผ ๋ฐํํ๋ค.
๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ์ฐ๋
Istio๋ ๋ณ๋ ์ฝ๋ ์์ ์์ด ๋ค์ ๋๊ตฌ์ ์ฐ๋๋๋ค.
| ๋๊ตฌ | ์ญํ |
|---|---|
| Prometheus | Envoy๊ฐ ์๋์ผ๋ก ๋ฉํธ๋ฆญ ๋ ธ์ถ |
| Grafana | Istio ๊ณต์ ๋์๋ณด๋ ์ ๊ณต |
| Jaeger / Zipkin | ๋ถ์ฐ ํธ๋ ์ด์ฑ (B3 ํค๋ ์ ํ) |
| Kiali | ์๋น์ค ๊ฐ ์์กด์ฑ ์๊ฐํ ๊ทธ๋ํ |
ํธ๋ ์ด์ฑ์ ์ ๋๋ก ํ์ฉํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ ํ B3 ํค๋(x-request-id, x-b3-traceid ๋ฑ)๋ฅผ ๋ค์ ์๋น์ค ํธ์ถ ์ ๊ทธ๋๋ก ์ ๋ฌํด์ผ ํ๋ค.
Istio vs Linkerd
Istio ์ธ์ Linkerd๋ ๋ํ์ ์ธ Service Mesh ๊ตฌํ์ฒด๋ค.
| ํญ๋ชฉ | Istio | Linkerd |
|---|---|---|
| ๋ฐ์ดํฐ ํ๋ ์ธ | Envoy (C++) | Linkerd2-proxy (Rust) |
| ๋ฆฌ์์ค ์ฌ์ฉ๋ | ๋น๊ต์ ๋ฌด๊ฑฐ์ | ๊ฒฝ๋ |
| ๊ธฐ๋ฅ ๋ฒ์ | ํ๋ถ (VM, ๋ฉํฐํด๋ฌ์คํฐ ๋ฑ) | Kubernetes์ ์ง์ค |
| ์ค์ ๋ณต์ก๋ | ๋์ | ๋ฎ์ |
| mTLS ๊ธฐ๋ณธ๊ฐ | PERMISSIVE | ์๋ ํ์ฑํ |
๋จ์ํ mTLS์ ๊ธฐ๋ณธ ํธ๋ํฝ ๊ด์ฐฐ์ด ๋ชฉ์ ์ด๋ฉด Linkerd๊ฐ ๊ฐํธํ๊ณ , ๋ณต์กํ ํธ๋ํฝ ์ ์ด๋ VM ํตํฉ์ด ํ์ํ๋ฉด Istio๊ฐ ์ ํฉํ๋ค.
์ ๋ฆฌ
- Service Mesh๋ ์๋น์ค ๊ฐ ํต์ ๋ฌธ์ (๋ณด์, ํธ๋ํฝ, ๊ด์ฐฐ)๋ฅผ ์ฝ๋ ๋ฐ ์ธํ๋ผ ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํ๋ค.
- Istio๋ Envoy ์ฌ์ด๋์นด + Istiod ์ปจํธ๋กค ํ๋ ์ธ ๊ตฌ์กฐ๋ก ๋์ํ๋ค.
- VirtualService๋ก ๋ผ์ฐํ ๊ท์น์, DestinationRule๋ก ๋์ ์์ฑ์ ์ ์ํ๋ค.
- mTLS, ์ํท ๋ธ๋ ์ด์ปค, ํดํธ ์ธ์ ์ , ์นด๋๋ฆฌ ๋ฐฐํฌ๋ฅผ YAML ์ค์ ๋ง์ผ๋ก ๊ตฌํํ ์ ์๋ค.
- ์ด์ ๋ณต์ก๋๊ฐ ๋์์ง๋ฏ๋ก ๋์ ์ ํ์ ์ฟ ๋ฒ๋คํฐ์ค ์๋ จ๋์ ์ด์ ์ฌ๊ฑด์ ๋จผ์ ๊ณ ๋ คํด์ผ ํ๋ค.