Help Center/ Cloud Container Engine/ User Guide/ Networking/ Ingresses/ LoadBalancer Ingresses/ Configuring an Advanced Forwarding Policy for a LoadBalancer Ingress
Updated on 2025-08-19 GMT+08:00

Configuring an Advanced Forwarding Policy for a LoadBalancer Ingress

When a LoadBalancer ingress is created in a CCE cluster, CCE automatically provisions a listener for the load balancer associated with the ingress on ELB and adds forwarding policies. By default, the ingress routes incoming client requests based on the domain name and path and directs the requests through the listener to the appropriate backend server, either a node or a pod, for processing. During LoadBalancer ingress creation, CCE allows you to define custom forwarding rules and actions for flexible, fine-grained traffic distribution.

Figure 1 How an advanced forwarding policy operates

An advanced forwarding policy operates as follows:

  1. The client initiates a request to the LoadBalancer ingress.
  2. The load balancer evaluates the request against the forwarding rules defined in the advanced forwarding policy.
  3. The load balancer forwards the request to the appropriate backend server based on the action specified in the forwarding rule.
  4. The backend server returns a response to the client.

For details about the forwarding rules and actions supported by advanced forwarding policies, see Forwarding Rules and Forwarding Actions.

Prerequisites

  • A CCE standard or Turbo cluster is available, and the cluster version meets the requirements.
  • The cluster can be accessed using kubectl. For details, see Accessing a Cluster Using kubectl.

Notes and Constraints

CCE allows you to configure header writing/removal, rewriting, and limiting on requests, based on ELB's advanced forwarding for LoadBalancer ingresses. These functions are currently being rolled out, and availability depends on the actual regions that have been officially opened. To use some advanced forwarding actions that are not available on the console yet, submit a service ticket to enable required functions.

Forwarding Rules

LoadBalancer ingresses support advanced traffic routing by allowing you to configure forwarding rules using the kubernetes.io/elb.conditions.<svc-name> annotation. Incoming requests are evaluated against these rules. If the conditions are met, the requests are forwarded accordingly.

If you set up different rules for the same Service using the same annotation, they must all be matched for a request to go through. But if you set multiple values in the same rule, then the request only needs to match one of them. For example, if both Method and QueryString are configured, the traffic can be distributed only when both rules are met. However, if the Method value includes both GET and POST, the traffic can be distributed only when both rules are met and the request method is either GET or POST.

You can configure up to 10 advanced forwarding conditions (including domain names and paths) per ingress. Each individual value within a rule counts as one forwarding condition.

For example, if you define a domain name and a path for an ingress, there are two forwarding conditions, leaving eight remaining. If you then specify two HTTP methods, for example, GET and POST, two more forwarding conditions are used.

Table 1 ELB advanced forwarding rules

Forwarding Rule

Description

Reference

Cluster Version

HTTP request method

Route HTTP requests based on the request type (such as GET and POST). If a request matches the specified rule, the defined forwarding action is used.

An annotation example is as follows:

kubernetes.io/elb.conditions.<svc-name>: |  
  [{ 
    "type": "Method", 
    "methodConfig": { 
      "values": [ 
        "GET", 
        "POST" 
      ] 
    } 
  }]

For details about the configuration example and parameters of advanced forwarding rules, see Scenario 1: Configuring Advanced Forwarding Rules for a LoadBalancer Ingress.

  • v1.23: v1.23.18-r10 or later
  • v1.25: v1.25.16-r0 or later
  • v1.27: v1.27.16-r0 or later
  • v1.28: v1.28.13-r0 or later
  • v1.29: v1.29.8-r0 or later
  • v1.30: v1.30.4-r0 or later
  • Other clusters of later versions

HTTP request header

Route requests based on the specific information (such as User-Agent and Content-Type) in HTTP request headers. If a request matches the specified rule, the defined forwarding action is used.

An annotation example is as follows:

kubernetes.io/elb.conditions.<svc-name>: |  
  [{ 
    "type": "Header", 
    "headerConfig": { 
      "key": "gray-hello", 
      "values": [ 
        "value1", 
        "value2" 
      ] 
    } 
  }]

Cookie

Route requests based on the specified keys and values in cookies. If a request matches the specified rule, the defined forwarding action is used.

An annotation example is as follows:

