- 文档首页
容器服务
容器服务 VKE
用户指南
网络
路由(Ingress)
ALB Ingress
自定义转发规则配置示例
配置转发流量重写
配置转发流量重写
ALB Ingress 支持重写转发规则,当请求经过 ALB 时,ALB 可以直接改写请求路径,向后端服务器请求新路径内容,帮助您灵活地变更后端业务。
- 已安装 alb-ingress-controller 组件,并升级至 v0.35.0 及以上版本。详情请参见 升级组件。
- 配置 重写 转发动作时,必须同时配置 转发至 转发动作。更多使用限制和注意事项,请参见 创建转发规则(标准版)。
说明
仅对接 ALB 标准版时支持使用控制台配置,如需对接 ALB 基础版,请参见下文中的 YAML 配置。
- 在集群列表页面,单击需要配置路由规则的目标集群。
- 在集群管理页面的左侧导航栏中,选择 服务与路由 > 路由规则,单击 创建路由规则。
- 在 Ingress 类型 配置项中,选择 应用型负载均衡 ALB。
- 在 自定义转发规则 配置项中,勾选 启用,开启自定义转发规则,并配置转发规则详情。
ALB Ingress 支持通过 Annotation 配置转发流量重写规则。对接 ALB 标准版和基础版时的配置略有不同。
ALB 标准版的配置示例和注解说明,如下所示:
注意
注解中的{{service-name}}字段必须与spec.rules中配置的后端服务名称对应一致,例如在本例中,正确的注解为ingress.vke.volcengine.com/loadbalancer-actions.service-demo。
ingress.vke.volcengine.com/loadbalancer-actions.{{service-name}}注解中的参数说明如下表所示。
ALB 基础版的配置示例和注解说明,如下所示:
ingress.vke.volcengine.com/loadbalancer-rules-configs注解中的参数说明如下表所示。
说明
ALB 标准版和基础版的转发规则详情界面略有不同,本文以查看 ALB 标准版界面为例。
- 单击左侧导航栏中 实例管理,在实例列表中选择目标 ALB 实例,在 操作 栏中单击 配置监听器。
-
- 在 监听器 页面中,选择目标监听器,在 操作 栏中单击 编辑转发规则,查看当前监听器的转发规则。可以看到新增的重写转发规则。
-
- 单击转发规则中的
,支持查看规则详情。规则配置详情,应该与下发的规则一致。
-
使用 ALB Ingress 中配置的域名访问服务。其中14.***.***.***为 ALB 公网 IP 地址。
预期结果如下,当访问请求的域名为example.com,原始路径为/时,路径被改写为/aaa,能够通过 ALB Ingress 正确访问到后端的服务。
当对接 ALB 标准版时,支持基于正则表达式的匹配和替换,基本规则如下:
- 允许在 Ingress 的path中填写一个或多个正则表达式,同时支持填写多个变量()。然后在rewriteConfig.path中通过 ${1}、${2} 或 ${3} 获取一个或多个变量,最多支持获取三个变量。
- 支持基于正则表达式匹配的结果作为参数自由组合,拼接出您想要的重写规则。
- 通过正则表达式替换的逻辑为:客户端的请求匹配到正则表达式,正则表达式中有多个(),且rewriteConfig.path注解中含有变量 ${1}、${2}和 ${3}中的一个或多个。
ALB 标准版的匹配示例,如下所示:
注意
注解中的{{service-name}}字段必须与spec.rules中配置的后端服务名称对应一致,例如在本例中,正确的注解为ingress.vke.volcengine.com/loadbalancer-actions.service-demo。
说明
由于 ALB 产品中规定正则表达式必须以~开头,同时 Kubernetes 要求 Ingress 资源中spec的path字段中必须带有前缀 /。为同时兼容两者的要求,因此在spec的 path 字段中正则表达式写为 /~gateway(/|$)(.*) 的形式,实际上生效的字段为 ~gateway(/|$)(.*)。详情请参见 创建转发规则。 当对接 ALB 基础版时,支持基于正则表达式的匹配和替换,基本规则如下:
- Host 一致性:Annotation 中的 host 必须与 spec 中的 host 完全一致。
- 若 spec 中的 path 为静态路径(如 /demo),则 Annotation 中的 path 直接填写相同值 /demo。
- 若 spec 中的 path 为正则表达式(如 /~/(.*)),则 Annotation 中的 path 需要去掉开头的 /,修改为 ~/(.*)。
- 允许在 Ingress 的path中填写一个或多个正则表达式,同时支持填写多个变量()。然后在 rewriteURI 中通过 ${1}、${2} 或 ${3} 获取一个或多个变量,最多支持获取三个变量。
- 支持基于正则表达式匹配的结果作为参数自由组合,拼接出您想要的重写规则。
- 通过正则表达式替换的逻辑为:客户端的请求匹配到正则表达式,正则表达式中有多个(),且rewriteURI注解中含有变量 ${1}、${2}和 ${3}中的一个或多个。
说明
例如:当您在 Annotation 中将 path 配置为 ~gateway/(.*)/(.*)/aaa,rewriteURI 配置为 /${1}/${2} 时。如果客户端发送请求的路径为 /gateway/ccc/bbb/aaa,则 path 会匹配到 ~gateway/(.*)/(.*)/aaa,rewriteURI 会把 ${1} 替换为 ccc,${2} 替换为 bbb,最终后端服务器接收到的请求路径为 /ccc/bbb。
ALB 基础版的配置示例,如下所示:
说明
由于 ALB 产品中规定正则表达式必须以~开头,同时 Kubernetes 要求 Ingress 资源中spec的path字段中必须带有前缀 /。为同时兼容两者的要求,因此在spec的 path 字段中正则表达式写为 /~gateway(/|$)(.*) 的形式,实际上生效的字段为 ~gateway(/|$)(.*)。详情请参见 创建转发规则。
最近更新时间:2026.04.07 14:19:46