Guía Detallada de Configuración de Rutas en Spring Cloud Zuul

Definición de Rutas Personalizadas

Para mapear un microservicio a una URL específica, se define la ruta en el archivo de configuración. Por ejemplo, para redirigir el servicio inventory-service al path /inventory/**, se utiliza la siguiente configuración:

Formato YAML

zuul:
  routes:
    inventory-service: /inventory/**

Formato Properties

zuul.routes.inventory-service.path=/inventory/**

Con esta regla, las peticiones dirigidas al gateway (por ejemplo, localhost:8080/inventory/items) serán reenviadas al microservicio inventory-service.

Exclusión de Microservicios Específicos

Si ciertos servicios no deben ser expuestos a través del API Gateway, se pueden añadir a la lista de ignorados. Esto es útil para servicios internos o de procesamiento por lotes.

Formato YAML

zuul:
  ignored-services: billing-service, notification-service

Formato Properties

zuul.ignored-services=billing-service,notification-service

Restricción Total con Excepciones

Una práctica de seguridad recomendada es ignorar todos los servicios descubiertos por defecto y habilitar únicamente aquellos que deben ser públicos.

Formato YAML

zuul:
  ignored-services: '*'
  routes:
    inventory-service: /inventory/**

Formato Properties

zuul.ignored-services=*
zuul.routes.inventory-service.path=/inventory/**

Asignación Explícita de serviceId y Ruta

Cuando el nombre lógico de la ruta difiere del identificador real del servicio en el registro, se deben especificar ambos parámetros de forma explícita.

Formato YAML

zuul:
  routes:
    inventory-route:
      service-id: inventory-service
      path: /inventory/**

Formato Properties

zuul.routes.inventory-route.serviceId=inventory-service
zuul.routes.inventory-route.path=/inventory/**

Enrutamiento hacia URLs Estáticas

Es posible dirigir el tráfico a una URL física en lugar de utilizar el descubrimiento de servicios dinámico.

Formato YAML

zuul:
  routes:
    legacy-system:
      url: http://192.168.1.50:9090/
      path: /legacy/**

Formato Properties

zuul.routes.legacy-system.url=http://192.168.1.50:9090/
zuul.routes.legacy-system.path=/legacy/**

Nota importante: Al configurar una URL estática de esta manera, la petición no se envuelve en un HystrixCommand y no se puede aplicar balanceo de carga con Ribbon.

URLs Estáticas Conservando Hystrix y Ribbon

Para mantener la tolerancia a fallos y el balanceo de carga al usar URLs directas, se debe configurar Ribbon manualmente, deshabilitando su integración con Eureka y proporcionando una lista de servidores.

Formato YAML

zuul:
  routes:
    legacy-system:
      path: /legacy/**
      service-id: legacy-system

ribbon:
  eureka:
    enabled: false

legacy-system:
  ribbon:
    listOfServers: 192.168.1.50:9090,192.168.1.51:9090

Formato Properties

zuul.routes.legacy-system.path=/legacy/**
zuul.routes.legacy-system.serviceId=legacy-system
ribbon.eureka.enabled=false
legacy-system.ribbon.listOfServers=192.168.1.50:9090,192.168.1.51:9090

Filtrado por Patrones de URL

Además de filtrar por nombre de servicio, se pueden bloquear rutas específicas que coincidan con un patrón de ant, como endpoints administrativos o internos.

Formato YAML

zuul:
  ignored-patterns: /**/internal/**
  routes:
    inventory-service: /inventory/**

Formato Properties

zuul.ignored-patterns=/**/internal/**
zuul.routes.inventory-service.path=/inventory/**

Esto permite el acceso a /inventory/**, pero bloqueará cualqueir solicitud que contenga /internal/ en su trayectoria.

Gestión de Prefijos Globales

Se puede anteponer un segmento común a todas las rutas gestionadas por Zuul. El parámetro strip-prefix determina si este segmento se elimina antes de reenviar la petición al microservicio destino.

Formato YAML

zuul:
  prefix: /v1
  strip-prefix: false
  routes:
    inventory-service: /inventory/**

Formato Properties

zuul.prefix=/v1
zuul.strip-prefix=false
zuul.routes.inventory-service.path=/inventory/**

Comportamiento de strip-prefix:

  • strip-prefix: true (Valor por defecto): Una petición a localhost:8080/v1/inventory/items se reenvía al microservicio como /inventory/items.
  • strip-prefix: false: La misma petición se reenvía conservando el prefijo, resultando en /v1/inventory/items en el servicio destino.

Diagnóstico y Depuración

Si el comportamiento del enrutamiento no es el esperado o las reglas no se aplican correctamente, elevar el nivel de log de los componentes de Netflix facilita la identificación de problemas, ya que Zuul imprimirá los detalles exactos del reenvío de peticiones.

Formato YAML

logging:
  level:
    com.netflix: DEBUG

Formato Properties

logging.level.com.netflix=DEBUG

Etiquetas: SpringCloud Zuul Microservicios APIGateway Ribbon

Publicado el 6-2 06:59