-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
URL重写 #54
Comments
URL重写需求需求目标BFE引擎提供了丰富的URL重写能力,包含对host、path、query等三部分url信息的修改操作。 基于bfe-Ingress-controller的注解解析能力,将用户配置的注解转换成BFE引擎的相关配置文件,结合BFE引擎URL重写能力,实现流量的URL重写。 竞品调研
需求分析
Annotation设计
rewrite-url param格式
Examplebfe.ingress.kubernetes.io/rewrite-url.host: '[{"params": "baidu.com", "when": "AfterLocation"}]'
bfe.ingress.kubernetes.io/rewrite-url.path: '[{"params": "/bar"}]'
bfe.ingress.kubernetes.io/rewrite-url.query-rename: >-
[
{
"params": {"name": "user"},
"when": "AfterLocation",
"order": 1
}
] 重写时机兼容Ingress注解参数值为列表,列表中的每一项对应一个回调点的rewrite动作。用户可通过设置参数中的 需注意,在同一个注解中,回调点不可重复。 优先级设定Ingress注解参数中的 // 下例中,先执行query rename,再删除其他query中的kv键值对
// 最终结果:仅保留user键值对,且该参数是由name重写的。
bfe.ingress.kubernetes.io/rewrite-url.query-rename: '[{"params": {"name": "user"}, "order": 1}}]'
bfe.ingress.kubernetes.io/rewrite-url.query-del-all-except: '[{"params": "user", "order": 2}}]' 规则约束
|
设计方案主要任务
从用户的Ingress配置中,解析出重写时机、流量识别条件与重写动作,并转换成BFE引擎的URL重写配置文件。
BFE引擎的URL重写时机是确认目标集群后,若引擎升级后,可支持更多重写时机。如下所示。
设计中需考虑兼容BFE引擎hook点升级。 实现方案Ingress 配置转换Ingress 配置kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: ingress-test
namespace: ingress-bfe
annotations:
kubernetes.io/ingress.class: bfe
bfe.ingress.kubernetes.io/rewrite-url.host: >-
[
{
"params": "bar.com",
"when": "AfterLocation"
}
]
bfe.ingress.kubernetes.io/rewrite-url.path-prefix-add: >-
[
{
"params": "/service"
"when": "AfterLocation"
}
]
spec:
rules:
- host: "foo.com"
http:
paths:
- path: /whoami
pathType: Prefix
backend:
service:
name: whoami
port:
number: 80 Ingress配置文件中,共有四个字段。
BFE URL重写配置{
"Version": "1",
"Config": {
"default": [
{
"Cond": "req_host_in(\"foo.com\") && req_path_prefix_in(\"/whoami\", false)",
"Actions": [
{
"Cmd": "HOST_SET",
"Params": ["bar.com"]
},
{
"Cmd": "PATH_PREFIX_ADD",
"Params": ["/service"]
}
],
"Last": true
}
]
}
} 配置具体含义如下。
转换规则
hook点升级兼容
|
预期这个 annotation的值是 JSON 格式还是自定义格式? |
这个 |
JSON格式,已修改样例。 |
移除 |
背景
BFE 支持对流量进行URL重写,希望 bfe-ingress-controller 实现该功能。
配置方式
Ingress 资源内
设计方案
#54 (comment)
The text was updated successfully, but these errors were encountered: