[Istio κ°μ΄λ ep.33] 5λΆ μ΄μ λ° μ΅μ ν #3 | Istio CNI(Network Plugin) νμ©νμ¬ λ€νΈμν¬ μ±λ₯ κ°μ νκΈ°
πΉ κ°μ
μ΄λ² κΈμμλ 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μ 보μ μ μ± μ ν¨κ» νμ©νλ©΄, μ±λ₯κ³Ό 보μμ λμμ κ°νν μ μμ΅λλ€.