[Kubernetes] ๐ Ingress์์ Gateway API๋ก: HTTPProxy vs HTTPRoute ๋น๊ต
์ฟ ๋ฒ๋คํฐ์ค์์ ์ฑ ํธ๋ํฝ์ ๋ผ์ฐํ ํ๋ ๋ฐฉ๋ฒ์ Ingress๋ก ์์ํด ๋ฒค๋๋ณ CRD๋ฅผ ๊ฑฐ์ณ ํ์ค Gateway API(HTTPRouteยทGRPCRoute)๋ก ์๋ ดํ๊ณ ์์ต๋๋ค. ์ด ๊ธ์์๋ ๊ทธ ์งํ์ ํ๋ฆ๊ณผ ํจ๊ป, ์ค์ (API)๊ณผ ์์ง(Envoy)์ด ๋ค๋ฅธ ์ธต์ด๋ผ๋ ํต์ฌ ๊ตฌ๋ถ, ๊ทธ๋ฆฌ๊ณ Contour ์ ์ฉ HTTPProxy vs ํ์ค HTTPRoute์ ์ฐจ์ด๋ฅผ ์ค๋ฌด ๊ด์ ์์ ์ ๋ฆฌํฉ๋๋ค.
์ด ์๋ฆฌ์ฆ๋ ์ฟ ๋ฒ๋คํฐ์ค gRPC ์ฝ์ง์์ ์ถ๋ฐํด HTTP/2ยทTLSยท๋ก๋๋ฐธ๋ฐ์ยทGateway APIยท์ธ์ฆ์๊น์ง ํ์ด๊ฐ๋ ๊ธฐ๋ก์ ๋๋ค. ์ด๋ฒ 5ํธ์ Ingress โ Gateway API ํธ์ ๋๋ค. ์์ 3ํธ(L4 vs L7), 4ํธ(ํธ๋ํฝ ๊ตฌ์กฐ)์ ๋จผ์ ๋ณด๋ฉด ์ข์ต๋๋ค.
๐งฉ ๋จผ์ : API(์ค์ )์ ์์ง(Envoy)์ ๋ค๋ฅธ ์ธต์ด๋ค #
IngressยทHTTPProxyยทGateway API๋ “์ค์ (API)“์ด๊ณ , Envoyยทnginx๋ ๊ทธ ์ค์ ์ ์คํํ๋ “์์ง"์ ๋๋ค. ์ด๊ฑธ ์ ๋๋๋ฉด “Gateway โ Envoy โ HTTPRoute” ์์ผ๋ก ๋จธ๋ฆฟ์์์ ๋ค ์์ ๋๋ค. ๋ ์ธต์ ๋ถ๋ฆฌํฉ์๋ค.
- API ์ธต (๋ด๊ฐ ์ฐ๋ ์ค์ ): Ingress, HTTPProxy, Gateway API(Gateway + HTTPRoute + GRPCRoute). “์ด๋ ๊ฒ ๋ผ์ฐํ ํด๋ผ"๋ผ๊ณ ์ ๋ ๋ฌธ์์ ๋๋ค.
- ๋ฐ์ดํฐ ํ๋ ์ธ ์์ง (์ค์ ๋ก ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ๊ฒ): Envoy(๋๋ nginx). ๋ด๊ฐ ์ ์ ์ค์ ๋๋ก ์ง์ง ํจํท์ ๋๋ฅด๋ ํ๋ก์์ ๋๋ค.
๐ก Envoy๋ API๊ฐ ์๋๋ผ ์์ง์ ๋๋ค. Contour๋, Istio๋, Envoy Gateway๋ ์ ๋ถ ๊ทธ ๋ฐ์์ Envoy๋ฅผ ์์ง์ผ๋ก ์๋๋ค. ๊ทธ๋ฌ๋ “Gateway API๋ผ๋ ์ค์ ์ Envoy๋ผ๋ ์์ง์ด ์คํํ๋ค"๊ฐ ์ฌ๋ฐ๋ฅธ ๊ทธ๋ฆผ์ ๋๋ค. Envoy๋ฅผ HTTPRoute์ ๊ฐ์ ์ค์ ๋๋ฉด ์ ๋ฉ๋๋ค.
๐งฌ ์งํ์ ํ๋ฆ #
์ฟ ๋ฒ๋คํฐ์ค ๋ผ์ฐํ API๋ 3์ธ๋๋ฅผ ๊ฑฐ์ณ ์งํํ์ต๋๋ค.
| ์ธ๋ | ๋ํ | ํน์ง | ํ๊ณ |
|---|---|---|---|
| 1์ธ๋ | Ingress (๋นํธ์ธ) | 1.19(2020) GA, HTTP ๋ ธ์ถ ํ์ค | ๋๋ฌด ๋จ์ โ ์ ๋ํ ์ด์ ๋จ๋ฐ, ํํธํ |
| 2์ธ๋ | ๋ฒค๋ CRD | Contour HTTPProxy, Istio VirtualService, Traefik IngressRoute | ๊ธฐ๋ฅ์ ํ๋ถํ๋ ๋ฒค๋ ๋ฝ์ธ |
| 3์ธ๋ | Gateway API | GatewayClassยทGatewayยทHTTPRouteยทGRPCRoute | ๋ฒค๋ ์ค๋ฆฝ, ์ด์์ฑ ๋์ (ํ์ค) |
1์ธ๋: Ingress (์์กฐ, ๋นํธ์ธ) #
Ingress API๋ ์ฟ ๋ฒ๋คํฐ์ค 1.19(2020)์์ GA๊ฐ ๋ ๊ธฐ๋ฅ์ผ๋ก, ์ค๋ซ๋์ HTTP ์๋น์ค๋ฅผ ๋ ธ์ถํ๋ ํ์ค์ด์์ต๋๋ค. ํ์ง๋ง ๋๋ฌด ๋จ์ํด์ ์ปจํธ๋กค๋ฌ๋ง๋ค ๋ถ์กฑํ ๊ธฐ๋ฅ์ ์ ๋ํ ์ด์ ์ผ๋ก ๋ฉ์ฐ๊ธฐ ์์ํ๊ณ , ์ค์ ์ด ํํธํ๋๊ณ ์ด์์ฑ์ด ๋จ์ด์ก์ต๋๋ค.
2์ธ๋: ๋ฒค๋๋ณ CRD #
๋ฒค๋๋ค์ด ๊ฐ์ ํ๋ถํ CRD๋ฅผ ๋ง๋ค์ด ํ๊ณ๋ฅผ ๋ฉ์ ์ต๋๋ค โ Contour์ HTTPProxy, Istio์ VirtualService, Traefik์ IngressRoute์ฒ๋ผ์. ๊ธฐ๋ฅ์ ์ข์์ง๋ง ์ ๋ถ ๋ฒค๋ ๋ฝ์ธ์ด์์ต๋๋ค.
3์ธ๋: Gateway API (ํ์ค) #
๊ทธ ๊ตํ์ ๋ชจ์ ์ปค๋ฎค๋ํฐ๊ฐ ํ์ค์ผ๋ก ์๋ ดํ ๊ฒ Gateway API์ ๋๋ค. GatewayClassยทGatewayยทHTTPRouteยทGRPCRoute ๊ฐ์ ํ์ ํ๋ ๋ฆฌ์์ค๋ก, ๋ฒค๋ ์ค๋ฆฝ์ ์ด๊ณ ์ด์์ฑ์ด ๋์ต๋๋ค.
โ๏ธ HTTPProxy vs HTTPRoute #
HTTPProxy๋ Contour ์ ์ฉ CRD์ด๊ณ , HTTPRoute๋ ํ์ค Gateway API์ ์ผ๋ถ์ ๋๋ค. ๋ ๋ค L7 ๋ผ์ฐํ ์ ํ์ง๋ง ์ถ์ ์ด ๋ค๋ฆ ๋๋ค.
| ๊ตฌ๋ถ | HTTPProxy | HTTPRoute |
|---|---|---|
| ์ถ์ | Contour ์ ์ฉ CRD (๋ฒค๋ ๋ ์) | Gateway API ํ์ค |
| ๋์ ๋ฒ์ | Contour์์๋ง | ํ์ค ๊ตฌํ ๊ฒ์ดํธ์จ์ด ์ด๋์๋ |
| ์ฑ์๋ | ํ๋ถยท์ฑ์ | ํ์ค, ๋น ๋ฅด๊ฒ ์ฑ์ ์ค |
| gRPC ์ ์ฉ | (HTTPProxy ๋ด ์ค์ ) | ํ์ค GRPCRoute |
| ์ด์์ฑ | ๋ฎ์(๋ฒค๋ ์ข ์) | ๋์ |
ํ ์ค๋ก: “ํ ๋ฒค๋ ์ ์ฉ์ด์ง๋ง ์ฑ์(HTTPProxy)” vs “ํ์ค์ด๋ผ ์ด์์ฑ ๋์(HTTPRoute)”.
gRPC ๋ผ์ฐํ ์ ํ์ค์ผ๋ก ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1# GRPCRoute (Gateway API ํ์ค)
2apiVersion: gateway.networking.k8s.io/v1
3kind: GRPCRoute
4metadata:
5 name: my-grpc-route
6spec:
7 parentRefs:
8 - name: my-gateway # ํ๋ซํผํ์ด ๋ง๋ Gateway ์ฐธ์กฐ
9 rules:
10 - matches:
11 - method:
12 service: helloworld.Greeter # gRPC ์๋น์ค๋ช
์ผ๋ก ๋งค์นญ
13 backendRefs:
14 - name: my-grpc-svc
15 port: 8080๐ค ์ญํ ๋ถ๋ฆฌ โ Gateway API์ ํต์ฌ ์ฅ์ #
Gateway API๋ ํ๋ซํผํ(์ธํ๋ผ)๊ณผ ์ฑํ(๋ผ์ฐํ )์ ์ฑ ์์ ๊ณต์์ ์ผ๋ก ๋๋๋๋ค.
| ๋ฆฌ์์ค | ์์ ์ฃผ์ฒด | ๋ด๋น |
|---|---|---|
| GatewayClass / Gateway | ํ๋ซํผยท์ธํ๋ผ ํ | ๋ฆฌ์ค๋ยทํฌํธยทTLS |
| HTTPRoute / GRPCRoute | ์ฑยทํ๋ก์ ํธ ํ | ๋ผ์ฐํ ๊ท์น |
์ฆ ํ๋ซํผํ์ด ์ธํ๋ผ(Gateway)๋ฅผ, ์ฑํ์ด ๋ผ์ฐํธ๋ฅผ ๋ฐ๋ก ์์ ํ๋ ๊ตฌ์กฐ์ ๋๋ค. ์ด “๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(separation of concerns)“๊ฐ ํต์ฌ ์ด์ ์ ๋๋ค. (๋ค์ 6ํธ์์ TLS ์ธ์ฆ์๋ฅผ ์ด ๊ตฌ์กฐ๋ก ์ค์ํํ๋ ๊ฑธ ๋ค๋ฃน๋๋ค.)
๐ธ๏ธ ์ Istio ๋ฌธ์๋ ๋น์ทํ๊ฒ ๋๊ปด์ง๊น #
Istio์ ์์ฒด CRD(VirtualServiceยทGatewayยทDestinationRule)๊ฐ Gateway API ์ค๊ณ์ ํฐ ์ํฅ์ ์คฌ๊ธฐ ๋๋ฌธ์ ๋๋ค. Istio๋ Envoy ๊ธฐ๋ฐ ์๋น์ค ๋ฉ์์ด๊ณ , ์ง๊ธ์ Istio๋ Gateway API๋ฅผ ์ง์ํฉ๋๋ค. ๊ทธ๋์ “์ด๋์ ๋ณธ ๊ฒ ๊ฐ๋ค"๋ ๊ฐ์ด ์ ํํฉ๋๋ค.
๋จ, ๊ฒฐ์ด ํ๋ ๋ค๋ฆ ๋๋ค.
- Gateway API / Ingress = north-south ํธ๋ํฝ (์ธ๋ถ โ ํด๋ฌ์คํฐ)
- ์๋น์ค ๋ฉ์ = east-west ํธ๋ํฝ (์๋น์ค โ ์๋น์ค)
๋์ ๊ฒฝ์์ด ์๋๋ผ ๋ณด์ ๊ด๊ณ์ ๋๋ค.
๐ 2026๋ ํ์ฌ ์ํ #
๋น ๋ฅด๊ฒ ๋ณํ๋ ์์ญ์ด๋ผ ์์ฑ ์์ (2026๋ 6์) ๊ธฐ์ค์ด๋ฉฐ, ์ต์ ๊ณต์ ๋ฌธ์ ํ์ธ์ ๊ถ์ฅํฉ๋๋ค.
- Gateway API: 2023๋ 10์ v1.0 GA์ ๋๋ฌํ๊ณ , 2026๋ ๋ค์ด v1.5๊น์ง ๋ฆด๋ฆฌ์ค๋๋ฉฐ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด Standard(Stable)๋ก ์น๊ฒฉ๋ ์ฑ์ยทํ๋ก๋์ ๋ ๋ ์ํ์ ๋๋ค. SIG Network์ ๊ณต์ ๊ถ๊ณ ๋ Gateway API๋ก์ ์ด์ ์ ๋๋ค.
- Ingress๋ ์ฌ๋ผ์ง์ง ์์ต๋๋ค. Ingress API ์์ฒด๋ ํ๊ธฐยท์ ๊ฑฐ ๊ณํ์ด ์๊ณ , ๋ค๋ง ๋ ์ด์ ์ ๊ทน ๊ฐ๋ฐ๋์ง ์๋ “feature-frozen” ์ํ์ ๋๋ค.
- โ ๏ธ ์ฃผ์ โ ingress-nginx ์ํด: ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ์ปค๋ฎค๋ํฐ ingress-nginx ์ปจํธ๋กค๋ฌ๋ 2026๋
3์ retired ๋์์ต๋๋ค. ์ ์ฅ์๋
kubernetes-retired๋ก ์ฎ๊ฒจ์ ธ read-only๊ฐ ๋์๊ณ , ๋ ์ด์ ๋ฆด๋ฆฌ์คยท๋ฒ๊ทธํฝ์คยทCVE ํจ์น๊ฐ ์์ต๋๋ค. ๊ธฐ์กด ๋ฐฐํฌ๋ ๊ณ์ ๋์ํ์ง๋ง ์ ๊ท ๋ณด์ ์ทจ์ฝ์ ์ ํจ์น๋์ง ์์ผ๋ฏ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ด ๊ถ์ฅ๋ฉ๋๋ค. (์ด๋ ์ปค๋ฎค๋ํฐ ํ๋ก์ ํธ ์๊ธฐ์ด๋ฉฐ, F5/NGINX์ ์์ฉ ์ปจํธ๋กค๋ฌ๋ ๋ณ๊ฐ์ ๋๋ค.) ์ด์ ์ ๋๋ ๊ณต์ ๋๊ตฌ ingress2gateway๋ ์ ๊ณต๋ฉ๋๋ค. - ํ์ค์ด๋ผ ๊ตฌํ์ฒด๊ฐ ์ฌ๋ฟ์ ๋๋ค. ์์ ์ ํฉ ๊ตฌํ์ผ๋ก Envoy GatewayยทIstioยทNGINX Gateway FabricยทTraefikยทCiliumยทkgateway ๋ฑ์ด ์๊ณ , ContourยทAWS LB ControllerยทGKE GatewayยทKong ๋ฑ์ ๋ถ๋ถ ์ ํฉ์ ๋๋ค.
๐ฏ ์ค๋ฌด ๊ถ์ฅ #
์ ๊ท๋ก ์์ํ๋ค๋ฉด Gateway API๊ฐ ์์ฐ์ค๋ฝ๊ณ , ์ ๋์๊ฐ๋ Ingress ์ค์ ์ด ์๋ค๋ฉด ๊ตฌ์ฒด์ ์ธ ํ๊ณ์ ๋ถ๋ชํ ๋ ์ฎ๊ธฐ๋ฉด ๋ฉ๋๋ค. 1ํธ์์ HTTPProxy๋ฅผ ์ผ๋๋ผ๋ ๋น์ฅ ๋ฐ๊ฟ ํ์๋ ์์ง๋ง, ์ ๊ท ์ค๊ณยท๋ฉํฐ ๋ฒค๋ยท์ด์์ฑ์ด ์ค์ํ๋ฉด HTTPRoute/GRPCRoute ๋ฐฉํฅ์ด ๋ฏธ๋์งํฅ์ ์ ๋๋ค. ๋ค๋ง ingress-nginx๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด ์ํด(EOL)๋ก ์ธํด ์ด์ ์ด ์ฌ์ค์ ํ์์ ๋๋ค.
๐ ํ ์ค ์์ฝ #
- Ingress(์์กฐ, ์ ๋ํ ์ด์ ํ๊ณ) โ ๋ฒค๋ CRD(HTTPProxy ๋ฑ) โ ํ์ค Gateway API(HTTPRouteยทGRPCRoute)๋ก ์งํ ์ค์ ๋๋ค.
- HTTPProxy๋ Contour ์ ์ฉ, HTTPRoute๋ ํ์ค์ด๋ผ ์ด์์ฑ์ด ๋์ต๋๋ค.
- API(์ค์ )์ Envoy(์์ง)๋ ๋ค๋ฅธ ์ธต์ ๋๋ค.
โ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ #
Q. HTTPProxy์ HTTPRoute ์ค ๋ฌด์์ ์จ์ผ ํ๋์? #
์ด์์ฑยทํ์คยท๋ฉํฐ ๋ฒค๋๊ฐ ์ค์ํ๋ฉด HTTPRoute(Gateway API)๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ด๋ฏธ Contour์ HTTPProxy๋ก ์ ๋์๊ฐ๊ณ ์๋ค๋ฉด ๋น์ฅ ๋ฐ๊ฟ ํ์๋ ์์ง๋ง, ์ ๊ท ์ค๊ณ๋ ํ์ค ๋ฐฉํฅ์ด ๋ฏธ๋์งํฅ์ ์ ๋๋ค.
Q. Ingress๋ ์ด์ ์ ์ฐ๋์? #
Ingress API ์์ฒด๋ ์ ๊ฑฐ ๊ณํ์ด ์๋ feature-frozen ์ํ๋ก ๊ณ์ ๋์ํฉ๋๋ค. ๋ค๋ง ์ปค๋ฎค๋ํฐ ingress-nginx ์ปจํธ๋กค๋ฌ๊ฐ 2026๋ 3์ ์ํดํด CVE ํจ์น๊ฐ ์ค๋จ๋์์ผ๋ฏ๋ก, ํด๋น ์ปจํธ๋กค๋ฌ ์ฌ์ฉ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ด ํ์ํฉ๋๋ค.
Q. Gateway API์ ์๋น์ค ๋ฉ์(Istio)๋ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ์? #
Gateway API๋ north-south(์ธ๋ถโํด๋ฌ์คํฐ) ํธ๋ํฝ์, ์๋น์ค ๋ฉ์๋ east-west(์๋น์คโ์๋น์ค) ํธ๋ํฝ์ ์ฃผ๋ก ๋ค๋ฃน๋๋ค. ๊ฒฝ์์ด ์๋๋ผ ๋ณด์ ๊ด๊ณ์ด๋ฉฐ, Istio๋ Gateway API๋ ์ง์ํฉ๋๋ค.
Q. Envoy์ Gateway API์ ๊ด๊ณ๋? #
Envoy๋ ํธ๋ํฝ์ ์ค์ ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ ํ๋ ์ธ “์์ง"์ด๊ณ , Gateway API๋ “์ด๋ ๊ฒ ๋ผ์ฐํ ํ๋ผ"๋ฅผ ์ ๋ ์ค์ (API)์ ๋๋ค. ContourยทIstioยทEnvoy Gateway ๋ฑ์ด Gateway API ์ค์ ์ ๋ฐ์ Envoy ์์ง์ผ๋ก ์คํํฉ๋๋ค.
๐ ์ฐธ๊ณ #
- Gateway API v1.0: GA Release (Kubernetes Blog)
- Gateway API v1.5: Moving features to Stable (Kubernetes Blog)
- Ingress NGINX Retirement: What You Need to Know (Kubernetes Blog)
- Gateway API ๊ณต์ ๋ฌธ์ - Implementations
- ingress2gateway - ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ
- ๊ด๋ จ ๊ธ: ํธ๋ํฝ ๊ตฌ์กฐ (4ํธ) ยท L4 vs L7 (3ํธ)