Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.9] 2๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ #3 | Istio Gateway ์‹ค์ „ ์˜ˆ์ œ: Ingress ๋ฐ Egress ํŠธ๋ž˜ํ”ฝ ์ œ์–ด

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

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์˜ Gateway๋ฅผ ํ™œ์šฉํ•˜์—ฌ Ingress ๋ฐ Egress ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
Ingress Gateway๋Š” ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜๋ฉฐ,
Egress Gateway๋Š” ๋‚ด๋ถ€ ์„œ๋น„์Šค์—์„œ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” Ingress Gateway์™€ Egress Gateway์˜ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ ,
์‹ค์ œ YAML ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Istio์˜ Gateway ๊ฐœ๋…

โœ… 1.1 Ingress Gateway๋ž€?

Ingress Gateway๋Š” ์™ธ๋ถ€์—์„œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” Istio ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.
Kubernetes์˜ ๊ธฐ๋ณธ Ingress ๋ฆฌ์†Œ์Šค๋ณด๋‹ค **๋” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ(L7 ๊ธฐ๋ฐ˜ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…, TLS/HTTPS ์ ์šฉ, ์„ธ๋ฐ€ํ•œ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ)**์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Ingress Gateway์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…
  • VirtualService์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ตํ•œ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ๊ฐ€๋Šฅ
  • TLS/HTTPS ์ธ์ฆ์„ ํ†ตํ•ด ๋ณด์•ˆ ๊ฐ•ํ™”

โœ… 1.2 Egress Gateway๋ž€?

Egress Gateway๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” Istio ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.
๋ณดํ†ต ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์˜ ์„œ๋น„์Šค๊ฐ€ ์™ธ๋ถ€ API ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Egress Gateway์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ์ค‘์•™์—์„œ ์ œ์–ด
  • DNS ๊ธฐ๋ฐ˜์˜ ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๋ณด์•ˆ ์„ค์ • ๊ฐ€๋Šฅ
  • ์ธํ„ฐ๋„ท ํŠธ๋ž˜ํ”ฝ ๋ฐ ์™ธ๋ถ€ API ํ†ต์‹  ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ

๐Ÿ”น 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 ๋ฆฌ์†Œ์Šค ์ •์˜
  • port.number: 80 โ†’ HTTP 80 ํฌํŠธ์—์„œ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ์ˆ˜์‹ 
  • hosts: "*" โ†’ ๋ชจ๋“  ๋„๋ฉ”์ธ ํ—ˆ์šฉ

โœ… 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  # ๋‚ด๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์ˆ˜์‹ ํ•˜๋Š” ํฌํŠธ

์„ค๋ช…:

  • /api ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์€ ๋‚ด๋ถ€ ์„œ๋น„์Šค my-service๋กœ ์ „๋‹ฌ๋จ

โœ… 2.3 TLS/HTTPS ์ ์šฉ Ingress Gateway ์„ค์ •

TLS๋ฅผ ์ ์šฉํ•˜์—ฌ HTTPS ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Ingress Gateway ์„ค์ •์ž…๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-secure-ingress
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 443  # HTTPS ํฌํŠธ
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE  # HTTPS ์‚ฌ์šฉ
        credentialName: my-tls-secret  # Secret์—์„œ TLS ์ธ์ฆ์„œ ๋กœ๋“œ
      hosts:
        - "example.com"  # ํŠน์ • ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด์„œ๋งŒ HTTPS ์ ์šฉ

์„ค๋ช…:

  • tls.mode: SIMPLE โ†’ TLS๋ฅผ ์ ์šฉํ•˜์—ฌ HTTPS ํ™œ์„ฑํ™”
  • credentialName: my-tls-secret โ†’ Kubernetes Secret์—์„œ TLS ์ธ์ฆ์„œ๋ฅผ ๋กœ๋“œ
  • hosts: "example.com" โ†’ ํŠน์ • ๋„๋ฉ”์ธ(example.com)์—๋งŒ HTTPS ์ ์šฉ

๐Ÿ”น 3. Egress Gateway ์„ค์ •

โœ… 3.1 Egress Gateway ๊ธฐ๋ณธ ์„ค์ •

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” Egress Gateway๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‚ด๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์™ธ๋ถ€ API์— ์ ‘๊ทผํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway  # Istio Egress Gateway ๋ฆฌ์†Œ์Šค ์ •์˜
metadata:
  name: my-egress-gateway
spec:
  selector:
    istio: egressgateway  # Istio์˜ Egress Gateway ์‚ฌ์šฉ
  servers:
    - port:
        number: 443  # HTTPS ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ
        name: https
        protocol: HTTPS
      hosts:
        - "*.external.com"  # ํŠน์ • ๋„๋ฉ”์ธ์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉ

์„ค๋ช…:

  • Gateway โ†’ Egress ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” Istio ๋ฆฌ์†Œ์Šค
  • port.number: 443 โ†’ HTTPS ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •
  • hosts: "*.external.com" โ†’ ํŠน์ • ๋„๋ฉ”์ธ(external.com)์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๋งŒ ํ—ˆ์šฉ

โœ… 3.2 Egress Gateway + VirtualService ์„ค์ •

Egress Gateway๋ฅผ ์„ค์ •ํ•œ ํ›„, VirtualService๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋„๋ฉ”์ธ์œผ๋กœ์˜ ํŠธ๋ž˜ํ”ฝ์„ Egress Gateway๋กœ ๋ณด๋‚ด๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: allow-external
spec:
  hosts:
    - "*.external.com"  # ์™ธ๋ถ€ API ๋„๋ฉ”์ธ
  gateways:
    - my-egress-gateway  # ์œ„์—์„œ ์ƒ์„ฑํ•œ Egress Gateway ์‚ฌ์šฉ
  http:
    - match:
        - uri:
            prefix: "/api"  # "/api" ๊ฒฝ๋กœ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์š”์ฒญ๋งŒ ํ—ˆ์šฉ
      route:
        - destination:
            host: "*.external.com"
            port:
              number: 443

์„ค๋ช…:

  • hosts: "*.external.com" โ†’ ํŠน์ • ๋„๋ฉ”์ธ์œผ๋กœ๋งŒ Egress ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ
  • match.uri.prefix: "/api" โ†’ ํŠน์ • API ๊ฒฝ๋กœ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์š”์ฒญ๋งŒ ํ—ˆ์šฉ

๐Ÿ“Œ ๊ฒฐ๋ก 

  • Ingress Gateway๋Š” ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, VirtualService์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Ingress Gateway์—์„œ TLS/HTTPS๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Egress Gateway๋Š” ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ํŠน์ • ๋„๋ฉ”์ธ ๋ฐ API ์š”์ฒญ๋งŒ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • VirtualService์™€ ์กฐํ•ฉํ•˜์—ฌ, Ingress ๋ฐ Egress ํŠธ๋ž˜ํ”ฝ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

728x90
๋Œ“๊ธ€์ˆ˜0