1. ๊ฐœ์š”

Service ๋งŒ์œผ๋กœ๋„ ์™ธ๋ถ€์— ๋…ธ์ถœ์€ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋น„์Šค๋งˆ๋‹ค ์™ธ๋ถ€ IP ์™€ ํฌํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐจ์ง€ํ•˜๊ณ , ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด๋‚˜ ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ๋‚˜๋ˆ„๋Š” ์ผ, TLS ์ธ์ฆ์„œ ์ฒ˜๋ฆฌ๋Š” Service ๊ฐ€ ํ•ด ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์ด ์ผ์€ HTTP ๋ฅผ ์ดํ•ดํ•˜๋Š” ํ”„๋ก์‹œ๊ฐ€ ํ•ด์•ผ ํ•œ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€๋Š” ์ธํ”„๋ผ ๊ธฐ์ดˆ 2 - ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€์— ์ ์—ˆ๊ณ , ์ด ๊ธ€์€ ๊ทธ๊ฒƒ์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ์—์„œ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


2. ํ•ต์‹ฌ ๋‚ด์šฉ

2-1. ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋Š” ๊ธธ

flowchart LR
    C[ํด๋ผ์ด์–ธํŠธ] --> LB[์™ธ๋ถ€ ์ง„์ž…์ <br/>LoadBalancer]
    LB --> P[ํ”„๋ก์‹œ Pod<br/>Envoy, nginx ๋“ฑ]
    P -->|ํ˜ธ์ŠคํŠธยท๊ฒฝ๋กœ ๊ทœ์น™| S1[Service a]
    P --> S2[Service b]
    S1 --> A[Pod]
    S2 --> B[Pod]

์‹ค์ œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›๋Š” ๊ฒƒ์€ ํ”„๋ก์‹œ Pod ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ํ•˜๋Š” ์ผ์€ โ€œ์–ด๋–ค ํ˜ธ์ŠคํŠธ์™€ ๊ฒฝ๋กœ๋ฅผ ์–ด๋А Service ๋กœ ๋ณด๋‚ผ์ง€โ€ ๋ผ๋Š” ๊ทœ์น™์„ ๋ฆฌ์†Œ์Šค๋กœ ๋ฐ›์•„ ๊ทธ ํ”„๋ก์‹œ์˜ ์„ค์ •์œผ๋กœ ๋ฐ”๊ฟ” ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. 1ํŽธ์˜ ์„ ์–ธ๊ณผ ์กฐ์ •์ด ์—ฌ๊ธฐ์„œ๋„ ๊ทธ๋Œ€๋กœ๋‹ค.

2-2. Ingress ์™€ ๊ทธ ํ•œ๊ณ„

Ingress ๋Š” ์ด ๊ทœ์น™์„ ๋‹ด๋Š” ์˜ค๋ž˜๋œ ๋ฆฌ์†Œ์Šค๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
spec:
  tls:
    - hosts: [example.com]
      secretName: web-tls
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port: { number: 80 }

Ingress ์ž์ฒด๋Š” ๊ทœ์น™๋งŒ ์ ์„ ๋ฟ์ด๊ณ , ์‹ค์ œ ๋™์ž‘์€ ๋ณ„๋„๋กœ ์„ค์น˜ํ•œ Ingress ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•œ๋‹ค. ํ•œ๊ณ„๋Š” ํ‘œํ˜„๋ ฅ์ด๋‹ค. ํ‘œ์ค€ ํ•„๋“œ์—๋Š” ํ˜ธ์ŠคํŠธ์™€ ๊ฒฝ๋กœ ๋งค์นญ ์ •๋„๋งŒ ์žˆ์–ด์„œ, ํ—ค๋” ๋งค์นญ์ด๋‚˜ ๊ฐ€์ค‘์น˜ ๋ถ„์‚ฐ, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ฐ™์€ ๊ฒƒ์€ ๊ตฌํ˜„์ฒด๋ณ„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ํ‘ผ๋‹ค. ๊ทธ ์–ด๋…ธํ…Œ์ด์…˜์€ ์ปจํŠธ๋กค๋Ÿฌ๋งˆ๋‹ค ๋‹ฌ๋ผ์„œ ์ด์‹์ด ์•ˆ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ๋ฆฌ์†Œ์Šค์— ์ธํ”„๋ผ ๋‹ด๋‹น์ž์˜ ๊ด€์‹ฌ์‚ฌ(์ง„์ž…์ , ์ธ์ฆ์„œ)์™€ ์•ฑ ๋‹ด๋‹น์ž์˜ ๊ด€์‹ฌ์‚ฌ(๊ฒฝ๋กœ ๊ทœ์น™)๊ฐ€ ์„ž์—ฌ ์žˆ๋‹ค.

