higress
higress copied to clipboard
基于ip的限流插件
key-rate-limit插件目前只支持limit_by_header和limit_by_param 2种限流维度,希望插件能加上基于client ip的限流 或 新插件实现 需求:
- 每个client请求达到阈值触发限流并可自定义的respon code和respon text
- 基于client ip的策略可与 limit_by_header 或 limit_by_param同时启用不冲突
- 基于client ip的策略支持 令牌、桶漏、滑动窗口等主流限流算法
- 支持全局限流
计划后续基于插件中访问redis的能力来扩展实现这一能力
插件sdk已经支持redis api,欢迎认领
这个是go的插件吗,如果是go的话,我这边可以尝试下,请帮忙分配下,感谢 @johnlanni
@johnlanni
插件是还没更新么,在官方文档中还只有limit_by_header和limit_by_param
@johnlanni 插件是还没更新么,在官方文档中还只有limit_by_header和limit_by_param
@wapmnw 集群限流的插件需要使用redis的能力,但envoy中使用redis的能力还未开源,开源后我这边会继续跟进这个功能,目前已经开发了一部分,但无法调试和使用
@johnlanni 插件是还没更新么,在官方文档中还只有limit_by_header和limit_by_param
@wapmnw 集群限流的插件需要使用redis的能力,但envoy中使用redis的能力还未开源,开源后我这边会继续跟进这个功能,目前已经开发了一部分,但无法调试和使用
好的明白了,谢谢
@hanxiantao 最新发布的1.4.0-rc.1已经支持插件里访问redis了,可以试试
@hanxiantao 最新发布的1.4.0-rc.1已经支持插件里访问redis了,可以试试
好的
集群中的redis地址要怎么写才对呢? 我在default namespace下部署了一个redis,service就叫redis,没有密码,默认端口
我的wasm中配置这样的
spec:
matchRules:
- config:
redis:
service_name: redis.default
rule_items:
- limit_by_per_header: X-USER
limit_keys:
- key: regexp:.*
token_per_second: 10
rule_name: default_rule
configDisable: false
ingress:
- baichuan
phase: UNSPECIFIED_PHASE
priority: 600
但是日志老报错,我不确定这个格式要怎么写了
[Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][critical][wasm] wasm log: failed to init redis: error status returned by host: bad argument
[Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][warning][wasm] wasm log: [ai-token-ratelimit] parse rule config failed: error status returned by host: bad argument
我尝试过 redis://redis.static
redis
都没效果
我看到wasm-go中用的是 ClusterName() 方法,这在evoy内部有啥自己转换机制吗?
https://github.com/alibaba/higress/blob/0ce52de59b2416193fdb62854210142aceef98f5/plugins/wasm-go/pkg/wrapper/redis_wrapper.go#L114
集群中的redis地址要怎么写才对呢? 我在default namespace下部署了一个redis,service就叫redis,没有密码,默认端口
我的wasm中配置这样的
spec: matchRules: - config: redis: service_name: redis.default rule_items: - limit_by_per_header: X-USER limit_keys: - key: regexp:.* token_per_second: 10 rule_name: default_rule configDisable: false ingress: - baichuan phase: UNSPECIFIED_PHASE priority: 600
但是日志老报错,我不确定这个格式要怎么写了
[Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][critical][wasm] wasm log: failed to init redis: error status returned by host: bad argument [Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][warning][wasm] wasm log: [ai-token-ratelimit] parse rule config failed: error status returned by host: bad argument
我尝试过
redis://redis.static
redis
都没效果 我看到wasm-go中用的是 ClusterName() 方法,这在evoy内部有啥自己转换机制吗?https://github.com/alibaba/higress/blob/0ce52de59b2416193fdb62854210142aceef98f5/plugins/wasm-go/pkg/wrapper/redis_wrapper.go#L114
创建一条路由规则目标服务选择对应的redis服务,然后配置时使用控制台中服务列表的服务名称,再尝试下 ps:因为我这边手头没有现成的示例,可以先试下
集群中的redis地址要怎么写才对呢? 我在default namespace下部署了一个redis,service就叫redis,没有密码,默认端口 我的wasm中配置这样的
spec: matchRules: - config: redis: service_name: redis.default rule_items: - limit_by_per_header: X-USER limit_keys: - key: regexp:.* token_per_second: 10 rule_name: default_rule configDisable: false ingress: - baichuan phase: UNSPECIFIED_PHASE priority: 600
但是日志老报错,我不确定这个格式要怎么写了
[Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][critical][wasm] wasm log: failed to init redis: error status returned by host: bad argument [Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][warning][wasm] wasm log: [ai-token-ratelimit] parse rule config failed: error status returned by host: bad argument
我尝试过
redis://redis.static
redis
都没效果 我看到wasm-go中用的是 ClusterName() 方法,这在evoy内部有啥自己转换机制吗? https://github.com/alibaba/higress/blob/0ce52de59b2416193fdb62854210142aceef98f5/plugins/wasm-go/pkg/wrapper/redis_wrapper.go#L114创建一条路由规则目标服务选择对应的redis服务,然后配置时使用控制台中服务列表的服务名称,再尝试下 ps:因为我这边手头没有现成的示例,可以先试下
可以了,我创建了一个redis.dns的服务,将它指向了redis.default.svc就好了,配置中service_name换成redis.dns
集群中的redis地址要怎么写才对呢? 我在default namespace下部署了一个redis,service就叫redis,没有密码,默认端口 我的wasm中配置这样的
spec: matchRules: - config: redis: service_name: redis.default rule_items: - limit_by_per_header: X-USER limit_keys: - key: regexp:.* token_per_second: 10 rule_name: default_rule configDisable: false ingress: - baichuan phase: UNSPECIFIED_PHASE priority: 600
但是日志老报错,我不确定这个格式要怎么写了
[Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][critical][wasm] wasm log: failed to init redis: error status returned by host: bad argument [Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][warning][wasm] wasm log: [ai-token-ratelimit] parse rule config failed: error status returned by host: bad argument
我尝试过
redis://redis.static
redis
都没效果 我看到wasm-go中用的是 ClusterName() 方法,这在evoy内部有啥自己转换机制吗? https://github.com/alibaba/higress/blob/0ce52de59b2416193fdb62854210142aceef98f5/plugins/wasm-go/pkg/wrapper/redis_wrapper.go#L114创建一条路由规则目标服务选择对应的redis服务,然后配置时使用控制台中服务列表的服务名称,再尝试下 ps:因为我这边手头没有现成的示例,可以先试下
可以了,我创建了一个redis.dns的服务,将它指向了redis.default.svc就好了,配置中service_name换成redis.dns
好的,我看很多人都有遇到这个问题,我后续会补充下文档,包含docker-compose部署和在控制台中怎么配置
集群中的redis地址要怎么写才对呢? 我在default namespace下部署了一个redis,service就叫redis,没有密码,默认端口 我的wasm中配置这样的
spec: matchRules: - config: redis: service_name: redis.default rule_items: - limit_by_per_header: X-USER limit_keys: - key: regexp:.* token_per_second: 10 rule_name: default_rule configDisable: false ingress: - baichuan phase: UNSPECIFIED_PHASE priority: 600
但是日志老报错,我不确定这个格式要怎么写了
[Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][critical][wasm] wasm log: failed to init redis: error status returned by host: bad argument [Envoy (Epoch 0)] [2024-06-26 03:07:42.131][32][warning][wasm] wasm log: [ai-token-ratelimit] parse rule config failed: error status returned by host: bad argument
我尝试过
redis://redis.static
redis
都没效果 我看到wasm-go中用的是 ClusterName() 方法,这在evoy内部有啥自己转换机制吗? https://github.com/alibaba/higress/blob/0ce52de59b2416193fdb62854210142aceef98f5/plugins/wasm-go/pkg/wrapper/redis_wrapper.go#L114创建一条路由规则目标服务选择对应的redis服务,然后配置时使用控制台中服务列表的服务名称,再尝试下 ps:因为我这边手头没有现成的示例,可以先试下
可以了,我创建了一个redis.dns的服务,将它指向了redis.default.svc就好了,配置中service_name换成redis.dns
好的,我看很多人都有遇到这个问题,我后续会补充下文档,包含docker-compose部署和在控制台中怎么配置
请问已经更新了docker部署的集群key限流的文档了吗
请问已经更新了docker部署的集群key限流的文档了吗
这个暂时还没有,我这边也没太用过使用docker部署,也都是在Kubernetes中部署然后在控制台中加
请问已经更新了docker部署的集群key限流的文档了吗
这个暂时还没有,我这边也没太用过使用docker部署,也都是在Kubernetes中部署然后在控制台中加
请问docker单机部署的可以使用集群key限流吗?
请问已经更新了docker部署的集群key限流的文档了吗
这个暂时还没有,我这边也没太用过使用docker部署,也都是在Kubernetes中部署然后在控制台中加
请问docker单机部署的可以使用集群key限流吗?
插件是通用的,但是docker单机部署要怎么下发redis cluster的信息给envoy要试一下 我不太了解docker部署的使用方式,在Kubernetes中部署是在控制台中添加服务来源,然后手工加一条路由关联redis对应的服务,redis cluster的信息就会下发给envoy了 只要curl http://localhost:15000/clusters中有对应的redis cluster就可以访问redis了
请问已经更新了docker部署的集群key限流的文档了吗
这个暂时还没有,我这边也没太用过使用docker部署,也都是在Kubernetes中部署然后在控制台中加
请问docker单机部署的可以使用集群key限流吗?
然后昨天有人反馈 Docker compose 本地搭建 Redis开发环境,Redis cluster用 dns 模式连接不上,改成 static 模式 就可以连上,可能是这个导致的
请问已经更新了docker部署的集群key限流的文档了吗
这个暂时还没有,我这边也没太用过使用docker部署,也都是在Kubernetes中部署然后在控制台中加
请问docker单机部署的可以使用集群key限流吗?
然后昨天有人反馈 Docker compose 本地搭建 Redis开发环境,Redis cluster用 dns 模式连接不上,改成 static 模式 就可以连上,可能是这个导致的
我现在使用的就是 static模式, 但是依然连接不上, 有什么地方可以看见连接日志的吗, 我看go代码中是有一层这样的操作 config.redisClient = wrapper.NewRedisClusterClient(wrapper.FQDNCluster{ FQDN: serviceName, Port: int64(servicePort), })
请问已经更新了docker部署的集群key限流的文档了吗
这个暂时还没有,我这边也没太用过使用docker部署,也都是在Kubernetes中部署然后在控制台中加
请问docker单机部署的可以使用集群key限流吗?
然后昨天有人反馈 Docker compose 本地搭建 Redis开发环境,Redis cluster用 dns 模式连接不上,改成 static 模式 就可以连上,可能是这个导致的
我现在使用的就是 static模式, 但是依然连接不上, 有什么地方可以看见连接日志的吗, 我看go代码中是有一层这样的操作 config.redisClient = wrapper.NewRedisClusterClient(wrapper.FQDNCluster{ FQDN: serviceName, Port: int64(servicePort), })
插件初始化的时候如果连不上redis 会有个这个类似的报错的