Updated on 2024-06-26 GMT+08:00

Configuring URL Rewriting for a LoadBalancer Ingress

Dedicated LoadBalancer ingresses allow you to rewrite the URLs that match a regular expression. To rewrite the URL for such an ingress, do as follows:

  • Configure a path that matches a regular expression for the ingress, for example, /first/(.*)/(.*)/end.
  • Configure a rewrite annotation to match the regular expression in the path.

For example:

  • Set path to /first/(.*)/(.*)/end and annotation to /$1/$2. When the request sent by the user is /first/aaa/bbb/end, the path matches /first/(.*)/(.*)/end. The rewriting rule replaces $1 with aaa and $2 with bbb, the request path received by the backend server is /aaa/bbb.
  • Set path to /first/(.*)/end and annotation to /newpath/$1. When the request sent by the user is /first/aaa/end, the path matches /first/(.*)/end. The rewriting rule replaces $1 with aaa, the request path received by the backend server is /newpath/aaa.

Notes and Constraints

  • The advanced forwarding policy of LoadBalancer ingresses is available only to dedicated load balancers.
  • The advanced forwarding policy of LoadBalancer ingresses is available only in clusters of version v1.23.14-r0, v1.25.9-r0, v1.28.4-r0, or later.

Configuring an Ingress URL Rewriting Rule Using YAML

URL rewriting rules of an ingress can be configured using annotations. The following is an example:

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       # Rewrite path
spec:
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /first/(.*)/(.*)/end      # This path will be rewritten.
            backend:
              service:
                name: test-service
                port:
                  number: 8888
            property:
              ingress.beta.kubernetes.io/url-match-mode: REGEX
            pathType: ImplementationSpecific
  ingressClassName: cce
Table 1 Key parameters

Parameter

Mandatory

Type

Description

kubernetes.io/elb.rewrite-target

Yes

String

Information about the rewritten path.

Format: A proper rule matching a regular expression must start with a slash (/).

Parameter: This configuration takes effect on the URL of a single ingress matching the regular expression. After the configuration is deleted, the target URL rewriting rule will be automatically cleared.

Either this annotation or the annotation of a grayscale release can be configured.

Use curl to verify the rewriting, where ${ELB_IP} is the IP address accessed by the target ingress.

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

The access path will be rewritten to /aaa/bbb.