mirror of
https://github.com/alibaba/higress.git
synced 2026-06-09 04:37:31 +08:00
doc: update cluster-key-rate-limit doc (#1113)
Co-authored-by: 澄潭 <zty98751@alibaba-inc.com> Co-authored-by: Kent Dong <ch3cho@qq.com>
This commit is contained in:
@@ -1,13 +1,18 @@
|
|||||||
# 功能说明
|
---
|
||||||
|
title: 基于 Key 集群限流
|
||||||
|
keywords: [higress, rate-limit]
|
||||||
|
description: 基于 Key 集群限流插件配置参考
|
||||||
|
---
|
||||||
|
|
||||||
`key-cluster-rate-limit`插件实现了基于特定键值实现集群限流,键值来源可以是 URL 参数、HTTP 请求头、客户端 IP 地址、consumer 名称、cookie中 key 名称
|
## 功能说明
|
||||||
|
|
||||||
|
`cluster-key-rate-limit` 插件基于 Redis 实现集群限流,适用于需要跨多个 Higress Gateway 实例实现全局一致速率限制的场景。
|
||||||
|
限流所使用的 Key 可以来源于 URL 参数、HTTP 请求头、客户端 IP 地址、消费者名称或 Cookie 中的 Key。
|
||||||
|
|
||||||
|
## 配置说明
|
||||||
# 配置说明
|
|
||||||
|
|
||||||
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
||||||
| ----------------------- | ------ | ---- | ------ |---------------------------------------------------------------------------|
|
| ----------------------- | ------ | ---- | ------ |-----------------------------------------------------------------------------|
|
||||||
| rule_name | string | 是 | - | 限流规则名称,根据限流规则名称 + 限流类型 + 限流 key 名称 + 限流 key 对应的实际值来拼装 redis key |
|
| rule_name | string | 是 | - | 限流规则名称,根据限流规则名称 + 限流类型 + 限流 key 名称 + 限流 key 对应的实际值来拼装 redis key |
|
||||||
| rule_items | array of object | 是 | - | 限流规则项,按照 rule_items 下的排列顺序,匹配第一个 rule_item 后命中限流规则,后续规则将被忽略 |
|
| rule_items | array of object | 是 | - | 限流规则项,按照 rule_items 下的排列顺序,匹配第一个 rule_item 后命中限流规则,后续规则将被忽略 |
|
||||||
| show_limit_quota_header | bool | 否 | false | 响应头中是否显示 `X-RateLimit-Limit`(限制的总请求数)和 `X-RateLimit-Remaining`(剩余还可以发送的请求数) |
|
| show_limit_quota_header | bool | 否 | false | 响应头中是否显示 `X-RateLimit-Limit`(限制的总请求数)和 `X-RateLimit-Remaining`(剩余还可以发送的请求数) |
|
||||||
@@ -15,10 +20,10 @@
|
|||||||
| rejected_msg | string | 否 | Too many requests | 请求被限流时,返回的响应体 |
|
| rejected_msg | string | 否 | Too many requests | 请求被限流时,返回的响应体 |
|
||||||
| redis | object | 是 | - | redis 相关配置 |
|
| redis | object | 是 | - | redis 相关配置 |
|
||||||
|
|
||||||
`rule_items`中每一项的配置字段说明
|
`rule_items` 中每一项的配置字段说明。
|
||||||
|
|
||||||
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
||||||
| --------------------- | --------------- | -------------------------- | ------ | ------------------------------------------------------------ |
|
| --------------------- | --------------- |----------------------| ------ |----------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| limit_by_header | string | 否,`limit_by_*` 中选填一项 | - | 配置获取限流键值的来源 HTTP 请求头名称 |
|
| limit_by_header | string | 否,`limit_by_*` 中选填一项 | - | 配置获取限流键值的来源 HTTP 请求头名称 |
|
||||||
| limit_by_param | string | 否,`limit_by_*` 中选填一项 | - | 配置获取限流键值的来源 URL 参数名称 |
|
| limit_by_param | string | 否,`limit_by_*` 中选填一项 | - | 配置获取限流键值的来源 URL 参数名称 |
|
||||||
| limit_by_consumer | string | 否,`limit_by_*` 中选填一项 | - | 根据 consumer 名称进行限流,无需添加实际值 |
|
| limit_by_consumer | string | 否,`limit_by_*` 中选填一项 | - | 根据 consumer 名称进行限流,无需添加实际值 |
|
||||||
@@ -30,7 +35,7 @@
|
|||||||
| limit_by_per_ip | string | 否,`limit_by_*` 中选填一项 | - | 按规则匹配特定 IP,并对每个 IP 分别计算限流,配置获取限流键值的来源 IP 参数名称,从请求头获取,以 `from-header-对应的header名`,示例:`from-header-x-forwarded-for`,直接获取对端 socket ip,配置为 `from-remote-addr` |
|
| limit_by_per_ip | string | 否,`limit_by_*` 中选填一项 | - | 按规则匹配特定 IP,并对每个 IP 分别计算限流,配置获取限流键值的来源 IP 参数名称,从请求头获取,以 `from-header-对应的header名`,示例:`from-header-x-forwarded-for`,直接获取对端 socket ip,配置为 `from-remote-addr` |
|
||||||
| limit_keys | array of object | 是 | - | 配置匹配键值后的限流次数 |
|
| limit_keys | array of object | 是 | - | 配置匹配键值后的限流次数 |
|
||||||
|
|
||||||
`limit_keys`中每一项的配置字段说明
|
`limit_keys` 中每一项的配置字段说明。
|
||||||
|
|
||||||
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
||||||
| ---------------- | ------ | ------------------------------------------------------------ | ------ | ------------------------------------------------------------ |
|
| ---------------- | ------ | ------------------------------------------------------------ | ------ | ------------------------------------------------------------ |
|
||||||
@@ -40,21 +45,19 @@
|
|||||||
| query_per_hour | int | 否,`query_per_second`,`query_per_minute`,`query_per_hour`,`query_per_day` 中选填一项 | - | 允许每小时请求次数 |
|
| query_per_hour | int | 否,`query_per_second`,`query_per_minute`,`query_per_hour`,`query_per_day` 中选填一项 | - | 允许每小时请求次数 |
|
||||||
| query_per_day | int | 否,`query_per_second`,`query_per_minute`,`query_per_hour`,`query_per_day` 中选填一项 | - | 允许每天请求次数 |
|
| query_per_day | int | 否,`query_per_second`,`query_per_minute`,`query_per_hour`,`query_per_day` 中选填一项 | - | 允许每天请求次数 |
|
||||||
|
|
||||||
`redis`中每一项的配置字段说明
|
`redis` 中每一项的配置字段说明。
|
||||||
|
|
||||||
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
| 配置项 | 类型 | 必填 | 默认值 | 说明 |
|
||||||
| ------------ | ------ | ---- | ---------------------------------------------------------- | --------------------------- |
|
| ------------ | ------ | ---- | ---------------------------------------------------------- |---------------------------------------------------------------------------|
|
||||||
| service_name | string | 必填 | - | redis 服务名称,带服务类型的完整 FQDN 名称,例如 my-redis.dns、redis.my-ns.svc.cluster.local |
|
| service_name | string | 必填 | - | redis 服务名称,带服务类型的完整 FQDN 名称,例如 my-redis.dns、redis.my-ns.svc.cluster.local |
|
||||||
| service_port | int | 否 | 服务类型为固定地址(static service)默认值为80,其他为6379 | 输入redis服务的服务端口 |
|
| service_port | int | 否 | 服务类型为固定地址(static service)默认值为80,其他为6379 | 输入redis服务的服务端口 |
|
||||||
| username | string | 否 | - | redis 用户名 |
|
| username | string | 否 | - | redis 用户名 |
|
||||||
| password | string | 否 | - | redis 密码 |
|
| password | string | 否 | - | redis 密码 |
|
||||||
| timeout | int | 否 | 1000 | redis 连接超时时间,单位毫秒 |
|
| timeout | int | 否 | 1000 | redis 连接超时时间,单位毫秒 |
|
||||||
|
|
||||||
|
## 配置示例
|
||||||
|
|
||||||
|
### 识别请求参数 apikey,进行区别限流
|
||||||
# 配置示例
|
|
||||||
|
|
||||||
## 识别请求参数 apikey,进行区别限流
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
rule_name: default_rule
|
rule_name: default_rule
|
||||||
@@ -81,9 +84,7 @@ redis:
|
|||||||
show_limit_quota_header: true
|
show_limit_quota_header: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 识别请求头 x-ca-key,进行区别限流
|
||||||
|
|
||||||
## 识别请求头 x-ca-key,进行区别限流
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
rule_name: default_rule
|
rule_name: default_rule
|
||||||
@@ -110,22 +111,20 @@ redis:
|
|||||||
show_limit_quota_header: true
|
show_limit_quota_header: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 根据请求头 x-forwarded-for 获取对端 IP,进行区别限流
|
||||||
|
|
||||||
## 根据请求头 x-forwarded-for 获取对端IP,进行区别限流
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
rule_name: default_rule
|
rule_name: default_rule
|
||||||
rule_items:
|
rule_items:
|
||||||
- limit_by_per_ip: from-header-x-forwarded-for
|
- limit_by_per_ip: from-header-x-forwarded-for
|
||||||
limit_keys:
|
limit_keys:
|
||||||
# 精确ip
|
# 精确 IP
|
||||||
- key: 1.1.1.1
|
- key: 1.1.1.1
|
||||||
query_per_day: 10
|
query_per_day: 10
|
||||||
# ip段,符合这个ip段的ip,每个ip 100qpd
|
# IP 段,符合这个 IP 段的 IP,每个 IP 100qpd
|
||||||
- key: 1.1.1.0/24
|
- key: 1.1.1.0/24
|
||||||
query_per_day: 100
|
query_per_day: 100
|
||||||
# 兜底用,即默认每个ip 1000qpd
|
# 兜底用,即默认每个 IP 1000 qpd
|
||||||
- key: 0.0.0.0/0
|
- key: 0.0.0.0/0
|
||||||
query_per_day: 1000
|
query_per_day: 1000
|
||||||
redis:
|
redis:
|
||||||
@@ -133,9 +132,7 @@ redis:
|
|||||||
show_limit_quota_header: true
|
show_limit_quota_header: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 识别 consumer,进行区别限流
|
||||||
|
|
||||||
## 识别consumer,进行区别限流
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
rule_name: default_rule
|
rule_name: default_rule
|
||||||
@@ -162,9 +159,7 @@ redis:
|
|||||||
show_limit_quota_header: true
|
show_limit_quota_header: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 识别 Cookie 中的键值对,进行区别限流
|
||||||
|
|
||||||
## 识别cookie中的键值对,进行区别限流
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
rule_name: default_rule
|
rule_name: default_rule
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
module github.com/alibaba/higress/plugins/wasm-go/extensions/key-cluster-rate-limit
|
module cluster-key-rate-limit
|
||||||
|
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user