๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ ํต์ฌ ๋ฆฌ์์ค ๊ฐ๋
์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Istio๋ Kubernetes์ ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ด๋ฆฌํ๋ ์ฌ๋ฌ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ฉฐ,
๊ทธ์ค์์๋ VirtualService, DestinationRule, Gateway๊ฐ ๊ฐ์ฅ ์ค์ํ ์์์
๋๋ค.
์ด ๊ธ์์๋ ๊ฐ๊ฐ์ ์ญํ ๊ณผ ์ค์ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๊ณ , ์ค์ YAML ์์ ๋ฅผ ํตํด ํ์ฉ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
๐น 1. Istio์ ์ฃผ์ ๋คํธ์ํฌ ๋ฆฌ์์ค
โ 1.1 VirtualService (ํธ๋ํฝ ๋ผ์ฐํ ์ ์ด)
VirtualService๋ ํธ๋ํฝ์ ํน์ ์๋น์ค๋ก ๋ผ์ฐํ
ํ๋ ์ญํ ์ ํฉ๋๋ค.
Kubernetes์ ๊ธฐ๋ณธ Service ๋ฆฌ์์ค๋ง์ผ๋ก๋ ์ธ๋ฐํ ํธ๋ํฝ ๊ด๋ฆฌ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์,
Istio์ VirtualService๋ฅผ ํ์ฉํ๋ฉด ํธ๋ํฝ์ ๋ณด๋ค ์ ๊ตํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
VirtualService์ ์ฃผ์ ๊ธฐ๋ฅ
- ํธ์คํธ ๊ธฐ๋ฐ ๋ผ์ฐํ : ์ฌ๋ฌ ์๋น์ค ๋๋ฉ์ธ(host)์ผ๋ก ํธ๋ํฝ์ ์ ๋ฌ
- ํธ๋ํฝ ๋ถ๋ฐฐ: ํน์ ์๋น์ค ๋ฒ์ (v1/v2)์ ํธ๋ํฝ์ ๊ฐ์ค์น(weight) ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐ๋ถ
- ๋ฆฌํธ๋ผ์ด & ํ์์์: ํธ๋ํฝ์ ๋ณด๋ผ ๋ ์์ฒญ ์คํจ ์ ์ฌ์๋, ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋ ์ข ๋ฃ
- Fault Injection(์ฅ์ ํ ์คํธ): ์๋์ ์ผ๋ก ๋คํธ์ํฌ ์ฅ์ ์ํฉ์ ๋ง๋ค์ด ํ ์คํธ ๊ฐ๋ฅ
โ 1.2 DestinationRule (์๋น์ค๋ณ ํธ๋ํฝ ์ ์ฑ ์ค์ )
DestinationRule์ ํน์ ์๋น์ค์ ํธ๋ํฝ ์ ์ฑ
์ ์ ์ํ๋ ์ญํ ์ ํฉ๋๋ค.
VirtualService์ ํจ๊ป ์ฌ์ฉํ์ฌ, ์๋น์ค ๊ฐ ํธ๋ํฝ ํ๋ฆ์ ์ธ๋ฐํ๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค.
DestinationRule์ ์ฃผ์ ๊ธฐ๋ฅ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ค์ : ํธ๋ํฝ์ ํน์ ๋ฐฉ์(Round Robin, Least Connection ๋ฑ)์ผ๋ก ๋ถ๋ฐฐ
- ์ฐ๊ฒฐ ํ ๊ด๋ฆฌ: ์ต๋ ์ฐ๊ฒฐ ์, ์ฐ๊ฒฐ ์ ์ง ์๊ฐ ๋ฑ ์ค์ ๊ฐ๋ฅ
- ์ํท ๋ธ๋ ์ด์ปค ์ ์ฉ: ์ฐ์๋ ์์ฒญ ์คํจ ์ ์๋น์ค ์ฐจ๋จ
โ 1.3 Gateway (์ธ๋ถ ํธ๋ํฝ ๊ด๋ฆฌ)
Gateway๋ ์ธ๋ถ์์ Kubernetes ํด๋ฌ์คํฐ๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Kubernetes์ Ingress Controller์ ๋น์ทํ ์ญํ ์ ์ํํ์ง๋ง,
Istio Gateway๋ L4(Layer 4)์์์ ์ ์ด๋ฟ๋ง ์๋๋ผ, L7(Layer 7) ๊ธฐ๋ฐ์ ํธ๋ํฝ ๊ด๋ฆฌ๋ ๊ฐ๋ฅํฉ๋๋ค.
Gateway์ ์ฃผ์ ๊ธฐ๋ฅ
- Ingress Gateway: ์ธ๋ถ ํธ๋ํฝ์ ๋ด๋ถ ์๋น์ค๋ก ๋ผ์ฐํ
- Egress Gateway: ๋ด๋ถ์์ ์ธ๋ถ ์๋น์ค๋ก ๋๊ฐ๋ ํธ๋ํฝ์ ์ ์ด
- TLS ๋ฐ HTTPS ์ง์: SSL/TLS๋ฅผ ํ์ฉํ์ฌ ๋ณด์ ์ค์ ๊ฐ๋ฅ
๐น 2. Istio ๋ฆฌ์์ค ์์ ๋ฐ ์ค์ ๋ฐฉ๋ฒ
โ 2.1 VirtualService ์์ (ํธ๋ํฝ ๋ผ์ฐํ ์ค์ )
์๋ ์์ ์์๋ VirtualService๋ฅผ ํ์ฉํ์ฌ ํน์ ์๋น์ค(v1, v2)๋ก ํธ๋ํฝ์ ๋ถ๋ฐฐํฉ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService # VirtualService ๋ฆฌ์์ค ์ ์
metadata:
name: my-service # VirtualService์ ์ด๋ฆ
spec:
hosts:
- my-service # ํธ๋ํฝ์ ๋ผ์ฐํ
ํ ์๋น์ค ์ด๋ฆ
http:
- route:
- destination:
host: my-service # ๋์ ์๋น์ค ์ด๋ฆ
subset: v1 # v1 ๋ฒ์ ์ ์๋น์ค๋ก ํธ๋ํฝ ์ ๋ฌ
weight: 70 # 70%์ ํธ๋ํฝ์ v1์ผ๋ก ๋ถ๋ฐฐ
- destination:
host: my-service
subset: v2 # v2 ๋ฒ์ ์ ์๋น์ค๋ก ํธ๋ํฝ ์ ๋ฌ
weight: 30 # 30%์ ํธ๋ํฝ์ v2๋ก ๋ถ๋ฐฐ
์ค๋ช :
- VirtualService → ํน์ ํธ์คํธ(์๋น์ค ์ด๋ฆ)์ ๋ํ ํธ๋ํฝ ๋ผ์ฐํ ๊ท์น์ ์ค์
- destination.host → ํธ๋ํฝ์ด ํฅํ ์๋น์ค์ ์ด๋ฆ
- subset → ์๋น์ค์ ํน์ ๋ฒ์ ์ผ๋ก ํธ๋ํฝ์ ๋ผ์ฐํ
- weight → ํธ๋ํฝ ๋ถ๋ฐฐ ๋น์จ(์: v1 70%, v2 30%)
โ 2.2 DestinationRule ์์ (์๋น์ค๋ณ ํธ๋ํฝ ์ ์ฑ ์ค์ )
์๋ ์์ ์์๋ DestinationRule์ ํ์ฉํ์ฌ ์๋น์ค์ ์๋ธ์ (subset)๊ณผ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ ์ฑ ์ ์ค์ ํฉ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule # DestinationRule ๋ฆฌ์์ค ์ ์
metadata:
name: my-service # DestinationRule์ ์ด๋ฆ
spec:
host: my-service # ๋์ ์๋น์ค ์ด๋ฆ
subsets:
- name: v1 # v1 ๋ฒ์ ์๋น์ค ์ ์
labels:
version: v1
- name: v2 # v2 ๋ฒ์ ์๋น์ค ์ ์
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN # ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ค์
์ค๋ช :
- DestinationRule → ์๋น์ค์ ํธ๋ํฝ ์ ์ฑ ์ ์ ์
- subsets → ํน์ ์๋น์ค ๋ฒ์ (v1, v2)์ ๊ตฌ๋ถ
- trafficPolicy.loadBalancer → ํธ๋ํฝ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐฉ์์ ์ค์ (ROUND_ROBIN: ์์ฐจ์ ๋ฐฐ๋ถ)
โ 2.3 Gateway ์์ (์ธ๋ถ ํธ๋ํฝ ๊ด๋ฆฌ)
์๋ ์์ ์์๋ Gateway๋ฅผ ํ์ฉํ์ฌ ์ธ๋ถ์์ ๋ด๋ถ ์๋น์ค๋ก์ ํธ๋ํฝ์ ๊ด๋ฆฌํฉ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway # Gateway ๋ฆฌ์์ค ์ ์
metadata:
name: my-gateway # Gateway์ ์ด๋ฆ
spec:
selector:
istio: ingressgateway # Istio Ingress Gateway ์ฌ์ฉ
servers:
- port:
number: 80 # HTTP 80 ํฌํธ์์ ์์
name: http
protocol: HTTP
hosts:
- "*" # ๋ชจ๋ ๋๋ฉ์ธ ํ์ฉ
์ค๋ช :
- Gateway → ์ธ๋ถ ํธ๋ํฝ์ ๋ด๋ถ๋ก ์ ๋ฌํ๋ ์ญํ
- selector.istio: ingressgateway → Istio์ ๊ธฐ๋ณธ Ingress Gateway๋ฅผ ์ฌ์ฉ
- servers.port.number: 80 → HTTP 80 ํฌํธ์์ ํธ๋ํฝ์ ์์
- hosts: "*" → ๋ชจ๋ ๋๋ฉ์ธ์ ํธ๋ํฝ์ ํ์ฉ
๐ ๊ฒฐ๋ก
- VirtualService: ์๋น์ค ๊ฐ ํธ๋ํฝ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ , ๊ฐ์ค์น ๊ธฐ๋ฐ ๋ผ์ฐํ , A/B ํ ์คํธ, Canary ๋ฐฐํฌ ๋ฑ์ ์ํํ ์ ์์ต๋๋ค.
- DestinationRule: ํน์ ์๋น์ค์ ํธ๋ํฝ ์ ์ฑ ์ ์ค์ ํ์ฌ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐฉ์ ๋ฐ ์๋ธ์ (์๋น์ค ๋ฒ์ ๋ณ ๋ผ์ฐํ ) ์ ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- Gateway: ์ธ๋ถ ํธ๋ํฝ์ ๋ด๋ถ ์๋น์ค๋ก ์ ๋ฌํ๋ฉฐ, TLS/HTTPS ์ค์ ๋ฐ ๋คํธ์ํฌ ์์ธ์ค ์ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
- VirtualService + DestinationRule + Gateway๋ฅผ ์กฐํฉํ๋ฉด Istio์ ํธ๋ํฝ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๊ทน๋ํํ ์ ์์ต๋๋ค. ๐