2-3. Gateway API ์˜ ์—ญํ•  ๋ถ„๋ฆฌ

Gateway API ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋ฆฌ์†Œ์Šค๋ฅผ ์ชผ๊ฐœ์„œ ํ‘ผ๋‹ค.

๋ฆฌ์†Œ์Šค๋ˆ„๊ฐ€๋ฌด์—‡์„
GatewayClass์ธํ”„๋ผ ์ œ๊ณต์ž์–ด๋–ค ๊ตฌํ˜„์ฒด(์ปจํŠธ๋กค๋Ÿฌ)๋ฅผ ์“ฐ๋Š”๊ฐ€
Gatewayํด๋Ÿฌ์Šคํ„ฐ ์šด์˜์ž์–ด๋–ค ํฌํŠธยทํ”„๋กœํ† ์ฝœ๋กœ ๋ฐ›๊ณ  TLS ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€
HTTPRoute์•ฑ ๊ฐœ๋ฐœ์žํ˜ธ์ŠคํŠธยท๊ฒฝ๋กœยทํ—ค๋”๋ฅผ ์–ด๋А Service ๋กœ ๋ณด๋‚ผ๊นŒ
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: web
spec:
  parentRefs:
    - name: main-gateway      # ๋ถ™์„ Gateway
  hostnames: [example.com]
  rules:
    - matches:
        - path: { type: PathPrefix, value: / }
      backendRefs:
        - name: web
          port: 80

์•ฑ ํŒ€์€ HTTPRoute ๋งŒ ๊ณ ์น˜๋ฉด ๋˜๊ณ , ์ง„์ž…์ ๊ณผ ์ธ์ฆ์„œ๋Š” Gateway ์—์„œ ํ•œ ๋ฒˆ ์ •ํ•œ๋‹ค. ํ—ค๋” ๋งค์นญ๊ณผ ๊ฐ€์ค‘์น˜ ๋ถ„์‚ฐ๋„ ํ‘œ์ค€ ํ•„๋“œ๋กœ ์žˆ์–ด์„œ ์–ด๋…ธํ…Œ์ด์…˜์— ๊ธฐ๋Œ€์ง€ ์•Š๋Š”๋‹ค. ์ด๊ด€ ๊ณผ์ •์€ DoEatFit k3s ์šด์˜๊ธฐ 1 - ๋‹จ์ผ ์„œ๋ฒ„์—์„œ k3s๋กœ์—์„œ Nginx Proxy Manager ๋ฅผ Envoy Gateway ๋กœ ์˜ฎ๊ธด ๋ถ€๋ถ„์— ๋‚˜์˜จ๋‹ค.

2-4. TLS ์ข…๋ฃŒ

