更新时间:2024-12-04 GMT+08:00

ELB Ingress配置Rewrite重写

独享型ELB的Ingress支持为正则匹配的URL配置Rewrite重写的能力。规则如下:

  • 为ingress配置一个path为正则匹配的URL,如 /first/(.*)/(.*)/end
  • 配置rewrite重写的注解,匹配path中的正则表达式

例如 :

  • path 配置为 /first/(.*)/(.*)/end,注解配置为 /$1/$2。当客户发送的请求为 /first/aaa/bbb/end 时,path会匹配到 /first/(.*)/(.*)/end,重写规则会把 $1 替换成 aaa,$2替换成 bbb,最终后端服务接收到的请求路径为 /aaa/bbb。
  • path配置为 /first/(.*)/end,注解配置为 /newpath/$1。当客户发送的请求为 /first/aaa/end 时,path会匹配到 /first/(.*)/end,重写规则会把 $1 替换成 aaa,最终后端服务接收到的请求路径为 /newpath/aaa。

约束与限制

  • ELB Ingress高级转发策略仅支持使用独享型ELB。
  • ELB Ingress高级转发策略支持的集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上。

使用YAML配置Ingress重写URL规则

Ingress重写URL规则可通过注解实现,示例如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-rewrite-url
  namespace: default
  annotations:
    kubernetes.io/elb.id: df76342f-e898-402a-bac8-bde5bf974da8
    kubernetes.io/elb.class: performance
    kubernetes.io/elb.port: '80'
    kubernetes.io/elb.rewrite-target: /$1/$2       # 重写路径的配置
spec:
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /first/(.*)/(.*)/end      # 该path会被重写
            backend:
              service:
                name: test-service
                port:
                  number: 8888
            property:
              ingress.beta.kubernetes.io/url-match-mode: REGEX
            pathType: ImplementationSpecific
  ingressClassName: cce
表1 关键参数说明

参数

是否必填

参数类型

描述

kubernetes.io/elb.rewrite-target

string

重写路径的信息。

格式说明:以 "/" 开头的合理的正则匹配规则。

参数说明:对单个Ingress下正则匹配的URL转发规则生效,配置删除后自动清理对应的重写规则。

该注解不能和灰度发布的注解一起配置。

使用curl测试重写的能力,其中${ELB_IP}为Ingress访问的IP:

# curl -H "Host:example.com" ${ELB_IP}/first/aaa/bbb/end

最终访问路径会被重写为 /aaa/bbb。