Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.41] 7๋ถ€ Istio ์ตœ์ ํ™” ๋ฐ ์‹ค์ „ ์šด์˜ ์ „๋žต

ygtoken 2025. 3. 18. 12:13
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio๋ฅผ ์‹ค๋ฌด์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ํ™” ์ „๋žต๊ณผ ์šด์˜ ๋…ธํ•˜์šฐ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Istio๋Š” ๊ฐ•๋ ฅํ•œ ์„œ๋น„์Šค ๋ฉ”์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ž˜๋ชป๋œ ์„ค์ • ๋ฐ ๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์šด์˜ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด Istio์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ , ์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ ์•ˆ์ •์ ์ธ ์šด์˜ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” Istio ์šด์˜ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ตœ์ ํ™” ์ „๋žต, ์„ฑ๋Šฅ ํŠœ๋‹ ๋ฐฉ๋ฒ• ๋ฐ ์‹ค๋ฌด ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Istio ์šด์˜ ์ตœ์ ํ™”์˜ ํ•„์š”์„ฑ

 

๋ฌธ์ œ ์œ ํ˜• ์„ค๋ช…
๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ Envoy Proxy๊ฐ€ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์—ฌ ์šด์˜ ๋น„์šฉ ์ฆ๊ฐ€
๋„คํŠธ์›Œํฌ ์ง€์—ฐ(Latency) Sidecar Proxy๋ฅผ ํ†ตํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ๋กœ ์‘๋‹ต ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
๋ถˆํ•„์š”ํ•œ ๋กœ๊ทธ ๋ฐ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๊ณผ๋„ํ•œ ๋กœ๊น… ๋ฐ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘์œผ๋กœ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ
์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ ๋กค๋ฐฑ ๊ด€๋ฆฌ Istio์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ํ™œ์šฉ ๋ฐ ์•ˆ์ •์ ์ธ ๋กค๋ฐฑ ์ ˆ์ฐจ ํ•„์š”

๐Ÿ’ก Istio๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์šด์˜ํ•˜๋ ค๋ฉด, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 2. Istio ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

โœ… 2.1 Sidecar Proxy ์ตœ์ ํ™” (๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์ค„์ด๊ธฐ)

Envoy Proxy๋Š” ๊ฐ Pod์— ์ฃผ์ž…๋˜๋Š” Sidecar๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™”๋œ Sidecar ๋ฆฌ์†Œ์Šค ์„ค์ •

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
spec:
  template:
    spec:
      containers:
        - name: my-app
          image: my-app:v1
        - name: istio-proxy
          resources:
            requests:
              cpu: "100m"  # ์ตœ์†Œ 100m CPU ์š”์ฒญ
              memory: "256Mi"  # ์ตœ์†Œ 256Mi ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ
            limits:
              cpu: "500m"  # ์ตœ๋Œ€ 500m CPU ์ œํ•œ
              memory: "512Mi"  # ์ตœ๋Œ€ 512Mi ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ

๐Ÿ’ก Sidecar์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์šด์˜ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 2.2 ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ ๋กœ๊น… ๋ฐฉ์ง€

๋ชจ๋“  ์š”์ฒญ์„ ๋กœ๊น…ํ•˜๋ฉด ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•„์š”ํ•œ ์š”์ฒญ๋งŒ ๋กœ๊ทธ๋กœ ์ €์žฅํ•˜๋„๋ก ์„ค์ •ํ•˜๋ฉด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋ž˜ํ”ฝ ๋กœ๊น… ํ•„ํ„ฐ๋ง

apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: access-logs
  namespace: istio-system
spec:
  accessLogging:
    providers:
      - name: envoy
    filter:
      expression: 'response.code >= 400'  # HTTP 400 ์ด์ƒ ์—๋Ÿฌ ๋กœ๊ทธ๋งŒ ์ €์žฅ

๐Ÿ’ก ๋ถˆํ•„์š”ํ•œ ๋กœ๊น…์„ ์ค„์ด๋ฉด ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๋ฅผ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 2.3 Connection Pool ๋ฐ Keepalive ์ตœ์ ํ™”

๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋ ค๋ฉด Connection Pool ๋ฐ Keepalive ์„ค์ •์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™”๋œ DestinationRule ์„ค์ •

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-service-dr
  namespace: default
spec:
  host: my-service.default.svc.cluster.local
  trafficPolicy:
    connectionPool:
      http:
        http1MaxPendingRequests: 5  # HTTP ์š”์ฒญ ๋Œ€๊ธฐ์—ด ์ œํ•œ
        maxRequestsPerConnection: 3  # ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ฒ˜๋ฆฌํ•  ์ตœ๋Œ€ ์š”์ฒญ ์ˆ˜ ์ œํ•œ
      tcp:
        maxConnections: 50  # TCP ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œ
    outlierDetection:
      consecutiveErrors: 3  # 3ํšŒ ์—ฐ์† ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ํ•ด๋‹น ์—ฐ๊ฒฐ ํ•ด์ œ
      interval: 5s  # ์˜ค๋ฅ˜ ๊ฐ์ง€ ๊ฐ„๊ฒฉ
      baseEjectionTime: 10s  # ์—ฐ๊ฒฐ ํ•ด์ œ ํ›„ ์žฌ์‹œ๋„ ๋Œ€๊ธฐ ์‹œ๊ฐ„

๐Ÿ’ก Connection Pool ์„ค์ •์„ ์ตœ์ ํ™”ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 2.4 Istio Ingress/Egress Gateway ์ตœ์ ํ™”

Ingress ๋ฐ Egress Gateway์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ingress Gateway ์ตœ์ ํ™” ์˜ˆ์ œ

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-ingress-gateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway  # Istio Ingress Gateway ์„ ํƒ
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE  # TLS ์ ์šฉ
      hosts:
        - my-service.example.com

๐Ÿ’ก Ingress Gateway์˜ ๋ถˆํ•„์š”ํ•œ TLS ์„ค์ •์„ ์ตœ์ ํ™”ํ•˜๋ฉด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 3. Istio ์‹ค๋ฌด ์šด์˜ ์ „๋žต

โœ… 3.1 Istio ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ ๋กค๋ฐฑ ์ „๋žต

Istio๋Š” ๋น ๋ฅธ ์†๋„๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ, ์•ˆ์ „ํ•œ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ ๋กค๋ฐฑ ์ „๋žต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Istio ์—…๊ทธ๋ ˆ์ด๋“œ ์ ˆ์ฐจ

istioctl upgrade
kubectl rollout restart deployment -n istio-system

Istio ๋กค๋ฐฑ ์ ˆ์ฐจ

istioctl install --set revision=1-16-2
kubectl delete deployment istiod-1-17-0 -n istio-system

๐Ÿ’ก Istio์˜ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด Canary ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐฉ์‹์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ… 3.2 Istio ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„

Istio์˜ ์„ฑ๋Šฅ์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด Prometheus, Grafana, Jaeger ๋ฐ Kiali๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl port-forward svc/kiali -n istio-system 20001:20001
kubectl port-forward svc/jaeger-query -n istio-system 16686:16686
  • Kiali: Istio ๋„คํŠธ์›Œํฌ ํ๋ฆ„ ์‹œ๊ฐํ™”
  • Jaeger: ํŠธ๋žœ์žญ์…˜ ์ถ”์  ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„
  • Prometheus & Grafana: ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿ’ก ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ๋ฐ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ์ง€ํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฒฐ๋ก 

  • Sidecar Proxy์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ ํ™”ํ•˜๋ฉด ์šด์˜ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ ๋กœ๊น…์„ ์ค„์ด๋ฉด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Connection Pool ๋ฐ Keepalive ์„ค์ •์„ ์ตœ์ ํ™”ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Istio Gateway ์„ค์ •์„ ์กฐ์ •ํ•˜๋ฉด Ingress ๋ฐ Egress ํŠธ๋ž˜ํ”ฝ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ ๋กค๋ฐฑ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๋ฉด ์•ˆ์ •์ ์ธ ์šด์˜์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • Prometheus, Grafana, Jaeger ๋ฐ Kiali๋ฅผ ํ™œ์šฉํ•˜๋ฉด Istio ์šด์˜์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
728x90