๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ 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 ์ด์์ ํจ๊ณผ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.