TLS ์ข…๋ฃŒ๋Š” ํ”„๋ก์‹œ๊ฐ€ HTTPS ๋ฅผ ํ’€๊ณ  ์•ˆ์ชฝ์€ ํ‰๋ฌธ HTTP ๋กœ Service ์— ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค. Gateway ์˜ ๋ฆฌ์Šค๋„ˆ์— ์ธ์ฆ์„œ๊ฐ€ ๋“  Secret ์„ ์ง€์ •ํ•˜๋ฉด ๊ทธ ์ง€์ ์—์„œ ์ข…๋ฃŒ๋œ๋‹ค. ์•ฑ์€ ์ธ์ฆ์„œ๋ฅผ ๋ชฐ๋ผ๋„ ๋˜๊ณ , ๊ฐฑ์‹ ๋„ ํ•œ๊ณณ์—์„œ ํ•œ๋‹ค. ์•ˆ์ชฝ ๊ตฌ๊ฐ„ ์•”ํ˜ธํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๊ทธ๋•Œ ๋”ฐ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

2-5. ์–ด๋””์„œ ์‹ค์ˆ˜ํ•˜๋‚˜

  • ์ปจํŠธ๋กค๋Ÿฌ ์—†์ด Ingress ๋งŒ ๋งŒ๋“ ๋‹ค. ๋ฆฌ์†Œ์Šค๋Š” ์ƒ๊ธฐ์ง€๋งŒ ์•„๋ฌด ์ผ๋„ ์•ˆ ์ผ์–ด๋‚œ๋‹ค.
  • HTTPRoute ๊ฐ€ Gateway ์— ๋ถ™์—ˆ๋Š”์ง€(parentRefs, ํ—ˆ์šฉ ๋„ค์ž„์ŠคํŽ˜์ด์Šค) ์ƒํƒœ๋ฅผ ์•ˆ ๋ณธ๋‹ค. ๋ฆฌ์†Œ์Šค status ์— Accepted ์—ฌ๋ถ€๊ฐ€ ๋‚˜์˜จ๋‹ค.
  • ๋ฐฑ์—”๋“œ Service ์— readiness ๋ฅผ ํ†ต๊ณผํ•œ Pod ๊ฐ€ ์—†์–ด์„œ 502/503 ์ด ๋‚˜๋Š”๋ฐ ํ”„๋ก์‹œ๋ฅผ ์˜์‹ฌํ•œ๋‹ค. 4ํŽธ์˜ EndpointSlice ๋ถ€ํ„ฐ ๋ณธ๋‹ค.

3. ๋งˆ๋ฌด๋ฆฌ

์š”์•ฝ

  • ์™ธ๋ถ€ HTTP ์š”์ฒญ์€ ํ”„๋ก์‹œ Pod ๊ฐ€ ๋ฐ›๊ณ , ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค๋Š” ๊ทธ ํ”„๋ก์‹œ์˜ ๋ผ์šฐํŒ… ๊ทœ์น™์„ ์„ ์–ธํ•œ๋‹ค.
  • Ingress ๋Š” ํ‘œ์ค€ ํ‘œํ˜„๋ ฅ์ด ์ข์•„ ์–ด๋…ธํ…Œ์ด์…˜์— ์˜์กดํ•˜๊ณ , ๊ด€์‹ฌ์‚ฌ๊ฐ€ ํ•œ ๋ฆฌ์†Œ์Šค์— ์„ž์ธ๋‹ค.
  • Gateway API ๋Š” GatewayClass, Gateway, HTTPRoute ๋กœ ์ธํ”„๋ผ ์ œ๊ณต์ž, ์šด์˜์ž, ์•ฑ ๊ฐœ๋ฐœ์ž์˜ ์—ญํ• ์„ ๋‚˜๋ˆˆ๋‹ค.
  • TLS ๋Š” Gateway ์—์„œ ์ข…๋ฃŒํ•˜๊ณ , ์•ฑ์€ ํ‰๋ฌธ HTTP ๋งŒ ๋ฐ›๋Š”๋‹ค.

๋‹ค์Œ์€ Kubernetes ๊ธฐ์ดˆ 6 - ConfigMap, Secret, ๋ณผ๋ฅจ์ด๋‹ค.