[Istio ๊ฐ์ด๋ ep.7] 2๋ถ ํธ๋ํฝ ๊ด๋ฆฌ #1 | Ingress Gateway๋? ์ธ๋ถ ํธ๋ํฝ์ ์์ ํ๊ฒ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ 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๋ฅผ ์ค์ ํ๋ฉด ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.