微服务平台 TSF 网关配置自定义路由模式

开始实践配置微服务 SDK 支持网关自定义路由功能之前,请确保你已完成 微服务网关开发。

相关产品
微服务平台 TSF 产品页,含版本规格、价格与购买入口。

一、功能说明

·1.46 版本 SDK 之前,TSF 微服务网关 SDK 只支持分组路由模式,即请求路径需要携带网关分组等信息,并且不支持自定义路由规则。如果客户原本使用的是开源 Zuul 或 SCG,迁移改造量大。

·从 1.46 版本 SDK 开始,TSF 微服务网关 SDK 支持两种路由模式:分组路由模式和自定义路由模式。

·分组路由模式:TSF 托管微服务API。该模式下,TSF 会校验网关分组、请求 URL 请求路径等是否合法。支持 TSF 服务治理、支持使用网关分组相关能力(网关插件、API 限流、API 超时等)。不支持自定义路由规则 。

·自定义路由模式:TSF 不托管微服务 API。路由方式由配置文件定义。该模式下,TSF 不会校验网关分组和 URL 请求路径等是否合法。支持 TSF 服务治理,不支持网关分组的相关能力(包括网关插件、API 限流、API 超时等)

功能 分组路由模式 自定义路由模式
TSF 服务治理 支持 支持
网关分组的相关能力(包括网关插件、TSF API 限流、API 超时等) 支持 不支持
自定义路由规则 不支持 支持

二、操作步骤

你可以通过以下两种方式配置网关自定义路由功能。

方式一:在微服务网关的请求 Header 头设置方式二:在微服务网关应用的配置文件设置

在微服务网关的请求 Header 头里设置标识某个请求是自定义路由 API 的请求。

·请求的 Header 头里设置 TSF-Opensource-Mode: true:表示本次网关请求是自定义路由 API 的请求,走自定义路由模式的逻辑,否则依然走分组路由模式(默认都是分组路由模式)。

·请求的 Header 头里设置 TSF-NamespaceId: namespace-xxxxx :表示本次网关请求路由到命名空间 ID 为 namespace-xxxxx 的下游服务,如果不设置则默认请求到与网关相同命名空间的下游服务。

·请求的Header 头里设置 TSF-NamespaceId: namespace-xxxxx :表示本次网关请求路由到命名空间 ID 为 namespace-xxxxx 的下游服务,如果不设置则默认请求到与网关相同命名空间的下游服务。

·在微服务网关应用的配置文件设置 tsf.gateway.opensource-mode: true。

tsf: gateway: opensource-mode: true

注意:说明:

三、自定义路由规则配置

自定义路由模式下,默认请求路径为{Host:port}/{下游服务名}/{下游API路径}。例如: localhost:8080/provider-demo/echo/test,其中 provider-demo 为下游服务名,/echo/aaa为下游 API 路径。

如果需要额外的路由规则,或跨命名空间访问,可以通过以下配置进行设置:

四、1. SCG网关配置

配置名称 配置说明
spring.cloud.gateway.routes[].id 路由的 ID ,不允许重复
spring.cloud.gateway.routes[].uri 转发地址,可以是服务名,也可以是静态地址
spring.cloud.gateway.routes[].predicates SCG 断言,用于匹配路由
spring.cloud.gateway.routes[].filters SCG 过滤器

配置示例:

spring: cloud: gateway: routes: – id: provider-demo uri: lb://provider-demo # 走服务发现,跨命名空间配置参考这里 predicates: – Path=/provider-demo/** # /provider-demo/ 前缀的请求转发走服务发现转发到 provider-demo 实例上 filters: – StripPrefix=1 # 标识在转发之前应删除此路由的前缀 – id: business-server uri: http://localhost:9999 # 静态地址,不走服务发现 predicates: – Path=/business/** # /business/ 前缀的请求直接转发到 http://localhost:9999 filters: – StripPrefix=1 – id: websocket uri: ws://127.0.0.1:1234 # websocket 转发,只支持配置静态地址 predicates: – Path=/websocket filters: – StripPrefix=1

五、2. Zuul 网关配置

配置名称 配置说明
zuul.routes.{路由key}.id {路由key} 为替换为实际路由名称。路由的 ID(默认情况下与其 map 的 key 相同)。不允许重复。
zuul.routes.{路由key}.path {路由key} 为替换为实际路由名称。路由的 pattern(样式),例如 /foo/**。
zuul.routes.{路由key}.serviceId {路由key} 为替换为实际路由名称。映射到此路由的服务 ID(如果有)。你可以指定物理 URL 或服务,但不能两者都指定。
zuul.routes.{路由key}.url {路由key} 为替换为实际路由名称。完整的物理 URL 以映射到路线。一种替代方法是使用服务 ID 和服务发现来查找物理地址。
zuul.routes.{路由key}.stripPrefix {路由key} 为替换为实际路由名称。默认为 true,用于标识是否在转发之前是否应删除此路由的前缀

配置示例:

zuul:
routes:
api-v1:
path: /provider-demo/** # /provider-demo/ 前缀的请求转发走服务发现转发到 provider-demo 实例上,跨命名空间配置参考这里
serviceId: provider-demo # 走服务发现
stripPrefix: true
api-v2:
path: /v2/**
url: http://127.0.0.1:18081
stripPrefix: true

赞 (0)
上一篇 4天前
下一篇 4天前