Skip to content

Commit 85f11f8

Browse files
authored
feat: smartLimiter and dubbo support (#47)
Signed-off-by: yutao04 <[email protected]> Signed-off-by: yutao04 <[email protected]>
1 parent 738d26a commit 85f11f8

File tree

7 files changed

+91
-50
lines changed

7 files changed

+91
-50
lines changed

changelog/RoadMap 2022.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@
2626
* 【治理】支持流量染色
2727
* 【治理】支持WAF防护
2828

29-
### Hango 1.2.0(发布中)
29+
### Hango 1.2.0(已发布)
3030

3131
* 【多协议】支持基于dubbo bridge的dubbo协议转换能力
32-
* 【易用性】安全正则复杂度校验以支持拒绝复杂正则
32+
* 【易用性】支持插件的部分常规输入校验
3333
* 【治理】集成smartlimit,统一集群限流,本地限流实现
3434

35-
### Hango 1.3.0(规划中)
35+
### Hango 1.3.0(发布中)
3636

3737
* 【高可用】支持基于多集群的两地三中心高可用部署
3838
* 【高可用】支持基于Region、Zone、Sub-zone的区域路由优先能力

changelog/announcing-v1.2.0.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
### 描述
2+
本次更新是Hango正式版v1.2.0的发布。基于v1.1.0版本集成了dubbo bridge、基于SmartLimiter的自适应本地限流等功能
3+
4+
### 新功能
5+
6+
- [支持dubbo服务发现](https://github.com/hango-io/api-plane/pull/13)
7+
8+
- [支持SmartLimiter的本地限流](https://github.com/hango-io/hango-gateway/pull/47)
9+
10+
11+
### 工程增强
12+
13+
- [增加部分插件校验](https://github.com/hango-io/hango-gateway/pull/47)

install/helm/hango-gateway/charts/hango-gateway/templates/base/hango-gateway/hango-gateway-configmap.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,11 @@ data:
270270
cfg: |
271271
{"bundle":{"modules":[{"name":"plugin","kind":"plugin"},{"name":"limiter","kind":"limiter"},{"name":"meshregistry","kind":"meshregistry"}]},"enable":true,"global":{"service":"","istioNamespace":"hango-system","slimeNamespace":"hango-system","istioRev":"","configRev":"mesh-reg","configSources":[{"address":"ss://"}],"log":{"klogLevel":5,"logLevel":"info"},"misc":{"pathRedirect":"/ready->/meshregistry/ready,/pc->/meshregistry/pc,/nc->/meshregistry/nc,/zk->/meshregistry/zk,/zks->/meshregistry/zks,/xdsCache->/meshregistry/xdsCache","xdsSourceEnableIncPush":"true"}},"name":"bundle"}
272272
cfg_limiter: |
273-
{"enable":true,"general":{"disableAdaptive":true,"disableGlobalRateLimit":true,"disableInsertGlobalRateLimit":true},"kind":"limiter","mode":"BundleItem","name":"limiter"}
273+
{"enable":true,"general":{"disableInsertLocalRateLimit":true,"disableAdaptive":true,"disableGlobalRateLimit":true,"disableInsertGlobalRateLimit":true},"kind":"limiter","mode":"BundleItem","name":"limiter"}
274274
cfg_plugin: |
275275
{"enable":true,"kind":"plugin","mode":"BundleItem","name":"plugin"}
276276
cfg_meshregistry: |
277-
{"name":"meshregistry","kind":"meshregistry","enable":true,"mode":"BundleItem","general":{"LEGACY":{"MeshConfigFile":"","RevCrds":"","Mcp":{},"K8SSource":{"Enabled":false},"EurekaSource":{"Enabled":{{ .Values.registry.eureka.enable }},"Address":[{{ .Values.registry.eureka.address }}],"RefreshPeriod":"{{ .Values.registry.eureka.refresh_period }}","GatewayModel":true},"NacosSource":{"Enabled":{{ .Values.registry.nacos.enable }},"Address":[{{ .Values.registry.nacos.address }}],"GatewayModel":true,"Group":"{{ .Values.registry.nacos.service_group }}"}}}}
277+
{"name":"meshregistry","kind":"meshregistry","enable":true,"mode":"BundleItem","general":{"LEGACY":{"MeshConfigFile":"","RevCrds":"","Mcp":{},"K8SSource":{"Enabled":false},"EurekaSource":{"Enabled":{{ .Values.registry.eureka.enable }},"Address":[{{ .Values.registry.eureka.address }}],"RefreshPeriod":"{{ .Values.registry.eureka.refresh_period }}","GatewayModel":true},"NacosSource":{"Enabled":{{ .Values.registry.nacos.enable }},"Address":[{{ .Values.registry.nacos.address }}],"GatewayModel":true,"Group":"{{ .Values.registry.nacos.service_group }}"},"ZookeeperSource":{"Enabled":{{ .Values.registry.zk.enable }},"WaitTime":{{ .Values.registry.zk.refresh_period }},"GatewayModel":true,"Address":[{{ .Values.registry.zk.address }}]}}}}
278278
kind: ConfigMap
279279
metadata:
280280
name: slime-hango

install/helm/hango-gateway/charts/hango-gateway/templates/base/hango-gateway/hango-gateway-deploy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ spec:
2626
- name: NCE_PORT
2727
value: "10880"
2828
- name: NCE_JAVA_OPTS
29-
value: "-DistioNamespace={{ .Values.namespace }} -DistioName=istiod -DstartInformer=false -DresourceNamespace={{ .Values.namespace }} "
29+
value: "-DistioNamespace={{ .Values.namespace }} -DistioName=istiod -DstartInformer=false -DresourceNamespace={{ .Values.namespace }} -DmeshRegistryName=slime-hango"
3030
image: "{{.Values.images.hango_apiplane_image}}"
3131
name: tomcat
3232
volumeMounts:

install/helm/hango-gateway/charts/hango-gateway/templates/base/hango-gateway/hango-plugin-configmap.yaml

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -160,26 +160,24 @@ data:
160160
"name": "local-limiting"
161161
},
162162
"layouts": [
163-
{
164-
"key": "IsSafe",
165-
"alias": "是否线程独立",
166-
"type": "switch",
167-
"help": "默认使用锁机制保证安全;如果打开该字段,代表线程独立。限流规则上限为rate*proxy worker"
168-
},
169163
{
170164
"key": "limit_by_list",
171-
"alias": "限流标识列表",
165+
"alias": "限制规则列表",
172166
"type": "array",
173167
"layouts": [
174168
{
175169
"key": "headers",
176-
"alias": "限流headers",
170+
"alias": "请求头匹配",
177171
"type": "array",
178172
"layouts": [
179173
{
180174
"key": "headerKey",
181-
"alias": "限流header",
182-
"type": "input"
175+
"alias": "请求头名称",
176+
"type": "input",
177+
"rules": [
178+
"Required",
179+
"MaxLength(200)"
180+
]
183181
},
184182
{
185183
"key": "match_type",
@@ -195,16 +193,18 @@ data:
195193
"text": "正则表达式",
196194
"value": "safe_regex_match"
197195
}
196+
],
197+
"rules": [
198+
"Required"
198199
]
199200
},
200201
{
201202
"key": "value",
202203
"type": "input",
203204
"alias": "取值",
204-
"invisible": {
205-
"present_match": ["this", "match_type"],
206-
"present_match_invert": ["this", "match_type"]
207-
}
205+
"rules": [
206+
"Required"
207+
]
208208
}
209209
]
210210
},
@@ -214,7 +214,7 @@ data:
214214
"type": "number",
215215
"rules": [
216216
"Number",
217-
"MinNumber(0)"
217+
"MinNumber(1)"
218218
]
219219
},
220220
{
@@ -223,7 +223,7 @@ data:
223223
"type": "number",
224224
"rules": [
225225
"Number",
226-
"MinNumber(0)"
226+
"MinNumber(1)"
227227
]
228228
},
229229
{
@@ -232,7 +232,7 @@ data:
232232
"type": "number",
233233
"rules": [
234234
"Number",
235-
"MinNumber(0)"
235+
"MinNumber(1)"
236236
]
237237
},
238238
{
@@ -241,7 +241,7 @@ data:
241241
"type": "number",
242242
"rules": [
243243
"Number",
244-
"MinNumber(0)"
244+
"MinNumber(1)"
245245
]
246246
}
247247
]
@@ -654,6 +654,9 @@ data:
654654
"alias": "请求头名称",
655655
"type": "input"
656656
},
657+
"rules": [
658+
"MaxLength(200)"
659+
],
657660
{
658661
"key": "match_type",
659662
"alias": "匹配方式",
@@ -749,6 +752,9 @@ data:
749752
"alias": "响应头名称",
750753
"type": "input"
751754
},
755+
"rules": [
756+
"MaxLength(200)"
757+
],
752758
{
753759
"key": "match_type",
754760
"alias": "匹配方式",
@@ -807,7 +813,7 @@ data:
807813
"Required",
808814
"Number",
809815
"MinNumber(0)",
810-
"MaxNumber(99999999)"
816+
"MaxNumber(86400000)"
811817
]
812818
},
813819
{
@@ -822,7 +828,10 @@ data:
822828
"help": "支持输入具体的响应码及X..,如2..代表2XX响应码",
823829
"type": "input",
824830
"rules": [
825-
"Required"
831+
"Required",
832+
"Number",
833+
"MinNumber(200)",
834+
"MaxNumber(599)"
826835
]
827836
},
828837
{
@@ -833,7 +842,7 @@ data:
833842
"Required",
834843
"Number",
835844
"MinNumber(0)",
836-
"MaxNumber(99999999)"
845+
"MaxNumber(86400000)"
837846
]
838847
}
839848
]
@@ -866,13 +875,19 @@ data:
866875
"key": "queryString",
867876
"alias": "自定义查询参数",
868877
"help": "自定义查询参数参与key计算",
869-
"type": "multi_input"
878+
"type": "multi_input",
879+
"rules": [
880+
"MaxLength(200)"
881+
]
870882
},
871883
{
872884
"key": "headers",
873885
"alias": "自定义请求头",
874886
"type": "multi_input",
875-
"help": "自定义请求头参与key计算"
887+
"help": "自定义请求头参与key计算",
888+
"rules": [
889+
"MaxLength(200)"
890+
]
876891
}
877892
]
878893
}
@@ -1083,7 +1098,8 @@ data:
10831098
"this.operation": "delete"
10841099
},
10851100
"rules": [
1086-
"Required"
1101+
"Required",
1102+
"MaxLength(200)"
10871103
]
10881104
}
10891105
]
@@ -1158,12 +1174,12 @@ data:
11581174
"alias": "最小请求次数",
11591175
"help": "与错误百分比阈值搭配生效,仅在统计窗口内,最小请求次数与错误百分比阈值同时满足时触发熔断",
11601176
"type": "input",
1161-
"placeholder": "范围 [1, 4294967295] 之间",
1177+
"placeholder": "范围 [1, 1000000] 之间",
11621178
"rules": [
11631179
"Required",
11641180
"Number",
11651181
"MinNumber(1)",
1166-
"MaxNumber(4294967295)"
1182+
"MaxNumber(1000000)"
11671183
]
11681184
}
11691185
]
@@ -1194,13 +1210,13 @@ data:
11941210
{
11951211
"key": "consecutiveSlowRequests",
11961212
"alias": "连续慢响应次数",
1197-
"help": "与响应时间阈值,范围 [1, 4294967295] 之间,与慢响应时间阈值搭配生效,当连续有",
1213+
"help": "与响应时间阈值,范围 [1, 10000] 之间,与慢响应时间阈值搭配生效,当连续有",
11981214
"type": "input",
11991215
"rules": [
12001216
"Required",
12011217
"Number",
12021218
"MinNumber(1)",
1203-
"MaxNumber(4294967295)"
1219+
"MaxNumber(10000)"
12041220
]
12051221
}
12061222
]
@@ -1210,25 +1226,25 @@ data:
12101226
"alias": "统计窗口",
12111227
"help": "统计窗口,单位s,默认10s,最大值为120s",
12121228
"type": "input",
1213-
"placeholder": "单位s,范围(0.0,120.0)",
1229+
"placeholder": "单位s,范围[1, 120]",
12141230
"rules": [
12151231
"Required",
1216-
"FloatNumber(5)",
1217-
"MaxFloatNumber(119.999)",
1218-
"MinFloatNumber(0.00001)"
1232+
"Number",
1233+
"MinNumber(1)",
1234+
"MaxNumber(120)"
12191235
]
12201236
},
12211237
{
12221238
"key": "breakDuration",
12231239
"alias": "惩罚时间",
12241240
"help": "当触发熔断时的惩罚时间,单位s,在该时间内不再请求后端服务而之间返回熔断后的定制响应",
12251241
"type": "input",
1226-
"placeholder": "单位s,范围 (0.0, 10000]",
1242+
"placeholder": "单位s,范围 [1, 7200]",
12271243
"rules": [
12281244
"Required",
1229-
"FloatNumber(5)",
1230-
"MaxFloatNumber(10000.0)",
1231-
"MinFloatNumber(0.00001)"
1245+
"Number",
1246+
"MinNumber(1)",
1247+
"MaxNumber(7200)"
12321248
]
12331249
},
12341250
{
@@ -1259,15 +1275,17 @@ data:
12591275
"type": "input",
12601276
"alias": "响应头名称",
12611277
"rules": [
1262-
"Required"
1278+
"Required",
1279+
"MaxLength(200)"
12631280
]
12641281
},
12651282
{
12661283
"key": "value",
12671284
"type": "input",
12681285
"alias": "响应头值",
12691286
"rules": [
1270-
"Required"
1287+
"Required",
1288+
"MaxLength(200)"
12711289
]
12721290
}
12731291
]

