更新时间:2025-07-07 GMT+08:00

为ELB Ingress配置高级转发动作

独享型负载均衡支持多样化的转发动作,便于灵活分配流量,ELB会根据转发规则对应的动作将客户端请求转发至对应的后端服务器进行处理。

图1 高级转发动作示意图
表1 高级转发动作

转发动作

额外添加转发动作

说明

操作指导

集群版本要求

转发至后端服务器组

不额外添加转发动作

ELB Ingress的默认转发动作,不对请求进行操作,直接转发至后端服务器(集群中的后端节点或Pod)。

通过控制台创建ELB Ingress

无集群版本要求

转发至后端服务器组

重写

该转发动作可以重写请求的路径信息。

为ELB Ingress配置Rewrite重写

  • v1.23集群:v1.23.14-r0及以上
  • v1.25集群:v1.25.9-r0及以上
  • v1.27集群:v1.27.6-r0及以上
  • v1.28集群:v1.28.4-r0及以上
  • 其他更高版本的集群

转发至后端服务器组

写入/删除Header

该转发动作可以在请求中写入或删除配置的Header后再访问后端服务器。

为ELB Ingress配置写入/删除Header

  • v1.23集群:v1.23.18-r10及以上
  • v1.25集群:v1.25.16-r0及以上
  • v1.27集群:v1.27.16-r0及以上
  • v1.28集群:v1.28.13-r0及以上
  • v1.29集群:v1.29.8-r0及以上
  • v1.30集群:v1.30.4-r0及以上
  • 其他更高版本的集群

转发至后端服务器组

限速

该转发动作支持对请求设置限速。

为ELB Ingress配置限速

  • v1.27集群:v1.27.16-r10及以上
  • v1.28集群:v1.28.15-r0及以上
  • v1.29集群:v1.29.10-r0及以上
  • v1.30集群:v1.30.6-r0及以上
  • 其他更高版本的集群

重定向至监听器(HTTP重定向至HTTPS)

无可额外添加的转发动作

该转发动作可以将HTTP协议的访问请求转发至HTTPS协议的监听器上。

为ELB Ingress配置HTTP重定向到HTTPS

  • v1.23集群:v1.23.14-r0及以上
  • v1.25集群:v1.25.9-r0及以上
  • v1.27集群:v1.27.6-r0及以上
  • v1.28集群:v1.28.4-r0及以上
  • 其他更高版本的集群

重定向至URL

无可额外添加的转发动作

该转发动作可以将特定的访问请求重定向至指定的URL,并返回3xx返回码。

为ELB Ingress配置URL重定向

返回固定响应

不额外添加转发动作

该转发动作可以直接返回固定响应,不向后端服务器继续转发。

为ELB Ingress配置返回固定响应

  • v1.25集群:v1.25.16-r10及以上
  • v1.27集群:v1.27.16-r10及以上
  • v1.28集群:v1.28.15-r0及以上
  • v1.29集群:v1.29.10-r0及以上
  • v1.30集群:v1.30.6-r0及以上
  • 其他更高版本的集群

返回固定响应

限速

该转发动作支持对请求设置限速。

为ELB Ingress配置限速

  • v1.27集群:v1.27.16-r10及以上
  • v1.28集群:v1.28.15-r0及以上
  • v1.29集群:v1.29.10-r0及以上
  • v1.30集群:v1.30.6-r0及以上
  • 其他更高版本的集群

转发到自定义后端服务器组

该转发动作支持将ELB Ingress请求同时转发至CCE集群内Pod(默认后端服务器组)及集群外ECS服务器组(自定义后端服务器组)。

为ELB Ingress配置自定义后端服务器组

  • v1.25集群:v1.25.16-r20及以上
  • v1.27集群:v1.27.16-r20及以上
  • v1.28集群:v1.28.15-r10及以上
  • v1.29集群:v1.29.10-r10及以上
  • v1.30集群:v1.30.6-r10及以上
  • v1.31集群:v1.31.4-r0及以上
  • 其他更高版本的集群

ELB Ingress配置重写、写入/删除Header、限速功能依赖ELB高级转发策略能力,当前陆续上线中,已发布区域请以实际开放为准。如果您有使用需求,请提交工单申请开通ELB相关能力。

前提条件

  • 已创建一个集群版本满足要求的CCE Standard集群。
  • 您需要使用kubectl连接到集群,详情请参见通过kubectl连接集群