kubernetes.io/elb.conditions.<svc-name>: |  
  [{ 
    "type": "Header", 
    "headerConfig": { 
      "key": "gray-hello", 
      "values": [ 
        "value1", 
        "value2" 
      ] 
    } 
  }]

Query string

Route requests based on the specific parameters and values of the query strings in the URLs. If a request matches the specified rule, the defined forwarding action is used.

An annotation example is as follows:

kubernetes.io/elb.conditions.<svc-name>: |  
  [{ 
    "type": "QueryString", 
    "queryStringConfig": { 
      "key": "querykey", 
      "values": [ 
        "queryvalue" 
      ] 
    } 
  }]

CIDR block

Route requests based on the source IP addresses from where the requests originate. If a request matches the specified rule, the defined forwarding action is used.

An annotation example is as follows:

kubernetes.io/elb.conditions.<svc-name>: |  
  [{ 
    "type": "SourceIp", 
    "sourceIpConfig": { 
      "values": [ 
        "192.168.0.0/16", 
        "172.16.0.0/16" 
      ] 
    }
  }]

Forwarding Actions

LoadBalancer ingresses allow you to define multiple forwarding actions through annotations. This gives you flexible control over how requests are handled. The supported forwarding actions include:

  • (Default) Forward to a backend server group: Additional actions like rewrite, CORS, write/remove header, and limit request are supported. Load balancers handle requests based on these additional actions before forwarding them to backend server groups. Among all the additional actions, limit request has the highest priority.
  • Redirect to another listener: HTTP requests can be redirected to an HTTPS listener.
  • Return a specific response body: Additional actions such as limit request are supported.
  • Forward to a custom backend server group: This action cannot be used together with grayscale release, return a specific response body, or redirect to another URL.
Table 2 ELB advanced forwarding actions

Forwarding Action

Additional Action

Description

Reference

Cluster Version

(Default) Forward to a backend server group

Rewrite

Rewrite the request paths.

An annotation example is as follows:

kubernetes.io/elb.rewrite-target: /rewritepath 

For details about the configuration example and parameters, see Configuring URL Rewriting for a LoadBalancer Ingress.

  • v1.23: v1.23.14-r0 or later
  • v1.25: v1.25.9-r0 or later
  • v1.27: v1.27.6-r0 or later
  • v1.28: v1.28.4-r0 or later
  • Other clusters of later versions

CORS

Support cross-origin access of resources.

An annotation example is as follows:

kubernetes.io/elb.cors-allow-origin: 'http://example.com'  # The origin that can be accessed
kubernetes.io/elb.cors-allow-headers: 'fake-header-1' # The allowed request header
kubernetes.io/elb.cors-expose-headers: 'fake-header-2' # The response header to be exposed
kubernetes.io/elb.cors-allow-methods: 'GET,POST' # The allowed HTTP request methods
kubernetes.io/elb.cors-allow-credentials: 'true' # Credentials can be sent.
kubernetes.io/elb.cors-max-age: '3600' # The cache duration of a pre-check request

For details about the configuration example and parameters, see Configuring Cross-Origin Access for LoadBalancer Ingresses.

  • v1.23: v1.23.18-r10 or later
  • v1.25: v1.25.16-r0 or later
  • v1.27: v1.27.16-r0 or later
  • v1.28: v1.28.13-r0 or later
  • v1.29: v1.29.8-r0 or later
  • v1.30: v1.30.4-r0 or later
  • Other clusters of later versions

Write/Remove header

Write or delete the configured header in a request before accessing the backend server.

An annotation example is as follows:

kubernetes.io/elb.actions.<svc-name>: |
  [{
      "type": "InsertHeader",
      "InsertHeaderConfig": {
        "key": "insertkey",
        "value_type": "USER_DEFINED",
        "value": "insertvalue"
      }
    },
   {
      "type": "RemoveHeader",
      "RemoveHeaderConfig": {
        "key": "removekey"
      }
    }
  }]

For details about the configuration example and parameters, see Example 1: Configuring Write/Remove Header for a LoadBalancer Ingress.

Limit request

Support rate limiting on requests.

An annotation example is as follows:

kubernetes.io/elb.actions.<svc-name>: |
  [{
     "type": "TrafficLimit", 
     "trafficLimitConfig": { 
       "QPS": 4,
       "perSourceIpQps": 2,
       "burst": 2
     } 
  }]

