๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ Ingress Gateway๋ฅผ ํ์ฉํ์ฌ ์ธ๋ถ ํธ๋ํฝ์ ์์ ํ๊ฒ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Ingress Gateway๋ ์ธ๋ถ์์ ํด๋ฌ์คํฐ ๋ด๋ถ๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ์ ์ดํ๋ฉฐ,
๊ธฐ๋ณธ์ ์ธ Kubernetes Ingress๋ณด๋ค ๋ ์ธ๋ฐํ ํธ๋ํฝ ์ ์ด์ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ด ๊ธ์์๋ Ingress Gateway์ ๊ฐ๋ , ๊ธฐ๋ณธ ์ค์ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ VirtualService์ ์ฐ๊ณํ์ฌ ํธ๋ํฝ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
๐น 1. Ingress Gateway๋?
โ 1.1 Ingress Gateway ๊ฐ๋
Ingress Gateway๋ ์ธ๋ถ์์ Kubernetes ํด๋ฌ์คํฐ๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ๊ด๋ฆฌํ๋ Istio์ ๋คํธ์ํฌ ๋ฆฌ์์ค์
๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Kubernetes์ Ingress Controller์ ์ ์ฌํ ์ญํ ์ ํ์ง๋ง,
Istio์ Ingress Gateway๋ ๋ณด๋ค ๊ฐ๋ ฅํ ํธ๋ํฝ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Ingress Gateway์ ์ฃผ์ ๊ธฐ๋ฅ
- ์ธ๋ถ ํธ๋ํฝ์ ๋ด๋ถ ์๋น์ค๋ก ์์ ํ๊ฒ ๋ผ์ฐํ
- VirtualService์ ํจ๊ป ์ฌ์ฉํ์ฌ ํธ๋ํฝ ์ ์ด
- TLS/HTTPS ์ธ์ฆ์ ํตํด ๋ณด์ ๊ฐํ
- L7 ๊ธฐ๋ฐ ํธ๋ํฝ ์ ์ฑ ์ ์ฉ ๊ฐ๋ฅ (์: ํน์ ๊ฒฝ๋ก๋ณ ๋ผ์ฐํ , CORS ์ค์ ๋ฑ)
โ 1.2 Ingress Gateway vs Kubernetes Ingress
Kubernetes์ ๊ธฐ๋ณธ Ingress์ Istio์ Ingress Gateway๋ ์ญํ ์ด ๋น์ทํ์ง๋ง,
Istio๋ ๋ ๊ฐ๋ ฅํ ํธ๋ํฝ ์ ์ด ๊ธฐ๋ฅ๊ณผ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ฅ ๋น๊ต | Kubernetes Ingress | Istio Ingress Gateway |
ํธ๋ํฝ ๊ด๋ฆฌ | ๊ธฐ๋ณธ์ ์ธ ํธ์คํธ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ๊ณต | L7 ๊ธฐ๋ฐ ํธ๋ํฝ ์ ์ด ๊ฐ๋ฅ |
๋ก๋ ๋ฐธ๋ฐ์ฑ | ๊ธฐ๋ณธ Kubernetes ์๋น์ค์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ฌ์ฉ | Istio์ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ค์ ๊ฐ๋ฅ |
๋ณด์ (TLS) | ๊ธฐ๋ณธ์ ์ธ TLS ์ค์ ๊ฐ๋ฅ | mTLS, JWT ์ธ์ฆ ๋ฑ ๊ณ ๊ธ ๋ณด์ ๊ธฐ๋ฅ ์ ๊ณต |
CORS ์ค์ | ์ง์ ์ค์ ์ด๋ ค์ | VirtualService๋ฅผ ํตํด ์์ฝ๊ฒ ์ ์ฉ ๊ฐ๋ฅ |
๐น 2. Ingress Gateway ์ค์ ๋ฐฉ๋ฒ
โ 2.1 Ingress Gateway ๊ธฐ๋ณธ ์ค์
๋จผ์ Ingress Gateway ๋ฆฌ์์ค๋ฅผ ์์ฑํ์ฌ, ์ธ๋ถ ํธ๋ํฝ์ ํ์ฉํ ํฌํธ๋ฅผ ์ค์ ํฉ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway # Istio Gateway ๋ฆฌ์์ค ์ ์
metadata:
name: my-ingress-gateway # Gateway ์ด๋ฆ
spec:
selector:
istio: ingressgateway # Istio Ingress Gateway ์ฌ์ฉ
servers:
- port:
number: 80 # HTTP 80๋ฒ ํฌํธ์์ ์์
name: http
protocol: HTTP
hosts:
- "*" # ๋ชจ๋ ๋๋ฉ์ธ ํ์ฉ (์: ํน์ ๋๋ฉ์ธ๋ง ํ์ฉ ๊ฐ๋ฅ)
์ค๋ช :
- Gateway → Istio์ Ingress Gateway ๋ฆฌ์์ค๋ฅผ ์ ์
- selector.istio: ingressgateway → Istio์ ๊ธฐ๋ณธ Ingress Gateway๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์
- port.number: 80 → HTTP 80 ํฌํธ์์ ์ธ๋ถ ํธ๋ํฝ์ ์์
- hosts: "*" → ๋ชจ๋ ๋๋ฉ์ธ์ ์์ฒญ์ ํ์ฉ (ํน์ ๋๋ฉ์ธ๋ง ํ์ฉํ๋ ค๋ฉด example.com์ฒ๋ผ ์ค์ ๊ฐ๋ฅ)
โ 2.2 Ingress Gateway + VirtualService ์ค์
Ingress Gateway๋ฅผ ์ค์ ํ ํ, VirtualService๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ํฝ์ ๋ด๋ถ ์๋น์ค๋ก ๋ผ์ฐํ ํฉ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService # ํธ๋ํฝ ๋ผ์ฐํ
์ค์
metadata:
name: my-service
spec:
hosts:
- "*" # ๋ชจ๋ ๋๋ฉ์ธ์ ์์ฒญ์ ์๋ฝ
gateways:
- my-ingress-gateway # ์์์ ์์ฑํ Gateway๋ฅผ ์ฌ์ฉ
http:
- match:
- uri:
prefix: "/api" # "/api" ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ ์์ฒญ์ my-service๋ก ๋ผ์ฐํ
route:
- destination:
host: my-service # ๋ด๋ถ ์๋น์ค ์ด๋ฆ
port:
number: 8080 # ๋ด๋ถ ์๋น์ค๊ฐ ์์ ํ๋ ํฌํธ
์ค๋ช :
- VirtualService → Gateway์ ์ฐ๊ณํ์ฌ ํธ๋ํฝ์ ๋ด๋ถ ์๋น์ค๋ก ๋ผ์ฐํ
- hosts: "*" → ๋ชจ๋ ๋๋ฉ์ธ์์ ์์ฒญ ํ์ฉ
- gateways: my-ingress-gateway → ์ด VirtualService๊ฐ ํน์ Gateway๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์
- match.uri.prefix: "/api" → "/api" ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ ํธ๋ํฝ๋ง ์ด ๊ท์น์ ์ ์ฉ
- destination.host: my-service → Istio๊ฐ ๋ด๋ถ์ my-service ์๋น์ค๋ก ํธ๋ํฝ์ ์ ๋ฌ
๐น 3. Ingress Gateway์ TLS ์ค์
โ 3.1 HTTPS๋ฅผ ํตํ ๋ณด์ ๊ฐํ (TLS ์ ์ฉ)
TLS๋ฅผ ์ฌ์ฉํ์ฌ HTTPS๋ฅผ ์ ์ฉํ๋ ค๋ฉด, ์ธ์ฆ์์ ํค๋ฅผ Secret์ผ๋ก ์ ์ฅํ ํ Gateway์์ TLS๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
โ TLS ์ธ์ฆ์ Secret ์์ฑ
kubectl create -n istio-system secret tls my-tls-secret \
--key tls.key \
--cert tls.crt
โก TLS ์ง์ Ingress Gateway ์ค์
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-secure-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443 # HTTPS ํฌํธ
name: https
protocol: HTTPS
tls:
mode: SIMPLE # HTTPS ์ฌ์ฉ (mTLS๋ MUTUAL)
credentialName: my-tls-secret # ์์์ ์์ฑํ TLS Secret ์ฌ์ฉ
hosts:
- "example.com" # ํน์ ๋๋ฉ์ธ์๋ง HTTPS ์ ์ฉ
์ค๋ช :
- tls.mode: SIMPLE → TLS๋ฅผ ์ ์ฉํ์ฌ HTTPS ํ์ฑํ
- credentialName: my-tls-secret → ์์์ ์์ฑํ TLS Secret์ ์ฌ์ฉ
- hosts: "example.com" → ํน์ ๋๋ฉ์ธ์ ๋ํด์๋ง HTTPS ์ ์ฉ
๐ ๊ฒฐ๋ก
- Istio์ Ingress Gateway๋ ์ธ๋ถ์์ ๋ด๋ถ๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ์ ์ดํ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- Kubernetes Ingress๋ณด๋ค ๊ฐ๋ ฅํ ํธ๋ํฝ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, L7 ๊ธฐ๋ฐ ๋ผ์ฐํ , TLS, mTLS, CORS ์ค์ ๋ฑ์ ์ง์ํฉ๋๋ค.
- Ingress Gateway + VirtualService ์กฐํฉ์ ์ฌ์ฉํ๋ฉด, ํธ๋ํฝ์ ํน์ ๊ฒฝ๋ก๋ณ๋ก ๋ผ์ฐํ ๊ฐ๋ฅํฉ๋๋ค.
- TLS ์ธ์ฆ์๋ฅผ ์ ์ฉํ์ฌ HTTPS๋ฅผ ์ค์ ํ๋ฉด ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.