约束与限制

  • 该特性仅在使用独享型ELB时支持配置。

为ELB Ingress配置写入/删除Header

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml
    以使用已有ELB创建Ingress的场景为例,YAML配置如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.id: 034baaf0-40e8-4e39-b0d9-bf6e5b883cf9
        kubernetes.io/elb.port: "80"
        # 表示为名为test-service的Service配置写入/删除Header的能力
        kubernetes.io/elb.actions.test-service: |
          [{
              "type": "InsertHeader",
              "InsertHeaderConfig": {
                  "key": "aa",
                  "value_type": "USER_DEFINED",
                  "value": "aa"
              }
          },
          {
              "type": "InsertHeader",
              "InsertHeaderConfig": {
                  "key": "bb",
                  "value_type": "SYSTEM_DEFINED",
                  "value": "ELB-ID"
              }
          },
          {
              "type": "InsertHeader",
              "InsertHeaderConfig": {
                  "key": "cc",
                  "value_type": "REFERENCE_HEADER",
                  "value": "cc"
              }
          },
          {
              "type": "RemoveHeader",
              "RemoveHeaderConfig": {
                  "key": "dd"
              }
          },
          {
              "type": "RemoveHeader",
              "RemoveHeaderConfig": {
                  "key": "ee"
              }
          }]      
      name: ingress-test
      namespace: default
    spec:
      ingressClassName: cce
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: test-service
                    port:
                      number: 8888
                path: /
                pathType: ImplementationSpecific
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
    表2 高级转发动作注解

    参数

    类型

    描述

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

    String

    为Ingress配置高级转发动作,${svc_name}即对应的Service名称,其最大长度为51个字符。

    如果该注解值配置成[]则表示删除所有高级转发动作。

    配置写入/删除Header的注解值格式为JSON字符串数组,具体参数请参见表3,例如:

    [{"type":"InsertHeader","InsertHeaderConfig":{"key":"aa","value_type":"USER_DEFINED","value":"aa"}}]
    表3 重写Header参数配置说明

    参数

    使用说明

    示例

    type

    表示重写Header的类型,支持设置以下几种参数值:

    • InsertHeader:表示写入Header,需要与InsertHeaderConfig字段搭配使用。
    • RemoveHeader:表示删除Header,需要与RemoveHeaderConfig字段搭配使用。
    说明:

    高级转发动作注解中最多添加5条写入Header或删除Header配置。

    -

    InsertHeaderConfig

    表示写入Header,仅当type参数值为InsertHeader时使用。

    • key:重写Header的Key值,长度限制1-40字符, 只能由英文字母、数字、下划线和中划线组成。不能是以下字符中的一种(不区分大小写):

      connection、upgrade、content-length、transfer-encoding、keep-alive、te、host、cookie、remoteip、authority、x-forwarded-host、x-forwarded-for、x-forwarded-for-port、x-forwarded-tls-certificate-id、x-forwarded-tls-protocol、x-forwarded-tls-cipher、x-forwarded-elb-ip、x-forwarded-port、x-forwarded-elb-id、x-forwarded-elb-vip、x-real-ip、x-forwarded-proto、x-nuwa-trace-ne-in、x-nuwa-trace-ne-out

    • value_type:写入Header的类型(删除Header时该字段配置无效)。仅支持以下字段:
      • USER_DEFINED:表示用户自定义的Header。
      • REFERENCE_HEADER:表示用户引用的Header。
      • SYSTEM_DEFINED:表示系统定义的Header。
    • value:写入Header的value值(删除Header时该字段配置无效)。

      value_type为SYSTEM_DEFINED时,value只可从CLIENT-PORT、CLIENT-IP、ELB-PROTOCOL、ELB-ID、ELB-PORT、ELB-EIP、ELB-VIP中取值。

    {
       "type": "InsertHeader",
       "InsertHeaderConfig": {
          "key": "aa",
          "value_type": "USER_DEFINED",
          "value": "aa"
       }
    }

    RemoveHeaderConfig

    表示删除Header,仅当type参数值为RemoveHeader时使用。

    • key:删除Header的Key值,长度限制1-40字符, 只能由英文字母、数字、下划线和中划线组成。不能是以下字符中的一种(不区分大小写):

      connection、upgrade、content-length、transfer-encoding、keep-alive、te、host、cookie、remoteip、authority、x-forwarded-host、x-forwarded-for、x-forwarded-for-port、x-forwarded-tls-certificate-id、x-forwarded-tls-protocol、x-forwarded-tls-cipher、x-forwarded-elb-ip、x-forwarded-port、x-forwarded-elb-id、x-forwarded-elb-vip、x-real-ip、x-forwarded-proto、x-nuwa-trace-ne-in、x-nuwa-trace-ne-out

    {
       "type": "RemoveHeader",
       "RemoveHeaderConfig": {
          "key": "ee"
       }
    }

  3. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

  4. 查看已创建的Ingress。

    kubectl get ingress
    回显如下,表示Ingress服务创建成功。
    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     80      10s

