๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ **Istio์ Sidecar ์๋ ์ฃผ์
(Auto Injection)**๊ณผ Istio ๋ค์์คํ์ด์ค ์ค์ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Sidecar ์ฃผ์
์ Istio์ ํ๋ก์(Proxy) ์ญํ ์ ํ๋ Envoy๋ฅผ ๊ฐ ์๋น์ค์ ์ถ๊ฐํ๋ ๊ณผ์ ์ด๋ฉฐ,
Istio์ ๋ค์์คํ์ด์ค ์ค์ ์ ํตํด ์๋น์ค ๋ฉ์๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ Sidecar ์๋ ์ฃผ์
์ด๋ ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ์ค์ ํ๋์ง๋ฅผ ์ค์ต๊ณผ ํจ๊ป ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
๐น 1. Istio์ Sidecar๋?
โ 1.1 Sidecar ๊ฐ๋
**Sidecar(์ฌ์ด๋์นด)**๋ ์๋น์ค ๋ฉ์ ๋ด์์ ๊ฐ Pod์ ์๋์ผ๋ก ์ถ๊ฐ๋๋ Envoy Proxy ์ปจํ
์ด๋์
๋๋ค.
์ด ์ปจํ
์ด๋๋ ํธ๋ํฝ์ ๊ฐ์ํ๊ณ ์ ์ดํ๋ ์ญํ ์ ํ๋ฉฐ, ์๋น์ค ๊ฐ์ ๋ณด์, ๋ผ์ฐํ
, ๋ชจ๋ํฐ๋ง์ ๋ด๋นํฉ๋๋ค.
Sidecar Proxy์ ์ฃผ์ ๊ธฐ๋ฅ
- ํธ๋ํฝ ๊ด๋ฆฌ: Istio์ ์ ์ฑ ์ ๋ฐ๋ผ ํธ๋ํฝ์ ๋ผ์ฐํ ๋ฐ ์ ์ด
- ๋ณด์(mTLS): ์๋น์ค ๊ฐ์ ์ํธํ๋ ํต์ ์ง์
- ๋ชจ๋ํฐ๋ง: Prometheus, Grafana์ ์ฐ๋ํ์ฌ ์๋น์ค ์ํ ์ถ์
- ๋ก๊น & ๋ถ์ฐ ์ถ์ : Jaeger, Zipkin๊ณผ ์ฐ๋ํ์ฌ ์์ฒญ ํ๋ฆ ๋ถ์
โ 1.2 Sidecar ์ฃผ์ ๋ฐฉ์
Istio์์ Sidecar Proxy๋ฅผ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ฃผ์ ๋ฐฉ์ | ์ค๋ช | ํน์ง |
์๋ ์ฃผ์ (Auto Injection) | ๋ค์์คํ์ด์ค์ ๋ ์ด๋ธ์ ์ถ๊ฐํ๋ฉด Pod ์์ฑ ์ ์๋์ผ๋ก Envoy Proxy๊ฐ ์ฃผ์ ๋จ | - ํธ๋ฆฌํจ, ์ค์ ๊ฐ์ํ- ๋ชจ๋ Pod์ ์ผ๊ด ์ ์ฉ ๊ฐ๋ฅ |
์๋ ์ฃผ์ (Manual Injection) | istioctl kube-inject ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํน์ Pod์ Sidecar Proxy๋ฅผ ์ถ๊ฐ | - ๊ฐ๋ณ Pod๋ง๋ค ์๋์ผ๋ก ์ ์ฉ ๊ฐ๋ฅ- ํ์ํ ๋๋ง ์ฃผ์ ๊ฐ๋ฅ |
๐ก ์ผ๋ฐ์ ์ผ๋ก "์๋ ์ฃผ์ (Auto Injection)"์ด ๊ถ์ฅ๋ฉ๋๋ค.
๐น 2. Istio ๋ค์์คํ์ด์ค ์ค์ ๋ฐ Sidecar ์๋ ์ฃผ์
โ 2.1 Sidecar ์๋ ์ฃผ์ ํ์ฑํ
๋จผ์ **Sidecar ์๋ ์ฃผ์
(Auto Injection)**์ ํ์ฑํํ๋ ค๋ฉด,
Istio๊ฐ ์ค์น๋ ๋ค์์คํ์ด์ค์ ๋ ์ด๋ธ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
kubectl label namespace default istio-injection=enabled
์ค๋ช :
- kubectl label namespace default istio-injection=enabled
โ default ๋ค์์คํ์ด์ค์ istio-injection=enabled ๋ ์ด๋ธ์ ์ถ๊ฐํ์ฌ Sidecar ์๋ ์ฃผ์ ์ ํ์ฑํ
โ 2.2 Sidecar ์๋ ์ฃผ์ ํ์ธ
์ด์ default ๋ค์์คํ์ด์ค์ ๋ฐฐํฌ๋ Pod์ ์๋์ผ๋ก Envoy Sidecar๊ฐ ์ถ๊ฐ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํด๋ณด๊ฒ ์ต๋๋ค.
apiVersion: apps/v1
kind: Deployment # Kubernetes์์ Pod์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ Deployment ๋ฆฌ์์ค
metadata:
name: httpbin # Deployment์ ์ด๋ฆ
labels:
app: httpbin # app=httpbin ๋ ์ด๋ธ์ ์ถ๊ฐํ์ฌ ์๋น์ค์ ์ฐ๊ณ ๊ฐ๋ฅํ๋๋ก ์ค์
spec:
replicas: 1 # Pod์ 1๊ฐ ์์ฑ
selector:
matchLabels:
app: httpbin # app=httpbin ๋ ์ด๋ธ์ ๊ฐ์ง Pod์ ์ ํ
template:
metadata:
labels:
app: httpbin # Pod ํ
ํ๋ฆฟ์๋ ๋์ผํ ๋ ์ด๋ธ ์ถ๊ฐ (ํ์)
spec:
containers:
- name: httpbin # ์ปจํ
์ด๋ ์ด๋ฆ
image: kennethreitz/httpbin # HTTP ์์ฒญ ํ
์คํธ์ฉ ์ปจํ
์ด๋ ์ด๋ฏธ์ง
ports:
- containerPort: 80 # ์ปจํ
์ด๋ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ํฌํธ (์๋น์ค ์ฐ๊ฒฐ์ ์ฌ์ฉ)
๋ฐฐํฌ ํ Pod ๋ชฉ๋ก์ ํ์ธํ๋ฉด, Istio Sidecar๊ฐ ์๋์ผ๋ก ์ถ๊ฐ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
kubectl get pods
์ถ๋ ฅ ์์
NAME READY STATUS RESTARTS AGE
httpbin-5c78cd57db-2lz7x 2/2 Running 0 30s
๐ก READY ์ด์ 2/2๋ผ๊ณ ํ์๋๋ ๊ฒ์ Envoy Sidecar๊ฐ ์๋์ผ๋ก ์ฃผ์ ๋์์์ ์๋ฏธํฉ๋๋ค.
โ 2.3 ์๋์ผ๋ก Sidecar๊ฐ ํฌํจ๋์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Pod์ ์ปจํ ์ด๋ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
kubectl get pod httpbin-5c78cd57db-2lz7x -o jsonpath='{.spec.containers[*].name}'
์ถ๋ ฅ ์์
httpbin istio-proxy
๐ก istio-proxy ์ปจํ ์ด๋๊ฐ ์ถ๊ฐ๋์์ผ๋ฉด, Istio์ Envoy Sidecar๊ฐ ์๋์ผ๋ก ์ฃผ์ ๋ ๊ฒ์ ๋๋ค.
๐น 3. Sidecar ์๋ ์ฃผ์ ๋ฐฉ๋ฒ (์ต์ )
โ 3.1 ์๋์ผ๋ก Sidecar ์ฃผ์ ํ๊ธฐ
Sidecar ์๋ ์ฃผ์
์ ์ฌ์ฉํ์ง ์๊ณ ,
์๋์ผ๋ก Istio Sidecar๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด istioctl kube-inject ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
kubectl apply -f <(istioctl kube-inject -f httpbin-deployment.yaml)
์ค๋ช :
- istioctl kube-inject -f httpbin-deployment.yaml
โ ๊ธฐ์กด Deployment YAML์ Sidecar ์ปจํ ์ด๋๋ฅผ ์ฃผ์ ํ ํ ๋ฐฐํฌ
โ 3.2 Sidecar ์๋ ์ฃผ์ ํ์ธ
์๋์ผ๋ก Sidecar๋ฅผ ์ฃผ์ ํ ๊ฒฝ์ฐ์๋ kubectl get pods ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
kubectl get pods
์ถ๋ ฅ ์์
NAME READY STATUS RESTARTS AGE
httpbin-5c78cd57db-2lz7x 2/2 Running 0 30s
๐ก ์๋ ์ฃผ์ ๊ณผ ๋์ผํ๊ฒ 2/2 ์ํ๋ก ํ์๋ฉ๋๋ค.
๐น 4. Sidecar ์ ๊ฑฐ ๋ฐ ๋ค์์คํ์ด์ค ์ค์ ๋ณ๊ฒฝ
โ 4.1 ํน์ ๋ค์์คํ์ด์ค์์ Sidecar ์๋ ์ฃผ์ ๋นํ์ฑํ
ํน์ ๋ค์์คํ์ด์ค์์ Sidecar ์๋ ์ฃผ์
์ ๋นํ์ฑํํ๋ ค๋ฉด,
๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ด๋ธ์ ์ ๊ฑฐํ๋ฉด ๋ฉ๋๋ค.
kubectl label namespace default istio-injection-
์ค๋ช :
- istio-injection- โ ๊ธฐ์กด ๋ค์์คํ์ด์ค์์ Sidecar ์๋ ์ฃผ์ ์ค์ ์ ๊ฑฐ
์ด์ default ๋ค์์คํ์ด์ค์์ ์์ฑ๋๋ Pod๋ ์๋์ผ๋ก Sidecar๋ฅผ ํฌํจํ์ง ์์ต๋๋ค.
โ 4.2 ๊ธฐ์กด Pod์์ Sidecar ์ ๊ฑฐ
์ด๋ฏธ Sidecar๊ฐ ํฌํจ๋ Pod์์ Envoy Proxy๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด,
๊ธฐ์กด Pod๋ฅผ ์ญ์ ํ๊ณ ์๋ก ์์ฑํด์ผ ํฉ๋๋ค.
kubectl delete pod -n default --all
๊ทธ๋ฐ ๋ค์ ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ๋ฐฐํฌํ๋ฉด,
์๋กญ๊ฒ ์์ฑ๋ Pod์๋ Sidecar๊ฐ ํฌํจ๋์ง ์์ต๋๋ค.
๐ ๊ฒฐ๋ก
- **Sidecar(์ฌ์ด๋์นด)**๋ Istio์ ํ๋ก์ ์ปจํ ์ด๋๋ก, ํธ๋ํฝ ์ ์ด, ๋ณด์, ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
- **Sidecar ์๋ ์ฃผ์ (Auto Injection)**์ ํ์ฑํํ๋ฉด, Pod๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก Envoy Proxy๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
- kubectl label namespace <๋ค์์คํ์ด์ค> istio-injection=enabled ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ค์์คํ์ด์ค์ ๋ํด ์๋ ์ฃผ์ ์ ์ค์ ํ ์ ์์ต๋๋ค.
- ์๋ ์ฃผ์ (Manual Injection) ๋ฐฉ๋ฒ๋ ์์ผ๋ฉฐ, istioctl kube-inject๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ Pod์ Sidecar๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- Sidecar ์๋ ์ฃผ์ ์ ๋นํ์ฑํํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์คํ์ด์ค์ ๋ ์ด๋ธ์ ์ ๊ฑฐํ๊ณ Pod๋ฅผ ์ฌ๋ฐฐํฌํด์ผ ํฉ๋๋ค.