Kubernetes Tools/Istio

[Istio κ°€μ΄λ“œ ep.33] 5λΆ€ 운영 및 μ΅œμ ν™” #3 | Istio CNI(Network Plugin) ν™œμš©ν•˜μ—¬ λ„€νŠΈμ›Œν¬ μ„±λŠ₯ κ°œμ„ ν•˜κΈ°

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

πŸ”Ή κ°œμš”

이번 κΈ€μ—μ„œλŠ” Istio CNI(Container Network Interface) ν”ŒλŸ¬κ·ΈμΈμ„ ν™œμš©ν•˜μ—¬ λ„€νŠΈμ›Œν¬ μ„±λŠ₯을 κ°œμ„ ν•˜λŠ” 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
기본적으둜 IstioλŠ” Sidecar Proxy(Envoy)λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΈλž˜ν”½μ„ κ΄€λ¦¬ν•˜μ§€λ§Œ,
이 κ³Όμ •μ—μ„œ istio-init μ»¨ν…Œμ΄λ„ˆλ₯Ό ν™œμš©ν•œ iptables κ·œμΉ™ 섀정이 좔가적인 μ˜€λ²„ν—€λ“œλ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

Istio CNIλ₯Ό μ‚¬μš©ν•˜λ©΄ iptables μ„€μ • κ³Όμ • 없이 Sidecar Proxyλ₯Ό λ™μž‘μ‹œν‚¬ 수 μžˆμ–΄,
λ„€νŠΈμ›Œν¬ μ„±λŠ₯을 μ΅œμ ν™”ν•˜κ³  λ³΄μ•ˆμ„±μ„ κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” Istio CNI의 κ°œλ…, μ„€μΉ˜ 방법 및 μ„±λŠ₯ μ΅œμ ν™” 적용 사둀λ₯Ό μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.


πŸ”Ή 1. Istio CNIλž€?

βœ… 1.1 Istio CNI(Container Network Interface) κ°œλ…

Istio CNIλŠ” Kubernetes의 CNI(Container Network Interface) ν”ŒλŸ¬κ·ΈμΈ 쀑 ν•˜λ‚˜λ‘œ,
istio-init μ»¨ν…Œμ΄λ„ˆ 없이도 λ„€νŠΈμ›Œν¬ λ¦¬λ””λ ‰μ…˜ 섀정을 μ μš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€.

κΈ°λ³Έ Istio λ„€νŠΈμ›Œν¬ μ„€μ • 방식

  • IstioλŠ” iptables κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ Pod의 νŠΈλž˜ν”½μ„ Envoy Proxy둜 λ¦¬λ””λ ‰νŠΈν•©λ‹ˆλ‹€.
  • 이 κ³Όμ •μ—μ„œ istio-init μ»¨ν…Œμ΄λ„ˆκ°€ μ‹€ν–‰λ˜μ–΄ iptables κ·œμΉ™μ„ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • istio-init μ»¨ν…Œμ΄λ„ˆλŠ” κΆŒν•œμ΄ ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜λ―€λ‘œ λ³΄μ•ˆ μœ„ν—˜μ΄ μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Istio CNI 적용 ν›„ λ„€νŠΈμ›Œν¬ μ„€μ • 방식

  • Istio CNIλ₯Ό ν™œμ„±ν™”ν•˜λ©΄, iptables 섀정을 λ³„λ„μ˜ init μ»¨ν…Œμ΄λ„ˆ 없이 μžλ™μœΌλ‘œ μ μš©ν•©λ‹ˆλ‹€.
  • λ”°λΌμ„œ Pod μ‹€ν–‰ 속도가 ν–₯μƒλ˜κ³ , λ³΄μ•ˆμ„±μ„ κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’‘ Istio CNIλ₯Ό μ‚¬μš©ν•˜λ©΄ istio-init μ»¨ν…Œμ΄λ„ˆκ°€ 제거되며, λ„€νŠΈμ›Œν¬ μ„±λŠ₯이 μ΅œμ ν™”λ©λ‹ˆλ‹€.


βœ… 1.2 Istio CNI의 μ£Όμš” μž₯점

