[Daily morning study] Service Mesh์™€ Istio ๊ฐœ๋…

#daily morning study

Image


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๋Š” ๋ณ„๋„ ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๋‹ค์Œ ๋„๊ตฌ์™€ ์—ฐ๋™๋œ๋‹ค.

๋„๊ตฌ์—ญํ• 
PrometheusEnvoy๊ฐ€ ์ž๋™์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ ๋…ธ์ถœ
GrafanaIstio ๊ณต์‹ ๋Œ€์‹œ๋ณด๋“œ ์ œ๊ณต
Jaeger / Zipkin๋ถ„์‚ฐ ํŠธ๋ ˆ์ด์‹ฑ (B3 ํ—ค๋” ์ „ํŒŒ)
Kiali์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ ์‹œ๊ฐํ™” ๊ทธ๋ž˜ํ”„

ํŠธ๋ ˆ์ด์‹ฑ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ˆ˜์‹ ํ•œ B3 ํ—ค๋”(x-request-id, x-b3-traceid ๋“ฑ)๋ฅผ ๋‹ค์Œ ์„œ๋น„์Šค ํ˜ธ์ถœ ์‹œ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.


Istio vs Linkerd

Istio ์™ธ์— Linkerd๋„ ๋Œ€ํ‘œ์ ์ธ Service Mesh ๊ตฌํ˜„์ฒด๋‹ค.

ํ•ญ๋ชฉIstioLinkerd
๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธEnvoy (C++)Linkerd2-proxy (Rust)
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰๋น„๊ต์  ๋ฌด๊ฑฐ์›€๊ฒฝ๋Ÿ‰
๊ธฐ๋Šฅ ๋ฒ”์œ„ํ’๋ถ€ (VM, ๋ฉ€ํ‹ฐํด๋Ÿฌ์Šคํ„ฐ ๋“ฑ)Kubernetes์— ์ง‘์ค‘
์„ค์ • ๋ณต์žก๋„๋†’์Œ๋‚ฎ์Œ
mTLS ๊ธฐ๋ณธ๊ฐ’PERMISSIVE์ž๋™ ํ™œ์„ฑํ™”

๋‹จ์ˆœํ•œ mTLS์™€ ๊ธฐ๋ณธ ํŠธ๋ž˜ํ”ฝ ๊ด€์ฐฐ์ด ๋ชฉ์ ์ด๋ฉด Linkerd๊ฐ€ ๊ฐ„ํŽธํ•˜๊ณ , ๋ณต์žกํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด๋‚˜ VM ํ†ตํ•ฉ์ด ํ•„์š”ํ•˜๋ฉด Istio๊ฐ€ ์ ํ•ฉํ•˜๋‹ค.


์ •๋ฆฌ

  • Service Mesh๋Š” ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๋ฌธ์ œ(๋ณด์•ˆ, ํŠธ๋ž˜ํ”ฝ, ๊ด€์ฐฐ)๋ฅผ ์ฝ”๋“œ ๋ฐ– ์ธํ”„๋ผ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • Istio๋Š” Envoy ์‚ฌ์ด๋“œ์นด + Istiod ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • VirtualService๋กœ ๋ผ์šฐํŒ… ๊ทœ์น™์„, DestinationRule๋กœ ๋Œ€์ƒ ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค.
  • mTLS, ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค, ํดํŠธ ์ธ์ ์…˜, ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋ฅผ YAML ์„ค์ •๋งŒ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์šด์˜ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง€๋ฏ€๋กœ ๋„์ž… ์ „ ํŒ€์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ˆ™๋ จ๋„์™€ ์šด์˜ ์—ฌ๊ฑด์„ ๋จผ์ € ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.