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 alocalhost:8080/v1/inventory/itemsse reenvía al microservicio como/inventory/items.strip-prefix: false: La misma petición se reenvía conservando el prefijo, resultando en/v1/inventory/itemsen 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