๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ค๋ฃน๋๋ค.
Istio๋ ์๋น์ค ๋ฉ์๋ฅผ ๊ด๋ฆฌํ๋ ๋ค์ํ ์ปดํฌ๋ํธ๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ,
๊ฐ ์ปดํฌ๋ํธ๋ ํธ๋ํฝ ๊ด๋ฆฌ, ๋ณด์, ๋ชจ๋ํฐ๋ง ๋ฑ ํน์ ์ญํ ์ ์ํํฉ๋๋ค.
์ด ๊ธ์์๋ Pilot, Envoy, Citadel, Galley์ ์ญํ ์ ์ค๋ช
ํ๊ณ ,
๊ฐ ๊ตฌ์ฑ ์์๊ฐ ์๋น์ค ๋ฉ์ ๋ด๋ถ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๐น 1. Istio ์ฃผ์ ๊ตฌ์ฑ ์์
โ 1.1 Istio์ ๊ธฐ๋ณธ ์ํคํ ์ฒ
Istio๋ ํฌ๊ฒ ๋ ๊ฐ์ง ํ๋ ์ธ(Plane)์ผ๋ก ๋๋ฉ๋๋ค.
- ์ปจํธ๋กค ํ๋ ์ธ (Control Plane): Istio์ ์ ์ฒด ๋คํธ์ํฌ ์ ์ฑ ์ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ ํ๋ ์ธ (Data Plane): ์๋น์ค ๊ฐ ํธ๋ํฝ์ ์ฒ๋ฆฌ
์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ธ์ ๊ฐ๊ฐ ์๋์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
ํ๋ ์ธ | ๊ตฌ์ฑ ์์ | ์ญํ |
์ปจํธ๋กค ํ๋ ์ธ | Pilot | ํธ๋ํฝ ๋ผ์ฐํ ๊ด๋ฆฌ ๋ฐ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ |
Citadel | ์๋น์ค ๊ฐ ๋ณด์ ๋ฐ ์ธ์ฆ (mTLS) ๊ด๋ฆฌ | |
Galley | Istio์ ์ ์ฑ ๋ฐ ์ค์ ๊ด๋ฆฌ | |
๋ฐ์ดํฐ ํ๋ ์ธ | Envoy | ํ๋ก์ ์ญํ , ํธ๋ํฝ ์ ์ด ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ |
๐น 2. ๋ฐ์ดํฐ ํ๋ ์ธ ๊ตฌ์ฑ ์์
โ 2.1 Envoy: Istio์ ํ๋ก์ (Proxy) ์ญํ
Envoy๋ Istio์ ๋ฐ์ดํฐ ํ๋ ์ธ์ ๋ด๋นํ๋ ํ๋ก์์
๋๋ค.
๊ฐ ์๋น์ค์ ์ฌ์ด๋์นด(Sidecar) ํํ๋ก ๋ฐฐํฌ๋์ด, ์๋น์ค ๊ฐ ํต์ ์ ๊ด๋ฆฌํ๊ณ ๋ณดํธํ๋ ์ญํ ์ ํฉ๋๋ค.
Envoy์ ์ฃผ์ ๊ธฐ๋ฅ
- ํธ๋ํฝ ๋ผ์ฐํ : ์๋น์ค ๊ฐ ์์ฒญ์ ๋ผ์ฐํ ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ
- ๋ณด์ (mTLS): ์๋น์ค ๊ฐ ์ํธํ๋ ํต์ ์ ์ํ
- ํธ๋ํฝ ์ ์ด: ์ํท ๋ธ๋ ์ด์ปค, ๋ฆฌํธ๋ผ์ด, ํ์์์ ์ค์ ๊ฐ๋ฅ
- ๋ถ์ฐ ์ถ์ : Jaeger, Zipkin๊ณผ ๊ฐ์ ํด๊ณผ ์ฐ๋ํ์ฌ ํธ๋ํฝ ํ๋ฆ ์ถ์
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-service
spec:
host: my-service
trafficPolicy:
loadBalancer:
simple: LEAST_CONN # ์ต์ ์ฐ๊ฒฐ๋ ์๋ฒ๋ก ํธ๋ํฝ ๋ถ๋ฐฐ
์ค๋ช :
- DestinationRule: ํธ๋ํฝ์ ์ ์ดํ๋ ๊ท์น์ ์ค์
- loadBalancer.simple: ํธ๋ํฝ์ ์ต์ ์ฐ๊ฒฐ๋ ์๋ฒ๋ก ๋ณด๋ด๋ ์ค์
๐น 3. ์ปจํธ๋กค ํ๋ ์ธ ๊ตฌ์ฑ ์์
โ 3.1 Pilot: Istio์ ํธ๋ํฝ ์ปจํธ๋กค๋ฌ
Pilot์ Istio์ ์ปจํธ๋กค ํ๋ ์ธ์์ ํธ๋ํฝ ํ๋ฆ์ ์ ์ดํ๋ ์ญํ ์ ํฉ๋๋ค.
์๋น์ค ๊ฐ ํธ๋ํฝ ๋ผ์ฐํ
์ ์ค์ ํ๊ณ , Envoy ํ๋ก์์ ํธ๋ํฝ ๊ท์น์ ์ ๋ฌํฉ๋๋ค.
Pilot์ ์ฃผ์ ๊ธฐ๋ฅ
- ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ: Kubernetes ์๋น์ค ๋ชฉ๋ก์ ๊ฐ์ง
- ํธ๋ํฝ ๋ผ์ฐํ : VirtualService๋ฅผ ํตํด ํธ๋ํฝ ํ๋ฆ์ ์ค์
- ๋ก๋ ๋ฐธ๋ฐ์ฑ: Envoy์๊ฒ ํธ๋ํฝ ๋ถ๋ฐฐ ์ ์ฑ ์ ๋ฌ
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
subset: v1
weight: 80 # 80%์ ํธ๋ํฝ์ v1์ผ๋ก ์ ๋ฌ
- destination:
host: my-service
subset: v2
weight: 20 # 20%์ ํธ๋ํฝ์ v2๋ก ์ ๋ฌ
์ค๋ช :
- VirtualService: ํธ๋ํฝ์ ํน์ ์๋น์ค๋ก ๋ผ์ฐํ ํ๋ ์ญํ
- weight: ํธ๋ํฝ์ ์ฌ๋ฌ ๋ฒ์ ์ ์๋น์ค์ ๋ถ๋ฐฐํ๋ ์ค์
โ 3.2 Citadel: ์๋น์ค ๋ณด์ ๋ฐ ์ธ์ฆ
Citadel์ Istio์ ๋ณด์ ๋ด๋น ์ปดํฌ๋ํธ๋ก,
์๋น์ค ๊ฐ mTLS ์ธ์ฆ์ ๊ด๋ฆฌํ๊ณ ๋ณด์ ์ ์ฑ
์ ์ ์ฉํฉ๋๋ค.
Citadel์ ์ฃผ์ ๊ธฐ๋ฅ
- mTLS ์ธ์ฆ: ์๋น์ค ๊ฐ ์ํธํ๋ ํต์ ์ ์ํ ์ธ์ฆ์ ๋ฐ๊ธ
- ์๋น์ค ID ๊ด๋ฆฌ: ์๋น์ค ๊ฐ์ ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ ๊ด๋ฆฌ
- RBAC(Role-Based Access Control): ๊ถํ ๊ด๋ฆฌ
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
spec:
mtls:
mode: STRICT # ๋ชจ๋ ์๋น์ค ๊ฐ ํธ๋ํฝ์ ์ํธํ (mTLS ์ ์ฉ)
์ค๋ช :
- PeerAuthentication: Istio์ ๋ณด์ ์ ์ฑ ์ ์ค์
- mode: STRICT: mTLS๋ฅผ ๊ฐ์ ์ ์ฉํ์ฌ ๋ชจ๋ ์๋น์ค ๊ฐ ํต์ ์ ์ํธํ
โ 3.3 Galley: Istio์ ์ ์ฑ ๋ฐ ์ค์ ๊ด๋ฆฌ
Galley๋ Istio์ ๊ตฌ์ฑ ํ์ผ์ ๊ด๋ฆฌํ๊ณ , ์ปจํธ๋กค ํ๋ ์ธ์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
Galley์ ์ฃผ์ ๊ธฐ๋ฅ
- Kubernetes ์ค์ ํ์ผ์ ์์งํ์ฌ Istio์ ์ ์ฉ
- ์ ์ฑ ์ ๊ฒ์ฆํ๊ณ ์ ํจ์ฑ์ ํ์ธ
- ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋๊ธฐํํ์ฌ ์ง์์ ์ธ ์ ์ฑ ์ ์ฉ
Galley๋ Istio 1.5 ์ดํ๋ถํฐ ๊ธฐ๋ฅ์ด istiod์ ํตํฉ๋์์ง๋ง,
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฑ
๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
๐น 4. Istio ๊ตฌ์ฑ ์์ ๊ฐ์ ์ํธ์์ฉ
โ 4.1 Istio์ ์ฃผ์ ๊ตฌ์ฑ ์์ ๊ฐ ๊ด๊ณ
Istio๋ ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ธ์ด ํ๋ ฅํ์ฌ ์๋น์ค ๋ฉ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- Pilot → Envoy: Pilot์ด Envoy์ ํธ๋ํฝ ๋ผ์ฐํ ๊ท์น์ ์ ๋ฌ
- Citadel → Envoy: Citadel์ด Envoy์ mTLS ์ธ์ฆ์๋ฅผ ์ ๊ณต
- Galley → Pilot & Citadel: Galley๊ฐ Istio์ ์ ์ฑ ๋ฐ ์ค์ ์ ๊ด๋ฆฌ
์ด๋ ๊ฒ ๊ฐ ์์๊ฐ ์๋ก ํ๋ ฅํ์ฌ, ์๋น์ค ๋ฉ์ ๋ด์์ ํธ๋ํฝ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ,
๋ณด์์ ๊ฐํํ๋ฉฐ, ์ด์์ ์ต์ ํํฉ๋๋ค.
๐ ๊ฒฐ๋ก
- Envoy๋ ๋ฐ์ดํฐ ํ๋ ์ธ์์ ์๋น์ค ๊ฐ์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ํ๋ก์ ์ญํ ์ ํฉ๋๋ค.
- Pilot์ ์ปจํธ๋กค ํ๋ ์ธ์์ ํธ๋ํฝ ๋ผ์ฐํ ์ ๊ด๋ฆฌํ๊ณ Envoy์ ํธ๋ํฝ ๊ท์น์ ์ ๋ฌํฉ๋๋ค.
- Citadel์ ์๋น์ค ๊ฐ ๋ณด์์ ๊ฐํํ๊ณ mTLS ์ธ์ฆ์ ์ ๊ณตํฉ๋๋ค.
- Galley๋ Istio์ ์ค์ ๊ณผ ์ ์ฑ ์ ๊ด๋ฆฌํ๋ฉฐ, ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋๊ธฐํํฉ๋๋ค.
- ์ด ๋ชจ๋ ๊ตฌ์ฑ ์์๋ค์ด ํ๋ ฅํ์ฌ Istio์ ์๋น์ค ๋ฉ์๋ฅผ ์์ฑํฉ๋๋ค.