πΉ κ°μ
μ΄λ² κΈμμλ Istioμ μ΄μ λΉμ©μ μ κ°νκ³ , μ±λ₯μ μ΅μ ννλ λ°©λ²μ μ΄ν΄λ³΄κ² μ΅λλ€.
Istioλ μλΉμ€ λ©μ κΈ°λ₯μ μ 곡νλ κ°λ ₯ν λꡬμ§λ§,
μλͺ»λ μ€μ μΌλ‘ μΈν΄ λΆνμν 리μμ€ μ¬μ© μ¦κ° λ° μ΄μ λΉμ© μμΉμ΄ λ°μν μ μμ΅λλ€.
μ΄ κΈμμλ Istioμ λΉμ©μ μ€μ΄λ μ΅μ ν μ λ΅, 리μμ€ ν¨μ¨ν λ° μ€μ μ μ© μ¬λ‘λ₯Ό μ€λͺ νκ² μ΅λλ€.
πΉ 1. Istio μ΄μ λΉμ©μ΄ μ¦κ°νλ μμΈ
Istio μ΄μ λΉμ©μ΄ μ¦κ°νλ μ£Όμ μμΈμ λ€μκ³Ό κ°μ΅λλ€.
β 1.1 λΆνμν Sidecar Proxy μ¬μ©
- λͺ¨λ Podμ Sidecar(Envoy Proxy)λ₯Ό μ£Όμ νλ©΄ CPU λ° λ©λͺ¨λ¦¬ μ¬μ©λμ΄ μ¦κ°ν©λλ€.
- λ€νΈμν¬ νΈλν½μ΄ μ κ±°λ Sidecarκ° νμνμ§ μμ μλΉμ€μλ μλμΌλ‘ μ£Όμ λλ©΄ λΆνμν 리μμ€ λλΉκ° λ°μν μ μμ΅λλ€.
π‘ ν΄κ²° λ°©λ²: λΆνμν Sidecar μ£Όμ μ λ°©μ§νκ³ , νΉμ λ€μμ€νμ΄μ€μμλ§ Sidecarλ₯Ό μ¬μ©νλλ‘ μ€μ ν΄μΌ ν©λλ€.
β 1.2 κ³Όλν λ€νΈμν¬ νΈλν½ λ‘κΉ
- κΈ°λ³Έμ μΌλ‘ Istioλ λͺ¨λ νΈλν½ λ‘κ·Έλ₯Ό μμ§ λ° μ μ₯ν©λλ€.
- νΈλν½ λ‘κ·Έκ° λ§μμ§μλ‘ λμ€ν¬ μ¬μ©λκ³Ό λ‘κΉ λΉμ©μ΄ μ¦κ°ν©λλ€.
π‘ ν΄κ²° λ°©λ²: νμν λ‘κ·Έλ§ μ μ₯νκ³ , κ³Όλν νΈλν½ λ‘κΉ μ λ°©μ§ν΄μΌ ν©λλ€.
β 1.3 Envoy Proxy 리μμ€ κ³Όλ€ μ¬μ©
- Envoy Proxyλ λ€νΈμν¬ μμ²μ μ²λ¦¬νλ©΄μ CPU λ° λ©λͺ¨λ¦¬λ₯Ό μλΉν©λλ€.
- μμ²μ΄ λ§μμ§μλ‘ Envoy Proxyκ° ν΄λ¬μ€ν°μμ μ°¨μ§νλ 리μμ€κ° μ¦κ°ν μ μμ΅λλ€.
π‘ ν΄κ²° λ°©λ²: Envoy Proxyμ Keepalive λ° Connection Pool μ€μ μ μ΅μ ννμ¬ λΆνμν 리μμ€ μ¬μ©μ μ€μ¬μΌ ν©λλ€.
πΉ 2. Istio λΉμ© μ κ°μ μν μ΅μ ν λ°©λ²
β 2.1 λΆνμν Sidecar μλ μ£Όμ λ°©μ§
λͺ¨λ λ€μμ€νμ΄μ€μ Sidecarλ₯Ό μλ μ£Όμ
νλ κ²μ λΉν¨μ¨μ μΌ μ μμ΅λλ€.
λ°λΌμ νμν λ€μμ€νμ΄μ€μμλ§ Sidecarλ₯Ό νμ±ννλ κ²μ΄ μ€μν©λλ€.
kubectl label namespace default istio-injection=enabled
kubectl label namespace kube-system istio-injection=disabled
π‘ νΉμ λ€μμ€νμ΄μ€μμλ§ Sidecar μ£Όμ μ νμ±ννλ©΄ λΆνμν 리μμ€ μ¬μ©μ μ€μΌ μ μμ΅λλ€.
β 2.2 Sidecar 리μμ€ μ ν μ€μ
Sidecar Proxy(Envoy)μ CPU λ° λ©λͺ¨λ¦¬ μ¬μ©λμ μ ννλ©΄ λΉμ©μ μ κ°ν μ μμ΅λλ€.
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 λ©λͺ¨λ¦¬ μ ν
μ€λͺ :
- requests.cpu: "100m" → μ΅μ 100m(0.1 CPU)λ₯Ό μ¬μ©νλλ‘ μ€μ
- limits.cpu: "500m" → μ΅λ 500m(0.5 CPU)κΉμ§λ§ μ¬μ© κ°λ₯
- requests.memory: "256Mi" → μ΅μ 256Mi λ©λͺ¨λ¦¬ μμ²
- limits.memory: "512Mi" → μ΅λ 512Mi λ©λͺ¨λ¦¬ μ ν
π‘ Sidecarμ 리μμ€λ₯Ό μ ννλ©΄ ν΄λ¬μ€ν° λΉμ©μ μ κ°ν μ μμ΅λλ€.
β 2.3 λΆνμν νΈλν½ λ‘κΉ λ°©μ§
λͺ¨λ μμ²μ λ‘κΉ
νλ©΄ λμ€ν¬ μ¬μ©λμ΄ μ¦κ°νκ³ , μ΄μ λΉμ©μ΄ λμμ§ μ μμ΅λλ€.
λ°λΌμ νμν μμ²λ§ λ‘κ·Έλ‘ μ μ₯νλ κ²μ΄ μ€μν©λλ€.
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 μ΄μ μλ¬ λ‘κ·Έλ§ μ μ₯
μ€λͺ :
- filter.expression: 'response.code >= 400' → μ€λ₯(HTTP 400 μ΄μ)λ§ λ‘κ·Έλ‘ μ μ₯
π‘ λΆνμν νΈλν½ λ‘κ·Έλ₯Ό μ€μ΄λ©΄ λμ€ν¬ μ¬μ©λκ³Ό μ΄μ λΉμ©μ μ κ°ν μ μμ΅λλ€.
β 2.4 Envoy Proxy Keepalive λ° Connection Pool μ€μ μ΅μ ν
Envoy Proxyκ° λΆνμν λ€νΈμν¬ μ°κ²°μ μ μ§νλ©΄ 리μμ€ μ¬μ©λμ΄ μ¦κ°ν μ μμ΅λλ€.
μ΄λ₯Ό λ°©μ§νλ €λ©΄ Keepalive λ° Connection Pool μ€μ μ μ΅μ νν΄μΌ ν©λλ€.
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 # λκΈ° μ€μΈ μμ² μ μ ν
maxRequestsPerConnection: 3 # νλμ μ°κ²°λΉ μ΅λ μμ² κ°μ μ ν
tcp:
maxConnections: 50 # μ΅λ TCP μ°κ²° μ μ ν
outlierDetection:
consecutiveErrors: 3 # μ€λ₯κ° 3ν λ°μνλ©΄ μ°κ²° ν΄μ
interval: 5s # μ€λ₯ κ°μ§ μ£ΌκΈ°
baseEjectionTime: 10s # μ°κ²° ν΄μ ν μ¬μλ μκ°
μ€λͺ :
- http1MaxPendingRequests: 5 → HTTP μμ² λκΈ°μ΄μ 5κ°λ‘ μ ν
- maxRequestsPerConnection: 3 → νλμ μ°κ²°μμ μ΅λ 3κ°μ μμ²λ§ νμ©
- tcp.maxConnections: 50 → μ΅λ 50κ°μ TCP μ°κ²° μ μ§
- consecutiveErrors: 3 → 3λ² μ°μ μ€λ₯κ° λ°μνλ©΄ ν΄λΉ μ°κ²° μ°¨λ¨
π‘ Envoyμ μ°κ²° μλ₯Ό μ΅μ ννλ©΄ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄κ³ μ±λ₯μ ν₯μν μ μμ΅λλ€.
π κ²°λ‘
- λΆνμν Sidecar μλ μ£Όμ μ λ°©μ§νλ©΄ 리μμ€λ₯Ό μ κ°ν μ μμ΅λλ€.
- Sidecar Proxy(Envoy)μ CPU λ° λ©λͺ¨λ¦¬ μ¬μ©λμ μ ννλ©΄ μ΄μ λΉμ©μ μ€μΌ μ μμ΅λλ€.
- λΆνμν νΈλν½ λ‘κΉ μ λ°©μ§νλ©΄ λμ€ν¬ μ¬μ©λκ³Ό λ€νΈμν¬ λΉμ©μ μ κ°ν μ μμ΅λλ€.
- Envoy Proxyμ Connection Pool λ° Keepalive μ€μ μ μ΅μ ννλ©΄ μ±λ₯μ κ°μ νκ³ λΉμ©μ μ κ°ν μ μμ΅λλ€.