为ELB Ingress配置返回固定响应

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml
    以使用已有ELB创建Ingress的场景为例,YAML配置如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.id: 034baaf0-40e8-4e39-b0d9-bf6e5b883cf9
        kubernetes.io/elb.port: "80"
        # 表示为名为test-service的Service配置返回固定响应的能力
        kubernetes.io/elb.actions.test-service: |
        [{  
           "type": "FixedResponse", 
           "fixedResponseConfig": { 
               "contentType": "text/plain", 
               "statusCode": "503",
               "messageBody": "503 error text"  
           } 
         }]
      name: ingress-test
      namespace: default
    spec:
      ingressClassName: cce
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: test-service
                    port:
                      number: 8888
                path: /
                pathType: ImplementationSpecific
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
    表4 高级转发动作注解

    参数

    类型

    描述

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

    String

    为Ingress配置高级转发动作,${svc_name}即对应的Service名称,其最大长度为51个字符。

    如果该注解值配置成[]则表示删除所有高级转发动作。

    配置返回固定响应的注解值格式为JSON字符串数组,具体参数请参见表5

    表5 返回固定响应参数配置说明

    参数

    使用说明

    示例

    type

    固定值为“FixedResponse”,表示返回固定响应。

    说明:

    高级转发动作注解中最多添加1条返回固定响应配置。

    -

    fixedResponseConfig

    • contentType:返回内容格式,可以选择“text/plain”、“text/css”、“text/html”、“application/javascript”、“application/json”。
    • statusCode:返回码,默认支持2XX、4XX、5XX系列状态码。
    • messageBody:取值范围是0~1024个字符。
      须知:

      同时配置限速时,该字段不允许为空值。

    { 
       "type": "FixedResponse", 
       "fixedResponseConfig": { 
          "contentType": "text/plain", 
          "statusCode": "503",
          "messageBody": "503 error text"  
        } 
    } 

  3. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

  4. 查看已创建的Ingress。

    kubectl get ingress
    回显如下,表示Ingress服务创建成功。
    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     80      10s

为ELB Ingress配置限速

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml
    以使用已有ELB创建Ingress的场景为例,YAML配置如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.id: 034baaf0-40e8-4e39-b0d9-bf6e5b883cf9
        kubernetes.io/elb.port: "80"
        # 表示为名为test-service的Service配置ELB限速的能力
        kubernetes.io/elb.actions.test-service: |
         [{ 
           "type": "TrafficLimit", 
           "trafficLimitConfig": { 
               "QPS": 4,
               "perSourceIpQps": 2,
               "burst": 2
           } 
         }]
      name: ingress-test
      namespace: default
    spec:
      ingressClassName: cce
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: test-service
                    port:
                      number: 8888
                path: /
                pathType: ImplementationSpecific
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
    表6 高级转发动作注解

    参数

    类型

    描述

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

    String

    为Ingress配置高级转发动作,${svc_name}即对应的Service名称,其最大长度为51个字符。

    如果该注解值配置成[]则表示删除所有高级转发动作。

    配置限速的注解值格式为JSON字符串数组,具体参数请参见表7

    表7 限速参数配置说明

    参数

    使用说明

    示例

    type

    固定值为“TrafficLimit”,表示为ELB配置限速。

    说明:

    高级转发动作注解中最多添加1条限速配置。

    -

    trafficLimitConfig

    • QPS:总限速,每秒查询速率,支持的取值范围为0~100000,0表示不限速。请求速率超过设置的限速后,新建连接请求将被丢弃,并会返回给客户端503状态码。
    • perSourceIpQps:可选参数,基于客户端源IP进行限速,支持的取值范围为0~100000,0表示不限速。

      同时配置QPS(总限速)和perSourceIpQps(基于客户端源IP限速)时,基于客户端源IP限速值要小于总限速值。请求速率超过设置的限速后,新建连接请求将被丢弃,并会返回给客户端503状态码。

    • burst:可选参数,限速缓冲区大小,支持的取值范围为0~100000。限速burst允许短时间内超过设置的平均速率,以应对突发请求。例如,如果限速值是5,但是burst是10,那么1s内,可以访问超过5个请求,如果达到10个请求,又会回落到5。
    { 
       "type": "TrafficLimit", 
       "trafficLimitConfig": { 
          "QPS": "4", 
          "perSourceIpQps": "2",
          "burst": "2"  
        } 
    } 

  3. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

  4. 查看已创建的Ingress。

    kubectl get ingress
    回显如下,表示Ingress服务创建成功。
    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     80      10s

