Cheatsheet de tipos de ruta en Envoy Gateway: ¿HTTPRoute, GRPCRoute, TCPRoute o TLSRoute?
Si has leído los artículos anteriores, la pregunta que probablemente te está bloqueando ahora no es "no entiendo Gateway API" — sino:
"Bien, pero ¿cuál escribo realmente — HTTPRoute, GRPCRoute, TCPRoute o TLSRoute?"
Este artículo existe precisamente para aclarar eso. Guárdalo como referencia de bolsillo. Cuando aparezca un nuevo servicio, consúltalo primero — te ahorrará escribir YAML a ciegas y recibir una lección a través de los condition statuses.
La conclusión primero: cuatro tipos de ruta, cuatro propósitos
| Tipo de ruta | Capa de tráfico | Qué inspecciona | Ideal para | No apto para |
|---|---|---|---|---|
HTTPRoute |
L7 HTTP/HTTPS | host, path, header, query, method | Sitios web, REST APIs, tráfico web general | TCP sin procesar, TLS passthrough |
GRPCRoute |
L7 gRPC | hostname, service, method, header | Enrutamiento por servicio/método gRPC | REST APIs generales, TCP sin procesar |
TCPRoute |
L4 TCP | Información de listener y nivel de conexión | Bases de datos, protocolos TCP personalizados, servicios no HTTP | Escenarios que requieren inspección de path/header |
TLSRoute |
L4/L5 TLS | TLS SNI hostname | TLS passthrough, preservar cifrado extremo a extremo | Necesitar inspeccionar detalles HTTP tras el descifrado |
Si quieres una versión ultracorta:
- Inspeccionar
pathoheader→HTTPRoute - Inspeccionar
service/methodde gRPC →GRPCRoute - Solo reenviar conexiones TCP →
TCPRoute - Sin terminación TLS, solo enrutamiento por SNI →
TLSRoute
Decisión en tres pasos: deja de adivinar
Usa este orden:
- ¿Parseará el Gateway semántica HTTP de este tráfico?
- Si es sí, ¿es HTTP/REST normal o gRPC?
- Si es no, ¿es TCP sin procesar o TLS passthrough?
Resumido:
- Tiene path/header/method HTTP que inspeccionar →
HTTPRoute - Tiene service/method de gRPC que inspeccionar →
GRPCRoute - Sin reglas L7, solo reenvío TCP →
TCPRoute - Quiere TLS preservado hasta el backend →
TLSRoute
Esta decisión importa mucho. Mucha gente escribe HTTPRoute instintivamente primero y luego se da cuenta a mitad de camino de que está tratando con tráfico de base de datos. Todo el YAML entra en modo "¿qué estoy haciendo?".
Ejemplos YAML mínimos: reconoce cada uno de un vistazo
Aquí están las versiones más cortas y reconocibles de cada uno.
HTTPRoute
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: web-route
spec:
parentRefs:
- name: eg
sectionName: http
hostnames:
- "app.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: api-service
port: 8080Si ves path, hostnames y backendRefs — es este.
GRPCRoute
apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
metadata:
name: user-grpc
spec:
parentRefs:
- name: eg
sectionName: grpc
hostnames:
- "grpc.example.com"
rules:
- matches:
- method:
service: com.example.User
method: Login
backendRefs:
- name: user-grpc-service
port: 50051Si ves method.service y method.method — estás haciendo matching con semántica gRPC, no HTTP normal.
TCPRoute
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
name: postgres-route
spec:
parentRefs:
- name: eg
sectionName: postgres
rules:
- backendRefs:
- name: postgres
port: 5432TCPRoute casi no tiene conceptos de path/header — porque no los examina.
Es más cercano a: "las conexiones TCP que llegan a este listener van a este backend."
TLSRoute
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TLSRoute
metadata:
name: passthrough-route
spec:
parentRefs:
- name: eg
sectionName: tls
hostnames:
- "db.example.com"
rules:
- backendRefs:
- name: db-service
port: 5432Normalmente se combina con un listener protocol: TLS. El foco no es el descifrado — es el enrutamiento basado en SNI.
💡
TCPRouteyTLSRoutesuelen vivir en el canal experimental según la versión de Gateway API. Verifica la versión del CRD instalada en tu clúster antes de aplicar.
Cuatro errores comunes
1. gRPC no necesita obligatoriamente GRPCRoute
Si solo necesitas que fluya tráfico gRPC, algunas implementaciones pueden soportarlo vía HTTPRoute ya que gRPC corre sobre HTTP/2.
Pero si quieres hacer matching sobre semántica de service/method de gRPC, GRPCRoute es la opción más correcta y legible.
2. TLSRoute no es "HTTPS pero avanzado"
Este es el malentendido más común.
HTTPS listener + HTTPRoute: el Gateway termina TLS, luego aplica reglas HTTPTLS listener + TLSRoute: el Gateway NO termina TLS, enruta solo basándose en SNI
Uno descifra y opera en L7. El otro mantiene el tráfico cifrado y hace passthrough. Mundos completamente distintos.
3. TCPRoute no puede ver path/header
Si tu requisito es:
/apiva a A/adminva a B
Ese no es el trabajo de TCPRoute.
TCPRoute no entiende detalles HTTP. Forzar esos requisitos en él es prepararse para la frustración.
4. parentRefs.sectionName es importante
Cuando un Gateway tiene múltiples listeners, usa sectionName:
parentRefs:
- name: eg
sectionName: httpsEsto asegura que tu ruta se adjunte exactamente al listener que pretendes. Sin él, podrías creer que estás reservando la sala VIP y terminar en el salón equivocado.
Resumen en una línea
Primero identifica con qué estás trabajando: HTTP, gRPC, TCP o TLS passthrough — luego elige el tipo de ruta correcto. Acierta con la ruta y el 80% de tu YAML fluye naturalmente. Falla y quedarás atrapado en una batalla con los condition statuses.
Siguiente paso
Una vez que entiendes los tipos de ruta, el siguiente obstáculo común es: Cuando el mismo Gateway tiene muchos listeners, ¿cómo los estructuras sin crear caos?
El próximo artículo cubre el diseño de multi-listener: 👉 Guía de diseño de Listeners