Las puertas de enlace nativas de la nube combinan la gestión de tráfico y el enrutamiento de microservices en una sola capa basada en Envoy. Esta solución incluye descubrimiento de servicios de contenedores integrado, ofrece un rendimiento superior al de las puertas de enlace NGINX Ingress y proporciona observability y seguridad listas para usar, capacidades que en Zuul requieren desarrollo personalizado.
Este tema aborda la conexión de orígenes de servicio, la conversión de enrutamiento y resiliencia, la configuración de autenticación y observability, así como la transición de tráfico.
Mapeo de conceptos de Zuul a puerta de enlace nativa de la nube
|
Concepto de Zuul |
Equivalente en puerta de enlace nativa de la nube |
Notas |
|
Ruta de Zuul ( |
Regla de enrutamiento |
Se configura en la consola de MSE o mediante YAML de Spring Cloud Gateway |
|
|
Servicio (importado desde un origen de servicio) |
Suscríbase a los servicios a través de la consola |
|
Filtro de Zuul (pre/post/route) |
Directiva de enrutamiento (limitación, reescritura, configuración de encabezados, CORS) |
Las directivas integradas reemplazan el código de filtros personalizados |
|
Ribbon ( |
Balanceo de carga integrado |
Se configura por versión de servicio |
|
Hystrix ( |
Configuración de tiempo de espera y reintentos |
Se configura por regla de enrutamiento |
|
Registro de Nacos |
Origen de servicio |
Agréguelo como origen de servicio en la consola de MSE |
|
Filtros de autenticación personalizados |
Complementos de autenticación (JWT, OIDC, IDaaS, personalizado) |
No requiere código |
|
Panel de Hystrix |
Paneles de datos, Tracing Analysis, envío de registros |
Observability integrada |
Requisitos previos
Paso 1: Conectar orígenes de servicio
La puerta de enlace nativa de la nube descubre los servicios de backend mediante orígenes de servicio, lo cual reemplaza la configuración de registro de Zuul. Omita esta sección y vaya a Step 2 si:
Los servicios se pueden descubrir a través de Container Service for Kubernetes (ACK).
Hay una instancia de MSE Nacos configurada como registro que admite Mesh Configuration Protocol (MCP).
No se requiere descubrimiento de servicios, ya que se accede a ellos por nombre de dominio o dirección IP fija.
Elegir un tipo de origen de servicio
Instancia de MSE Nacos
Registre los servicios en la instancia de MSE Nacos mediante el SDK de Java.
(Opcional) Para aplicaciones Java, utilice el agente de Microservices Governance para migrate registrations automatically with MSE Sync.
Registro compartido de Enterprise Distributed Application Service (EDAS)
Las puertas de enlace nativas de la nube admiten registros de EDAS directamente. Add an EDAS registry as a service source.
Registro compartido de Serverless App Engine (SAE)
Las puertas de enlace nativas de la nube admiten registros de SAE directamente. Add an SAE registry as a service source.
Paso 2: Convertir configuraciones de enrutamiento de Zuul
Asigne su configuración YAML de Zuul a los equivalentes de la puerta de enlace nativa de la nube; utilice la siguiente configuración de ejemplo como referencia.
Configuración de enrutamiento de Zuul (antes)
zuul:
routes:
demo:
path: /test/a
serviceId: service-a
pre:
path: /auth/validation/**
serviceId: service-a
header:
path: /auth/test
requestHeadersToAdd:
- key: debug_tag
value: true
retry:
path: /app/try/**
stripPrefix: false
retryable: true
serviceId: service-a
retryable: true
ignoredPatterns:
- /login/api/a/v3/a
- /auth/api/b
Configuración de registro y resiliencia de Zuul (antes)
spring:
application:
name: zuul-demo
cloud:
nacos:
discovery:
server-addr: nacos-server:8848
config:
enabled: false
service-a:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
ConnectTimeout: 1000
ReadTimeout: 8000
MaxAutoRetries: 3
MaxAutoRetriesNextServer: 2
MaxTotalConnections: 20000
MaxConnectionsPerHost: 5000
hystrix:
command:
service-a:
execution:
isolation:
thread:
timeoutInMilliseconds: 60000
strategy: SEMAPHORE
semaphore:
maxConcurrentRequests: 60000
2a. Agregar un origen de servicio (reemplaza la configuración de registro)
En la consola de MSE:
Abra la página Service source de su puerta de enlace nativa de la nube.
Agregue su registro de Nacos (u otro tipo de registro) como origen de servicio.
Los cambios surten efecto en tiempo real.
Esto reemplaza la configuración spring.cloud.nacos.discovery.server-addr en Zuul. Add a service source.
2b. Importar y configurar servicios (reemplaza serviceId y Ribbon)
Importe los servicios a los que hacen referencia sus rutas de Zuul (por ejemplo,
service-a). Add a service.Configure una versión de ruta para cada servicio. Manage service versions.
La puerta de enlace nativa de la nube gestiona el balanceo de carga de forma nativa. Esto reemplaza la configuración de Ribbon (WeightedResponseTimeRule, ConnectTimeout, ReadTimeout, grupos de conexiones) mediante la configuración integrada de servicios y reglas de enrutamiento.
Mapeo de Ribbon a puerta de enlace nativa de la nube
|
Configuración de Ribbon en Zuul |
Equivalente en puerta de enlace nativa de la nube |
|
|
Directiva de balanceo de carga en la versión del servicio |
|
|
Configuración de tiempo de espera en la regla de enrutamiento |
|
|
Configuración de tiempo de espera en la regla de enrutamiento |
|
|
Directiva de reintentos en la regla de enrutamiento |
|
|
Directiva de reintentos en la regla de enrutamiento |
|
|
Gestionado por la infraestructura de la puerta de enlace |
Mapeo de Hystrix a puerta de enlace nativa de la nube
|
Configuración de Hystrix en Zuul |
Equivalente en puerta de enlace nativa de la nube |
|
|
Configuración de tiempo de espera en la regla de enrutamiento |
|
|
No es necesario (la puerta de enlace gestiona el aislamiento internamente) |
|
|
Directiva de limitación en la regla de enrutamiento |
2c. Crear reglas de enrutamiento (reemplaza zuul.routes)
Cree reglas de enrutamiento en la consola de MSE. Cada ruta de Zuul se asigna a una regla de enrutamiento con un predicado de ruta y un servicio destino.
Conversión de rutas lado a lado
|
Ruta de Zuul |
Ruta |
Regla de enrutamiento de puerta de enlace nativa de la nube |
|
|
|
Predicado de ruta: |
|
|
|
Predicado de ruta: |
|
|
|
Predicado de ruta: |
|
|
|
Predicado de ruta: |
Para ignoredPatterns (/login/api/a/v3/a, /auth/api/b), no cree reglas de enrutamiento para esas rutas.
La puerta de enlace nativa de la nube utiliza internamente el formato de Spring Cloud Gateway:
spring:
cloud:
gateway:
routes:
- id: websocket_test
uri: ws://localhost:9000
order: 9000
predicates:
- Path=/echo
- id: default_path_to_service-a
uri: lb://service-a
order: 10000
predicates:
- Path=/sleep
2d. Configurar directivas de enrutamiento adicionales
Las directivas de enrutamiento integradas reemplazan el código de filtros de Zuul:
|
Directiva |
Reemplaza |
Detalles |
|
Limitación |
Filtros personalizados de limitación de velocidad |
|
|
Reescritura |
Filtros personalizados de reescritura de URL |
|
|
Configuración de encabezados |
|
|
|
CORS |
Filtros personalizados de CORS |
Paso 3: Configurar la autenticación
La autenticación integrada reemplaza los filtros personalizados de Zuul. Elija el método que se ajuste a su configuración:
|
Método |
Utilice este método cuando |
Detalles |
|
Autenticación JWT |
Su puerta de enlace Zuul valida tokens JWT en un filtro previo |
|
|
Autenticación OIDC |
Su aplicación utiliza flujos de OpenID Connect |
|
|
Autenticación IDaaS |
Su organización utiliza Alibaba Cloud IDaaS |
|
|
Autenticación personalizada |
Ninguno de los métodos anteriores aplica |
Paso 4: Configurar observability
La observability integrada reemplaza las integraciones personalizadas de registros y rastreo de Zuul.
|
Función |
Reemplaza |
Detalles |
|
Paneles de monitoreo de la puerta de enlace |
Paneles de métricas personalizadas |
|
|
Reglas de alerta |
Integraciones de alertas personalizadas |
|
|
Envío de registros |
Canalizaciones de registros personalizadas |
|
|
Tracing Analysis |
Infraestructura de rastreo personalizada |
Paso 5: Migrar el tráfico
Elija una estrategia de migración según su tolerancia al riesgo y el esfuerzo disponible. La migración por procedimientos (recomendada) equilibra seguridad y eficiencia.
Estrategias de migración de tráfico
|
Estrategia |
Funcionamiento |
Costo |
Riesgo |
|
Migración iterativa |
Modifique las URL de acceso de algunos servicios a la vez en el lado del cliente. Compruebe cada lote antes de continuar. |
Alto |
Bajo |
|
Migración por fases (lado del proxy) |
Cree fases de migración por tipo de servicio (críticos frente a no críticos) en el proxy original. Migre las URL de acceso por fases. |
Medio |
Medio |
|
Migración completa basada en DNS |
Asocie el nombre de dominio original con la URL de acceso de la puerta de enlace nativa de la nube en una sola transición. |
Bajo |
Alto |
|
Migración por procedimientos (recomendada) |
Combina las anteriores: pruebe primero con pocos servicios, migre los servicios críticos en secuencia y luego realice una transición completa basada en DNS tras las pruebas de estrés. |
Relativamente bajo |
Relativamente bajo |
Recomendación: migración por procedimientos
Pruebe con servicios no críticos. Actualice las URL de acceso de varios servicios no críticos para que apunten a la puerta de enlace nativa de la nube. Compruebe el enrutamiento, la autenticación y la observability.
Migre los servicios críticos en secuencia. Una vez que las pruebas sean exitosas, migre los servicios críticos uno por uno. Monitoree errores, cambios de latencia y anomalías de tráfico en los paneles de la puerta de enlace.
Realice la transición de DNS tras las pruebas de estrés. Después de migrar y validar todos los servicios, ejecute pruebas de estrés en la puerta de enlace nativa de la nube y asocie el nombre de dominio original con su URL de acceso.
Comprobar la migración
Después de cada fase, compruebe lo siguiente:
Las reglas de enrutamiento coinciden con el comportamiento esperado (pruebe las rutas clave).
La autenticación se completa correctamente para todos los endpoints de servicio.
Los paneles de monitoreo muestran los patrones de tráfico esperados.
No aparecen errores en los registros de la puerta de enlace (revise la salida del envío de registros).
Reversión
Si surgen problemas:
Revierta las URL de acceso (o los registros DNS) para que apunten nuevamente a la puerta de enlace Zuul.
Mantenga la puerta de enlace Zuul en ejecución hasta que la migración se valide por completo.
Investigue y resuelva los problemas antes de reintentar la migración.