κΈ°λŠ₯ 이점
istio-init μ»¨ν…Œμ΄λ„ˆ 제거 Pod μ‹œμž‘ 속도 ν–₯상
iptables μ„€μ • μžλ™ν™” λ„€νŠΈμ›Œν¬ μ„€μ • μ˜€λ²„ν—€λ“œ κ°μ†Œ
λ³΄μ•ˆμ„± κ°•ν™” init μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ 없이 Pod λ„€νŠΈμ›Œν¬ μ„€μ • κ°€λŠ₯
λ„€νŠΈμ›Œν¬ μ„±λŠ₯ μ΅œμ ν™” λΆˆν•„μš”ν•œ λ¦¬λ””λ ‰μ…˜ μ΅œμ†Œν™”

πŸ’‘ Istio CNIλŠ” μ„±λŠ₯ ν–₯μƒλΏλ§Œ μ•„λ‹ˆλΌ λ³΄μ•ˆμ μΈ μž₯점도 μ œκ³΅ν•˜λ―€λ‘œ ꢌμž₯λ˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€.


πŸ”Ή 2. Istio CNI μ„€μΉ˜ 및 ν™œμ„±ν™”

βœ… 2.1 Istio CNI μ„€μΉ˜ (Helm μ‚¬μš©)

Istio CNIλ₯Ό μ„€μΉ˜ν•˜λ €λ©΄ Helm을 μ‚¬μš©ν•˜μ—¬ ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update

helm install istio-cni istio/cni -n kube-system

 

μ„€μΉ˜ ν›„ Istio CNIκ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜κ³  μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

kubectl get daemonset -n kube-system | grep istio-cni

 

좜λ ₯ 예제:

istio-cni-node   5/5     5            5           5m

πŸ’‘ Istio CNIκ°€ DaemonSet ν˜•νƒœλ‘œ μ‹€ν–‰λ˜λ©°, λͺ¨λ“  λ…Έλ“œμ— λ°°ν¬λ©λ‹ˆλ‹€.


βœ… 2.2 Istio CNI ν™œμ„±ν™” (istiod μ„€μ • λ³€κ²½)

Istio CNIλ₯Ό μ‚¬μš©ν•˜λ €λ©΄, istiod μ„€μ •μ—μ„œ Sidecar μ£Όμž…μ„ λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: istio-controlplane
  namespace: istio-system
spec:
  meshConfig:
    defaultConfig:
      proxyMetadata:
        ISTIO_META_ENABLE_CNI: "true"  # Istio CNI ν™œμ„±ν™”

μ„€λͺ…:

  • ISTIO_META_ENABLE_CNI: "true" → Istio CNIλ₯Ό ν™œμ„±ν™”ν•˜μ—¬ istio-init μ»¨ν…Œμ΄λ„ˆλ₯Ό 제거

섀정을 μ μš©ν•œ ν›„, Istio 컨트둀 ν”Œλ ˆμΈμ„ μž¬μ‹œμž‘ν•©λ‹ˆλ‹€.

kubectl rollout restart deployment istiod -n istio-system

πŸ’‘ istio-init μ»¨ν…Œμ΄λ„ˆ 없이도 λ„€νŠΈμ›Œν¬ 섀정이 μžλ™ μ μš©λ©λ‹ˆλ‹€.


βœ… 2.3 Istio CNI 적용 μ—¬λΆ€ 확인

Istio CNIκ°€ μ •μƒμ μœΌλ‘œ μ μš©λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄, μƒˆλ‘œμš΄ Pod을 μ‹€ν–‰ν•˜μ—¬ istio-init μ»¨ν…Œμ΄λ„ˆκ°€ μ œκ±°λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

kubectl get pod -n default -o json | jq '.items[].spec.initContainers'

 

좜λ ₯ 예제:

[]

πŸ’‘ istio-init μ»¨ν…Œμ΄λ„ˆκ°€ μ‚¬λΌμ‘Œλ‹€λ©΄ Istio CNIκ°€ μ •μƒμ μœΌλ‘œ 적용된 κ²ƒμž…λ‹ˆλ‹€.