为ELB Ingress配置自定义后端服务器组

  • ELB Ingress配置自定义后端服务器组的功能依赖ELB能力,使用该功能前请提交工单申请开通ELB相关能力。
  • 配置自定义后端服务器组不可与灰度发布、返回固定响应同时使用。
  • ELB Ingress配置自定义后端服务器组时,定义Ingress后端Service时的number字段失效,且必须指定端口名为use-annotation,详情请参见以下示例。
  • ELB Ingress配置自定义后端服务器组时,不可配置重复的Service名称和重复的后端服务器组ID。
  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml
    以使用已有ELB创建Ingress的场景为例,YAML配置如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.id: 034baaf0-40e8-4e39-b0d9-bf6e5b883cf9
        kubernetes.io/elb.port: "80"
        # 表示为名为forward-demo的Service配置自定义后端服务器组,需在paths中匹配到一条Service名称为forward-demo,且端口名必须为use-annotation
        kubernetes.io/elb.actions.forward-demo: |
        [{ 
           "type": "ForwardPool", 
           "forwardConfig": [{ 
              "serviceName": "test", 
              "servicePort": 80, 
              "weight": 90, 
              "type": "service" 
              },{ 
                "poolID": "53d8516e-xxxx-xxxx-xxxx-b15ffd6b3cca",  
                "weight": 70, 
                "type": "pool" 
             }]
        }] 
      name: ingress-test
      namespace: default
    spec:
      ingressClassName: cce
      rules:
        - host: example.com
          http:
            paths:
              - backend:
                  service:
                    name: forward-demo
                    port:
                      name: use-annotation   # 启用forwardPool特性时,number字段失效,必须指定端口名为use-annotation
                path: /
                pathType: ImplementationSpecific
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
    表8 高级转发动作注解

    参数

    类型

    描述

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

    String

    为Ingress配置高级转发动作,${svc_name}即对应的Service名称,其最大长度为51个字符。

    如果该注解值配置成[]则表示删除所有高级转发动作。

    配置自定义后端服务器组的注解值格式为JSON字符串数组,具体参数请参见表9

    表9 自定义后端服务器组参数配置说明

    参数

    使用说明

    示例

    type

    固定值为“ForwardPool”,表示为ELB配置自定义后端服务器组。

    说明:

    高级转发动作注解中最多添加1条自定义后端服务器组配置。

    -

    forwardConfig

    说明:

    forwardConfig中最多添加5条自定义后端服务器组配置。

    • type:自定义转发的后端服务器组,可指定“service”“pool”
      • service:转发的对象为Service类型,将由CCE自动创建Service对应的后端服务器组,并负责维护其生命周期。
      • pool:转发的对象为自定义后端服务器组,您需要在ELB侧自行创建并维护。
    • poolID:type指定为“pool”时填写。

      后端服务器组的ID,需填写Ingress对应ELB下的后端服务器组,且不可重复配置相同的后端服务器组ID。

    • serviceName:type指定为“service”时填写。

      Service名称,您需要确认该Service在集群中真实存在,且不可重复配置相同的Service名称。

    • servicePort:type指定为“service”时填写。

      Service端口。

    • weight:不同后端服务器组的流量分配权重,流量将根据权重的比值进行分配,权重取值范围为0-100。
    { 
        "type": "ForwardPool", 
        "forwardConfig": [{ 
           "serviceName": "test",
           "servicePort": 80,
           "weight": 90,
           "type": "service"
           },{ 
           "poolID": "53d8516e-xxxx-xxxx-xxxx-b15ffd6b3cca", 
           "weight": 70,
           "type": "pool"
        }]
    }

  3. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

  4. 查看已创建的Ingress。

    kubectl get ingress
    回显如下,表示Ingress服务创建成功。
    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     80      10s