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, ๋ณผ๋ฅจ์ด๋ค.