For details about the configuration example and parameters, see Example 3: Configuring Limit Request for a LoadBalancer Ingress.

  • v1.27: v1.27.16-r10 or later
  • v1.28: v1.28.15-r0 or later
  • v1.29: v1.29.10-r0 or later
  • v1.30: v1.30.6-r0 or later
  • Other clusters of later versions

Redirect to another listener (HTTP requests redirected to an HTTPS listener)

None

Forward HTTP access requests to an HTTPS listener.

An annotation example is as follows:

kubernetes.io/elb.ssl-redirect: 'true' 
kubernetes.io/elb.listen-ports: '[{"HTTP":80},{"HTTPS":443}]' # Forward HTTP requests to an HTTPS port.

For details about the configuration example and parameters, see Redirecting HTTP to HTTPS for a LoadBalancer Ingress.

  • v1.23: v1.23.14-r0 or later
  • v1.25: v1.25.9-r0 or later
  • v1.27: v1.27.6-r0 or later
  • v1.28: v1.28.4-r0 or later
  • Other clusters of later versions

Redirect to another URL

None

Redirect specific requests to a specified URL and return a 3xx return code.

An annotation example is as follows:

kubernetes.io/elb.redirect-url: https://example.com/testa   # Information about the redirection to a URL
kubernetes.io/elb.redirect-url-code: '301' # Code returned after the ingress is redirected to a URL

For details about the configuration example and parameters, see Configuring URL Redirection for a LoadBalancer Ingress.

Return a specific response body

None

Directly return a specific response body and do not continue to forward the response to the backend server.

An annotation example is as follows:

kubernetes.io/elb.actions.<svc-name>: |
  [{ 
     "type": "FixedResponse", 
     "fixedResponseConfig": { 
       "contentType": "text/plain", 
       "statusCode": "503",
       "messageBody": "503 error text"  
     } 
  }]

For details about the configuration example and parameters, see Example 2: Configuring Return a Specific Response Body for a LoadBalancer Ingress.

  • v1.25: v1.25.16-r10 or later
  • v1.27: v1.27.16-r10 or later
  • v1.28: v1.28.15-r0 or later
  • v1.29: v1.29.10-r0 or later
  • v1.30: v1.30.6-r0 or later
  • Other clusters of later versions

Limit request

Support rate limiting on requests.

An annotation example is as follows:

kubernetes.io/elb.actions.<svc-name>: |
  [{ 
     "type": "FixedResponse", 
     "fixedResponseConfig": { 
       "contentType": "text/plain", 
       "statusCode": "503",
       "messageBody": "503 error text"  
     } 
   },
  { 
     "type": "TrafficLimit", 
     "trafficLimitConfig": { 
       "QPS": 4,
       "perSourceIpQps": 2,
       "burst": 2
     } 
  }]

For details about the configuration example and parameters, see Example 3: Configuring Limit Request for a LoadBalancer Ingress.

  • v1.27: v1.27.16-r10 or later
  • v1.28: v1.28.15-r0 or later
  • v1.29: v1.29.10-r0 or later
  • v1.30: v1.30.6-r0 or later
  • Other clusters of later versions

Forward to a custom backend server group

Forward LoadBalancer ingress requests to both pods in the CCE cluster (default backend server group) and an ECS group (custom backend server group) located outside the cluster.

An annotation example is as follows:

kubernetes.io/elb.actions.<svc-name>: |
  [{ 
     "type": "ForwardPool", 
     "forwardConfig": [{ 
       "serviceName": "test",
       "servicePort": 80,
       "weight": 90,
       "type": "service"
       },{ 
       "poolID": "53d8516e-xxxx-xxxx-xxxx-b15ffd6b3cca", 
       "weight": 70,
       "type": "pool"
     }]
  }] 

For details about the configuration example and parameters, see Example 4: Configuring the Forward to a Custom Backend Server Group Action for a LoadBalancer Ingress.

  • v1.25: v1.25.16-r20 or later
  • v1.27: v1.27.16-r20 or later
  • v1.28: v1.28.15-r10 or later
  • v1.29: v1.29.10-r10 or later
  • v1.30: v1.30.6-r10 or later
  • v1.31: v1.31.4-r0 or later
  • Other clusters of later versions

Scenario 1: Configuring Advanced Forwarding Rules for a LoadBalancer Ingress