install/helm/hango-gateway/charts/hango-gateway/templates/base/hango-gateway/plugin-managers.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,11 @@ spec:
5555
name: proxy.filters.http.iprestriction
5656
port: 80
5757
- enable: true
58+
inline:
59+
settings:
60+
stat_prefix: http_local_rate_limiter
5861
listenerType: Gateway
59-
name: proxy.filters.http.locallimit
62+
name: envoy.filters.http.local_ratelimit
6063
port: 80
6164
- enable: true
6265
listenerType: Gateway

install/helm/hango-gateway/charts/hango-gateway/values.yaml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ data_dir: /data
22
cluster_dns_domain: cluster.local
33

44
images:
5-
hango_apiplane_image: docker.io/hangoio/api-plane:1.1.0
6-
hango_portal_image: docker.io/hangoio/hango-portal:1.1.0
5+
hango_apiplane_image: docker.io/hangoio/api-plane:1.2.0
6+
hango_portal_image: docker.io/hangoio/hango-portal:1.2.0
77
hango_ui_image: docker.io/hangoio/hango-ui:v1.0.3-1e003c49
8-
istiod_image: docker.io/hangoio/istiod:hango-1.0.0-rc1
8+
istiod_image: docker.io/hangoio/pilot:hango-1.2.0-rc1
99
slime_image: docker.io/slimeio/slime-bundle-hango:hango-ee2bff9_linux_amd64
10-
hango_proxy_image: hangoio/envoy-proxy:v1.1.0-46f6660-amd64
10+
hango_proxy_image: hangoio/envoy-proxy:v1.2.1-215c540-amd64
1111

1212

1313
namespace: hango-system
@@ -43,4 +43,11 @@ registry:
4343
## 刷新eureka服务缓存的时间周期,默认15s,格式为: [正整数]s
4444
refresh_period: 15s
4545
## 注册中心实例地址;格式:整体以英文单引号包裹,单个地址以英文双引号包裹,多个地址用英文逗号分隔
46-
address: '"http://127.0.0.1:8761/eureka"'
46+
address: '"http://127.0.0.1:8761/eureka"'
47+
zk:
48+
## zookeeper注册中心功能开关(true 或 false)
49+
enable: false
50+
## 刷新zookeeper服务缓存的时间周期,默认15s,格式为: [正整数]s
51+
refresh_period: 15s
52+
## 注册中心实例地址;格式:整体以英文单引号包裹,单个地址以英文双引号包裹,多个地址用英文逗号分隔
53+
address: '"zookeeper.apigw-demo.svc.cluster.local:2181"'

0 commit comments

Comments
 (0)