Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.5] 1๋ถ€ ๊ฐœ๋…๊ณผ ๊ธฐ๋ณธ ์„ค์ • #5 | Sidecar ์ž๋™ ์ฃผ์ž… & Istio ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ค์ •ํ•˜๊ธฐ

ygtoken 2025. 3. 18. 10:36
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” **Istio์˜ Sidecar ์ž๋™ ์ฃผ์ž…(Auto Injection)**๊ณผ Istio ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ค์ • ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Sidecar ์ฃผ์ž…์€ Istio์˜ ํ”„๋ก์‹œ(Proxy) ์—ญํ• ์„ ํ•˜๋Š” Envoy๋ฅผ ๊ฐ ์„œ๋น„์Šค์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์ด๋ฉฐ,
Istio์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ค์ •์„ ํ†ตํ•ด ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ธ€์—์„œ๋Š” Sidecar ์ž๋™ ์ฃผ์ž…์ด๋ž€ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€๋ฅผ ์‹ค์Šต๊ณผ ํ•จ๊ป˜ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Istio์˜ Sidecar๋ž€?

โœ… 1.1 Sidecar ๊ฐœ๋…

**Sidecar(์‚ฌ์ด๋“œ์นด)**๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ ๋‚ด์—์„œ ๊ฐ Pod์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” Envoy Proxy ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
์ด ์ปจํ…Œ์ด๋„ˆ๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ์‹œํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ์„œ๋น„์Šค ๊ฐ„์˜ ๋ณด์•ˆ, ๋ผ์šฐํŒ…, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Sidecar Proxy์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ: Istio์˜ ์ •์ฑ…์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ… ๋ฐ ์ œ์–ด
  • ๋ณด์•ˆ(mTLS): ์„œ๋น„์Šค ๊ฐ„์˜ ์•”ํ˜ธํ™”๋œ ํ†ต์‹  ์ง€์›
  • ๋ชจ๋‹ˆํ„ฐ๋ง: Prometheus, Grafana์™€ ์—ฐ๋™ํ•˜์—ฌ ์„œ๋น„์Šค ์ƒํƒœ ์ถ”์ 
  • ๋กœ๊น… & ๋ถ„์‚ฐ ์ถ”์ : Jaeger, Zipkin๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์š”์ฒญ ํ๋ฆ„ ๋ถ„์„

โœ… 1.2 Sidecar ์ฃผ์ž… ๋ฐฉ์‹

Istio์—์„œ Sidecar Proxy๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฃผ์ž… ๋ฐฉ์‹ ์„ค๋ช…  ํŠน์ง•
์ž๋™ ์ฃผ์ž…(Auto Injection) ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๋ฉด Pod ์ƒ์„ฑ ์‹œ ์ž๋™์œผ๋กœ Envoy Proxy๊ฐ€ ์ฃผ์ž…๋จ - ํŽธ๋ฆฌํ•จ, ์„ค์ • ๊ฐ„์†Œํ™”- ๋ชจ๋“  Pod์— ์ผ๊ด„ ์ ์šฉ ๊ฐ€๋Šฅ
์ˆ˜๋™ ์ฃผ์ž…(Manual Injection) istioctl kube-inject ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • Pod์— Sidecar Proxy๋ฅผ ์ถ”๊ฐ€ - ๊ฐœ๋ณ„ Pod๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ ์ ์šฉ ๊ฐ€๋Šฅ- ํ•„์š”ํ•  ๋•Œ๋งŒ ์ฃผ์ž… ๊ฐ€๋Šฅ

๐Ÿ’ก ์ผ๋ฐ˜์ ์œผ๋กœ "์ž๋™ ์ฃผ์ž…(Auto Injection)"์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 2. Istio ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ค์ • ๋ฐ Sidecar ์ž๋™ ์ฃผ์ž…

โœ… 2.1 Sidecar ์ž๋™ ์ฃผ์ž… ํ™œ์„ฑํ™”

๋จผ์ € **Sidecar ์ž๋™ ์ฃผ์ž…(Auto Injection)**์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด,
Istio๊ฐ€ ์„ค์น˜๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl label namespace default istio-injection=enabled

์„ค๋ช…:

  • kubectl label namespace default istio-injection=enabled
    โ†’ default ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— istio-injection=enabled ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜์—ฌ Sidecar ์ž๋™ ์ฃผ์ž…์„ ํ™œ์„ฑํ™”

โœ… 2.2 Sidecar ์ž๋™ ์ฃผ์ž… ํ™•์ธ

์ด์ œ default ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฐฐํฌ๋œ Pod์— ์ž๋™์œผ๋กœ Envoy Sidecar๊ฐ€ ์ถ”๊ฐ€๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

apiVersion: apps/v1
kind: Deployment  # Kubernetes์—์„œ Pod์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” Deployment ๋ฆฌ์†Œ์Šค
metadata:
  name: httpbin  # Deployment์˜ ์ด๋ฆ„
  labels:
    app: httpbin  # app=httpbin ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์„œ๋น„์Šค์™€ ์—ฐ๊ณ„ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •
spec:
  replicas: 1  # Pod์„ 1๊ฐœ ์ƒ์„ฑ
  selector:
    matchLabels:
      app: httpbin  # app=httpbin ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ Pod์„ ์„ ํƒ
  template:
    metadata:
      labels:
        app: httpbin  # Pod ํ…œํ”Œ๋ฆฟ์—๋„ ๋™์ผํ•œ ๋ ˆ์ด๋ธ” ์ถ”๊ฐ€ (ํ•„์ˆ˜)
    spec:
      containers:
        - name: httpbin  # ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„
          image: kennethreitz/httpbin  # HTTP ์š”์ฒญ ํ…Œ์ŠคํŠธ์šฉ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€
          ports:
            - containerPort: 80  # ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ (์„œ๋น„์Šค ์—ฐ๊ฒฐ์— ์‚ฌ์šฉ)

 

๋ฐฐํฌ ํ›„ Pod ๋ชฉ๋ก์„ ํ™•์ธํ•˜๋ฉด, Istio Sidecar๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl get pods

 

์ถœ๋ ฅ ์˜ˆ์‹œ

NAME                       READY   STATUS    RESTARTS   AGE
httpbin-5c78cd57db-2lz7x   2/2     Running   0          30s

๐Ÿ’ก READY ์—ด์— 2/2๋ผ๊ณ  ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์€ Envoy Sidecar๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž…๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


โœ… 2.3 ์ˆ˜๋™์œผ๋กœ Sidecar๊ฐ€ ํฌํ•จ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Pod์˜ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl get pod httpbin-5c78cd57db-2lz7x -o jsonpath='{.spec.containers[*].name}'

 

์ถœ๋ ฅ ์˜ˆ์‹œ

httpbin istio-proxy

๐Ÿ’ก istio-proxy ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉด, Istio์˜ Envoy Sidecar๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž…๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๐Ÿ”น 3. Sidecar ์ˆ˜๋™ ์ฃผ์ž… ๋ฐฉ๋ฒ• (์˜ต์…˜)

โœ… 3.1 ์ˆ˜๋™์œผ๋กœ Sidecar ์ฃผ์ž…ํ•˜๊ธฐ

Sidecar ์ž๋™ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ,
์ˆ˜๋™์œผ๋กœ Istio Sidecar๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด istioctl kube-inject ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl apply -f <(istioctl kube-inject -f httpbin-deployment.yaml)

์„ค๋ช…:

  • istioctl kube-inject -f httpbin-deployment.yaml
    โ†’ ๊ธฐ์กด Deployment YAML์— Sidecar ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฃผ์ž…ํ•œ ํ›„ ๋ฐฐํฌ

โœ… 3.2 Sidecar ์ˆ˜๋™ ์ฃผ์ž… ํ™•์ธ

์ˆ˜๋™์œผ๋กœ Sidecar๋ฅผ ์ฃผ์ž…ํ•œ ๊ฒฝ์šฐ์—๋„ kubectl get pods ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl get pods

 

์ถœ๋ ฅ ์˜ˆ์‹œ

NAME                       READY   STATUS    RESTARTS   AGE
httpbin-5c78cd57db-2lz7x   2/2     Running   0          30s

๐Ÿ’ก ์ž๋™ ์ฃผ์ž…๊ณผ ๋™์ผํ•˜๊ฒŒ 2/2 ์ƒํƒœ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 4. Sidecar ์ œ๊ฑฐ ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ค์ • ๋ณ€๊ฒฝ

โœ… 4.1 ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ Sidecar ์ž๋™ ์ฃผ์ž… ๋น„ํ™œ์„ฑํ™”

ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ Sidecar ์ž๋™ ์ฃผ์ž…์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด,
๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ด๋ธ”์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

kubectl label namespace default istio-injection-

์„ค๋ช…:

  • istio-injection- โ†’ ๊ธฐ์กด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ Sidecar ์ž๋™ ์ฃผ์ž… ์„ค์ • ์ œ๊ฑฐ

์ด์ œ default ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ƒ์„ฑ๋˜๋Š” Pod๋Š” ์ž๋™์œผ๋กœ Sidecar๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


โœ… 4.2 ๊ธฐ์กด Pod์—์„œ Sidecar ์ œ๊ฑฐ

์ด๋ฏธ Sidecar๊ฐ€ ํฌํ•จ๋œ Pod์—์„œ Envoy Proxy๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด,
๊ธฐ์กด Pod๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl delete pod -n default --all

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ๋ฐฐํฌํ•˜๋ฉด,
์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ Pod์—๋Š” Sidecar๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฒฐ๋ก 

  • **Sidecar(์‚ฌ์ด๋“œ์นด)**๋Š” Istio์˜ ํ”„๋ก์‹œ ์ปจํ…Œ์ด๋„ˆ๋กœ, ํŠธ๋ž˜ํ”ฝ ์ œ์–ด, ๋ณด์•ˆ, ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • **Sidecar ์ž๋™ ์ฃผ์ž…(Auto Injection)**์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, Pod๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ Envoy Proxy๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • kubectl label namespace <๋„ค์ž„์ŠคํŽ˜์ด์Šค> istio-injection=enabled ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด ์ž๋™ ์ฃผ์ž…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜๋™ ์ฃผ์ž…(Manual Injection) ๋ฐฉ๋ฒ•๋„ ์žˆ์œผ๋ฉฐ, istioctl kube-inject๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„ Pod์— Sidecar๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Sidecar ์ž๋™ ์ฃผ์ž…์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ ˆ์ด๋ธ”์„ ์ œ๊ฑฐํ•˜๊ณ  Pod๋ฅผ ์žฌ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
728x90