LoadBalancer ingresses can route traffic based on custom HTTP request methods, request headers, query strings, and source CIDR blocks. In this example, traffic is routed to the svc-hello1 Service only when the request path is /hello1 and the following advanced forwarding rules are met:

  • The request method is GET or POST.
  • The key in the request header is gray-hello, and the value is value1 or value2.
  • The key of the cookie is cookiekey1 and the value is cookievalue1, or the key of the cookie is cookiekey2 and the value is cookievalue2.
  • The key of the query string is querykey, and the value is queryvalue.
  • The source CIDR block is 192.168.0.0/16 or 172.16.0.0/16.

The operations and parameter settings are as follows:

  1. Use kubectl to access the cluster. For details, see Accessing a Cluster Using kubectl.
  2. Create a YAML file named ingress-test.yaml. The file name can be customized.

    vi ingress-test.yaml
    An example YAML file of an ingress created using an existing load balancer is as follows:
    apiVersion: networking.k8s.io/v1 
    kind: Ingress 
    metadata: 
      annotations: 
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.id: ab53c3b2-xxxx-xxxx-xxxx-5ac3eb2887be
        kubernetes.io/elb.port: '80'
        # The following annotation indicates that the advanced forwarding rules are configured for the svc-hello1 Service. The Service name must be the same as that in the backend field.
        kubernetes.io/elb.conditions.svc-hello1: |  
            [ 
              { 
                "type": "Method", 
                "methodConfig": { 
                  "values": [ 
                    "GET", 
                    "POST" 
                  ] 
                } 
              }, 
              { 
                "type": "Header", 
                "headerConfig": { 
                  "key": "gray-hello", 
                  "values": [ 
                    "value1", 
                    "value2" 
                  ] 
                } 
              }, 
              { 
                "type": "Cookie", 
                "cookieConfig": { 
                  "values": [ 
                    { 
                      "key": "cookiekey1", 
                      "value": "cookievalue1" 
                    }, 
                    { 
                      "key": "cookiekey2", 
                      "value": "cookievalue2" 
                    } 
                  ] 
                } 
              }, 
              { 
                "type": "QueryString", 
                "queryStringConfig": { 
                  "key": "querykey", 
                  "values": [ 
                    "queryvalue" 
                  ] 
                } 
              }, 
              { 
                "type": "SourceIp", 
                "sourceIpConfig": { 
                  "values": [ 
                    "192.168.0.0/16", 
                    "172.16.0.0/16" 
                  ] 
                } 
              } 
            ] 
      name: ingress-test 
    spec: 
      ingressClassName: cce 
      rules: 
       - http: 
          paths: 
          - path: /hello1 
            pathType: ImplementationSpecific 
            backend: 
              service: 
                name: svc-hello1 
                port: 
                  number: 80
    Table 3 Annotation for advanced forwarding rules

    Parameter

    Type

    Description

    kubernetes.io/elb.conditions.${svc_name}

    String

    Configure advanced forwarding rules. ${svc_name} indicates the Service name, which can contain a maximum of 48 characters.

    If the annotation value is set to [], the advanced forwarding rules will be deleted.

    The annotation value is a JSON array. For details, see Table 4.

    CAUTION:

    If you set up different rules for the same condition array, they must all be matched for a request to go through. But if you set multiple values in the same rule, then the request only needs to match one of them. For example, if both Method and QueryString are configured, the traffic can be distributed only when both rules are met. However, if the Method value includes both GET and POST, the traffic can be distributed only when both rules are met and the request method is either GET or POST.

    Table 4 Array structure

    Parameter

    Description

    Example

    type

    Matching type. Options:

    • Method: HTTP requests are forwarded based on the matched method. This parameter must be used with methodConfig. Method can be configured only once.
    • Header: HTTP requests are forwarded based on the matched header. This parameter must be used with headerConfig.
    • Cookie: HTTP requests are forwarded based on the matched cookie. This parameter must be used with cookieConfig.
    • QueryString: HTTP requests are forwarded based on the matched character string. This parameter must be used with queryStringConfig.
    • SourceIp: HTTP requests are forwarded based on the matched CIDR block. This parameter must be used with sourceIpConfig. SourceIp can be configured only once.

    None

    methodConfig

    An HTTP request method that is used to forward requests. This parameter is used only when type is set to Method.

    Multiple methods can be concurrently configured, including GET, POST, PUT, DELETE, PATCH, HEAD, and OPTIONS.

    You do not need to configure keys for methodConfig. You only need to configure values (an array) for methodConfig.

    {
      "type": "Method",
      "methodConfig": {
         "values": [
            "GET",
            "POST"
         ]
      }
    }

    headerConfig

    An HTTP request header that is used to forward requests. This parameter is used only when type is set to Header.

    • A key can only contain letters, digits, underscores (_), and hyphens (-).

      The first letter of the User-agent and Connection HTTP request headers must be capitalized.

    • Multiple values can be configured for a key. A value can only contain letters, digits, and special characters !#$%&'()*+,.\/:;<=>?@[]^-_'{|}~. Asterisks (*) and question marks (?) can be used as wildcard characters.

    You can only configure one key for each headerConfig rule. If you need multiple keys, configure multiple headerConfig rules.

    {
      "type": "Header",
      "headerConfig": {
         "key": "gray-hello",
         "values": [
            "value1",
            "value2"
         ]
      } 
    }

    cookieConfig

    A cookie that is used to forward requests. This parameter is used only when type is set to Cookie. A cookie consists of a key and a value, which must be configured separately.

    • A key can contain 1 to 100 characters and cannot start or end with a space.
    • A value can contain 1 to 100 characters. Configure a value for each key.

    You can enter multiple key-value pairs that can contain letters, digits, and special characters (!%'"()*+,./:=?@^-_`~).

    When configuring cookieConfig, you can configure multiple key-value pairs in values, and these pairs will have an OR relationship with each other.

    { 
      "type": "Cookie", 
      "cookieConfig": { 
         "values": [ 
            { 
              "key": "cookiekey1", 
              "value": "cookievalue1" 
            }, 
            { 
               "key": "cookiekey2", 
               "value": "cookievalue2" 
            } 
         ] 
      } 
    }

    queryStringConfig

    A character string that is used to forward requests. If the character string in a request matches the one in the configured forwarding rule, the request will be forwarded. This parameter is used only when type is set to QueryString.

    A query string consists of a key and one or more values. Configure the key and values separately.

    • A key can only contain letters, digits, and special characters !$'()*+,./:;=?@^-_'.
    • Multiple values can be configured for a key. A value can only contain letters, digits, and special characters !$'()*+,./:;=?@^-_'. Asterisks (*) and question marks (?) can be used as wildcard characters.

    You can only configure one key for each queryStringConfig rule. If you need multiple keys, configure multiple QueryStringConfig rules.

    { 
       "type": "QueryString", 
       "queryStringConfig": { 
          "key": "querykey", 
          "values": [ 
              "queryvalue" 
          ] 
       } 
    }

    sourceIpConfig

    A CIDR block that is used to forward requests. This parameter is used only when type is set to SourceIp.

    Example CIDR block: 192.168.1.0/24 or 2020:50::44/127

    You do not need to configure keys for sourceIpConfig. You only need to configure values (an array) for sourceIpConfig.

    { 
       "type": "SourceIp", 
       "sourceIpConfig": { 
          "values": [ 
             "192.168.0.0/16", 
             "172.16.0.0/16" 
          ] 
       } 
    }

  3. Create an ingress.

    kubectl create -f ingress-test.yaml

    If information similar to the following is displayed, the ingress has been created:

    ingress/ingress-test created

  4. Check the created ingress.

    kubectl get ingress
    If information similar to the following is displayed, the ingress has been created:
    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     80      10s

Scenario 2: Configuring Advanced Forwarding Actions for a LoadBalancer Ingress

The examples describe how to configure actions like write/remove header, return a specific response body, limit request, and forward to a custom backend server group for a LoadBalancer ingress.

Combined Application Scenarios

Advanced forwarding rules and actions can be combined to meet various requirements. Some examples are shown in the table below.

Rules to Be Applied When an Ingress Is Accessed

Actions to Be Performed

Target Service (Backend Service)

  • Domain name: example.com
  • Request path: /path1
  • Other advanced forwarding rules:
    • Request method: GET or POST
    • Request header: gray-hello:value1 or gray-hello:value2
    • Request cookie: cookiekey1:cookievalue1 or cookiekey2:cookievalue2
    • Query string: querykey:queryvalue
    • CIDR block: 192.168.0.0/16 or 172.16.0.0/16

The following actions will be performed during forwarding:

  • Write the user-defined request header aa:aa.
  • Delete the request header with the key dd.

test

  • Domain name: example.com
  • Request path: /path2

The following actions will be performed during forwarding:

  • Return a specific response with status code 503 and the content 503 error text.
  • Set the total QPS limit to 67 and limit the QPS per client source IP address to 3.

test2

  • Domain name: example.com
  • Path: /path3

The following actions will be performed during forwarding:

  • Forward to the backend server groups associated with the test (weight: 90) and test2 (weight: 10) and Services.
  • Set the total QPS limit to 67 and limit the QPS per client source IP address to 3.
  • Write the user-defined request header aa:aa.

test and test2

The YAML file example is as follows:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
  namespace: default
  annotations:
    kubernetes.io/elb.class: performance
    kubernetes.io/elb.id: *****
    kubernetes.io/elb.listener-master-ingress: default/ingress-demo
    kubernetes.io/elb.port: '80' 
    # The following annotation applies to the test Service and is used to add multiple load balancer forwarding matching conditions to it.
    kubernetes.io/elb.conditions.test: |  
        [ 
          { 
            "type": "Method", 
            "methodConfig": { 
              "values": [ 
                "GET", 
                "POST" 
              ] 
            } 
          }, 
          { 
            "type": "Header", 
            "headerConfig": { 
              "key": "gray-hello", 
              "values": [ 
                "value1", 
                "value2" 
              ] 
            } 
          }, 
          { 
            "type": "Cookie", 
            "cookieConfig": { 
              "values": [ 
                { 
                  "key": "cookiekey1", 
                  "value": "cookievalue1" 
                }, 
                { 
                  "key": "cookiekey2", 
                  "value": "cookievalue2" 
                } 
              ] 
            } 
          }, 
          { 
            "type": "QueryString", 
            "queryStringConfig": { 
              "key": "querykey", 
              "values": [ 
                "queryvalue" 
              ] 
            } 
          }, 
          { 
            "type": "SourceIp", 
            "sourceIpConfig": { 
              "values": [ 
                "192.168.0.0/16", 
                "172.16.0.0/16" 
              ] 
            } 
          } 
        ]  
    # The following annotation applies to the test Service and is used to configure the write/remove header action for it.
    kubernetes.io/elb.actions.test: |
      [{
          "type": "InsertHeader",
          "InsertHeaderConfig": {
              "key": "aa",
              "value_type": "USER_DEFINED",
              "value": "aa"
          }
      },{
          "type": "RemoveHeader",
          "RemoveHeaderConfig": {
              "key": "dd"
          }
      }]   
    # The following annotation applies to the test2 Service and is used to configure the return a specific response body and limit request actions for it.
    kubernetes.io/elb.actions.test2: |
        [{ 
          "type": "FixedResponse", 
          "fixedResponseConfig": { 
              "contentType": "text/plain", 
              "statusCode": "503",
              "messageBody": "503 error text"  
          }},{
         "type": "TrafficLimit",
         "TrafficLimItConfig": {
             "perSourceIpQps": 3,
             "qps": 67
                }}
         ]
    # The following annotation applies to the test3 Service and is used to configure the write header, limit request, and forward to custom backend server groups (associated with test and test2) actions for it.
    kubernetes.io/elb.actions.test3: | 
      [{
          "type": "InsertHeader",
          "InsertHeaderConfig": {
              "key": "aa",
              "value_type": "USER_DEFINED",
              "value": "aa"
          }
      },{
       "type": "ForwardPool",
       "forwardConfig": [{
            "serviceName": "test",
            "servicePort": 80,
            "weight": 90,
            "type": "service"
         },{
            "serviceName": "test2",
            "servicePort": 80,
            "weight": 10,
            "type": "service"
         }]
       },{
       "type": "TrafficLimit",
       "TrafficLimItConfig": {
           "perSourceIpQps": 3,
           "qps": 67
           }}
       ]
spec:
  ingressClassName: cce
  rules:
    - host: example.com
      http:
        paths:
          - path: /path1
            pathType: ImplementationSpecific
            backend:
              service:
                name: test
                port:
                  number: 80
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
          - path: /path2
            pathType: ImplementationSpecific
            backend:
              service:
                name: test2
                port:
                  number: 80
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
          - path: /path3
            pathType: ImplementationSpecific
            backend:
              service:
                name: test3
                port:
                  name: use-annotation  # If the forward to custom backend server group ("type": "ForwardPool") action is specified, port.name must be set to use-annotation.
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH