云原生网关支持丰富的服务策略配置,点击服务列表项操作栏的策略配置按钮或者服务名称进入服务详情页面,可以实现后端服务级别的策略配置,包括负载均衡、超时重试、健康检查、后端访问签名、服务版本等,如下图:
策略配置项和支持的服务类型如下表:
配置项 | 说明 | 支持的服务类型 |
负载均衡策略 | 后端多实例的负载均衡策略,当前支持: 1. 轮询(Round Robin) 2. 一致性哈希(CHash) 3. 指数加权移动平均法(EWMA) 4. 最小连接数(Least Conn) | 容器/注册中心/固定地址 |
超时 | 当前支持配置连接超时、发送超时、接收超时,默认都是6s | 容器/注册中心/固定地址 |
重试 | 1. 重试次数,默认为0,表示不重试 2. 重试超时时间:原请求和重试的总耗时超过该时间则不再继续重试 | 容器/注册中心/固定地址 |
健康检查 | 后端服务监控检查配置,包括主动健康检查和被动健康检查 | 容器/注册中心/固定地址 |
后端访问签名 | 请求后端时基于HMAC算法计算签名,用于后端对网关的回源请求进行鉴权 | 容器/注册中心/固定地址 |
服务版本 | 针对容器和Nacos服务,基于标签定义服务的不同版本,可以在路由配置中实现多版本的蓝绿和金丝雀发布能力 | 容器/注册中心 |
健康检查配置
云原生网关对后端服务的健康检查分为主动健康检查和被动健康检查。
主动健康检查通过预设的探针,主动探测上游节点的存活性,目前支持 HTTP、HTTPS、TCP 三种探针类型。当发往某个健康节点的若干个连续探测请求都失败时,则该节点将被标记为不健康,不健康的节点将会被网关的负载均衡器忽略,无法收到请求;若发往某个不健康的节点的连续若干个探测请求都成功,则该节点将被重新标记为健康,进而可以被代理。
主动健康检查配置界面如下图:
主动健康检查支持的配置项有:
配置项 | 说明 |
探测类型 | 当前支持TCP、HTTP、HTTPS探测 |
超时时间 | 探测请求超时时间 |
并行数量 | 并发主动探测的最大数量 |
端口 | 探测的服务端口 |
请求路径 | 探测请求的路径,仅对HTTP和HTTPS探测有效 |
请求头部 | 探测时指定请求头部,仅对HTTP和HTTPS探测有效 |
健康状态定义 | 对于不健康节点的探测配置,用于判断节点是否恢复健康,包括: 1. 探测时间间隔(秒) 2. 成功次数:主动探测成功达到次次数时认为节点是健康的 3. 状态码:对于HTTP和HTTPS探测,定义了哪些状态码是健康的,如2XX,3XX |
不健康状态定义 | 对于健康节点的探测配置,用于判断节点是否监控,包括: 1. 探测时间间隔(秒) 2. 超时次数:超时次数大于或者等于该配置时认为节点不健康 3. 状态码:定义了哪些状态码是异常的,如4XX,5XX 4. HTTP失败次数:HTTP失败次数大于等于该值时认为节点不健康 5. TCP失败次数:TCP失败大于等于该值时认为节点不健康 |
被动健康检查是指,通过网关接收到的上游节点的响应状态来判断对应的上游节点是否健康。相对于主动健康检查,被动健康检查的方式无需发起额外的探测请求,缺点是无法提前感知节点状态,需要有一定量的失败请求才能触发故障节点的剔除。若发向某个健康节点的若干个连续请求都被判定为失败,则该节点将被标记为不健康。
被动健康检查的配置如下图:
被动健康检查的配置说明:
配置 | 说明 |
类型 | 当前支持TCP、HTTP、HTTPS三种类型 |
健康状态定义 | 1. 状态码:成功对应的状态码,主要是2XX、3XX等 2. 成功次数:成功的次数超过该值则认为节点健康 |
不健康状态定义 | 1. 超时次数:超时次数超过该值则认为节点不健康 2. TCP失败次数:TCP失败超过该值则认为节点不健康 3. HTTP失败次数:HTTP失败超过该值则认为节点不健康 4. 状态码:失败对应的状态码,包括4XX、5XX等 |
后端访问签名
使用云原生网关的场景下,后端服务不直接对外暴露服务,而是通过云原生网关将请求转发到后端。从安全角度,配置认证鉴权策略限制只允许云原生网关等作为请求方访问自己。针对这种场景,云原生网关可以配置特定的签名策略,用于后端服务的认证鉴权。当前云原生网关添加服务时可以配置HMAC算法签名策略,如下图所示:
配置选项说明如下:
选项 | 说明 |
认证算法 | 当前仅支持HMAC |
Access Key | 后端服务校验签名使用的HMAC access key |
Secret Key | 后端服务校验签名使用的HMAC secret key |
加密算法 | HMAC加密算法,支持hmac-sha1, hmac-sha256, hmac-sha512 |
加密Headers列表 | 用于计算签名的header列表 |
URL参数编码 | URL参数是否经过编码之后再计算签名,默认是 |
服务版本管理
服务的版本一般是服务迭代过程中的概念,在云原生网关的场景下,服务版本引申为服务的标签概念,一个服务可能有多个版本(标签);基于服务的版本(标签)可以实现如标签路由、灰度发布、高可用部署等能力;如对于一个服务存在多个版本的场景,基于不同版本的实例上所携带的标签不同,将服务定义为多个不同的版本;根据请求的特征匹配,路由到不同版本的服务中可以实现标签路由;将服务的流量在多个版本之间分配,可以实现金丝雀、蓝绿等灰度功能;根据服务的部署标签定义的版本则可以应用在服务的高可用部署上。
对于容器或者Nacos来源的服务,云原生网关支持根据服务的元数据定义不同的版本,如下图对于容器服务,可以根据pod的标签定义不同的服务版本:
配置说明如下:
配置 | 说明 |
版本名称 | 自定义的版本名称 |
标签名 | 版本对应的标签名,可选值来自当前服务的元数据 |
标签值 | 版本标签名对应的标签值,可选值来自当前服务的元数据 |
实例数/比例 | 所选的标签选择到的实例数/相对于整体实例数的比例 |
添加完服务版本则可以看到如下: