Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.7] 2๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ #1 | Ingress Gateway๋ž€? ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

ygtoken 2025. 3. 18. 11:38
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” 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๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
728x90