πŸ”Ή 3. Istio CNI μ„±λŠ₯ μ΅œμ ν™” 적용 사둀

βœ… 3.1 λ„€νŠΈμ›Œν¬ μ„±λŠ₯ ν…ŒμŠ€νŠΈ (before & after)

Istio CNI 적용 μ „ν›„μ˜ λ„€νŠΈμ›Œν¬ μ„±λŠ₯ 차이λ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ wrk 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ HTTP μš”μ²­ μ„±λŠ₯을 μΈ‘μ •ν•©λ‹ˆλ‹€.

β‘  Istio CNI 적용 μ „ (istio-init μ‚¬μš©)

wrk -t12 -c200 -d30s http://my-service.default.svc.cluster.local

 

좜λ ₯ 예제:

Requests/sec: 1000.56
Latency: 35.3ms

β‘‘ Istio CNI 적용 ν›„ (istio-init 제거)

wrk -t12 -c200 -d30s http://my-service.default.svc.cluster.local

 

좜λ ₯ 예제:

Requests/sec: 1203.78
Latency: 28.4ms

πŸ’‘ Istio CNIλ₯Ό μ μš©ν•˜λ©΄ μš”μ²­ 처리 속도가 ν–₯μƒλ˜κ³ , λ„€νŠΈμ›Œν¬ μ§€μ—° μ‹œκ°„μ΄ κ°μ†Œν•˜λŠ” 효과λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.


βœ… 3.2 Istio CNI 적용 ν›„ λ³΄μ•ˆ μ •μ±… κ°•ν™”

Istio CNIλ₯Ό ν™œμ„±ν™”ν•˜λ©΄, Podμ—μ„œ λ³΄μ•ˆ 섀정을 κ°•ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
기본적으둜 iptables 섀정이 init μ»¨ν…Œμ΄λ„ˆ 없이 μˆ˜ν–‰λ˜λ―€λ‘œ, 좔가적인 λ³΄μ•ˆ μ •μ±… 적용이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-unauthenticated
  namespace: default
spec:
  action: DENY
  rules:
    - from:
        - source:
            notRequestPrincipals: ["*"]  # μΈμ¦λ˜μ§€ μ•Šμ€ μš”μ²­ 차단

μ„€λͺ…:

  • notRequestPrincipals: ["*"] → μΈμ¦λ˜μ§€ μ•Šμ€ μš”μ²­μ„ μ°¨λ‹¨ν•˜μ—¬ λ³΄μ•ˆ κ°•ν™”

πŸ’‘ Istio CNI와 λ³΄μ•ˆ 정책을 ν•¨κ»˜ μ μš©ν•˜λ©΄ μ„±λŠ₯κ³Ό λ³΄μ•ˆμ„ λ™μ‹œμ— κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ“Œ κ²°λ‘ 

  • Istio CNIλ₯Ό ν™œμ„±ν™”ν•˜λ©΄ istio-init μ»¨ν…Œμ΄λ„ˆ 없이 λ„€νŠΈμ›Œν¬ 섀정이 μžλ™ μ μš©λ©λ‹ˆλ‹€.
  • Pod μ‹€ν–‰ 속도가 ν–₯μƒλ˜κ³ , λΆˆν•„μš”ν•œ iptables μ„€μ • 과정이 μ œκ±°λ˜μ–΄ μ„±λŠ₯이 μ΅œμ ν™”λ©λ‹ˆλ‹€.
  • λ„€νŠΈμ›Œν¬ μ§€μ—° μ‹œκ°„μ΄ κ°μ†Œν•˜λ©°, λ³΄μ•ˆ 섀정을 κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • wrk을 μ‚¬μš©ν•œ μ„±λŠ₯ ν…ŒμŠ€νŠΈ κ²°κ³Ό, μš”μ²­ 처리 속도가 평균 20% ν–₯μƒλ˜λŠ” 것을 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • Istio CNI와 λ³΄μ•ˆ 정책을 ν•¨κ»˜ ν™œμš©ν•˜λ©΄, μ„±λŠ₯κ³Ό λ³΄μ•ˆμ„ λ™μ‹œμ— κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
728x90