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

转发动作 |
额外添加转发动作 |
说明 |
操作指导 |
集群版本要求 |
---|---|---|---|---|
转发至后端服务器组 |
不额外添加转发动作 |
ELB Ingress的默认转发动作,不对请求进行操作,直接转发至后端服务器(集群中的后端节点或Pod)。 |
无集群版本要求 |
|
转发至后端服务器组 |
重写 |
该转发动作可以重写请求的路径信息。 |
|
|
转发至后端服务器组 |
写入/删除Header |
该转发动作可以在请求中写入或删除配置的Header后再访问后端服务器。 |
|
|
转发至后端服务器组 |
限速 |
该转发动作支持对请求设置限速。 |
|
|
重定向至监听器(HTTP重定向至HTTPS) |
无可额外添加的转发动作 |
该转发动作可以将HTTP协议的访问请求转发至HTTPS协议的监听器上。 |
|
|
重定向至URL |
无可额外添加的转发动作 |
该转发动作可以将特定的访问请求重定向至指定的URL,并返回3xx返回码。 |
||
返回固定响应 |
不额外添加转发动作 |
该转发动作可以直接返回固定响应,不向后端服务器继续转发。 |
|
|
返回固定响应 |
限速 |
该转发动作支持对请求设置限速。 |
|
|
转发到自定义后端服务器组 |
该转发动作支持将ELB Ingress请求同时转发至CCE集群内Pod(默认后端服务器组)及集群外ECS服务器组(自定义后端服务器组)。 |
|

ELB Ingress配置重写、写入/删除Header、限速功能依赖ELB高级转发策略能力,当前陆续上线中,已发布区域请以实际开放为准。如果您有使用需求,请提交工单申请开通ELB相关能力。
前提条件
- 已创建一个集群版本满足要求的CCE Standard集群。
- 您需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。
约束与限制
- 该特性仅在使用独享型ELB时支持配置。
为ELB Ingress配置写入/删除Header
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“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"}}]
- 创建Ingress。
kubectl create -f ingress-test.yaml
回显如下,表示Ingress服务已创建。
ingress/ingress-test created
- 查看已创建的Ingress。
kubectl get ingress
回显如下,表示Ingress服务创建成功。NAME CLASS HOSTS ADDRESS PORTS AGE ingress-test cce * 121.**.**.** 80 10s
为ELB Ingress配置返回固定响应
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“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" } }
- 创建Ingress。
kubectl create -f ingress-test.yaml
回显如下,表示Ingress服务已创建。
ingress/ingress-test created
- 查看已创建的Ingress。
kubectl get ingress
回显如下,表示Ingress服务创建成功。NAME CLASS HOSTS ADDRESS PORTS AGE ingress-test cce * 121.**.**.** 80 10s
为ELB Ingress配置限速
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“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。
- 创建Ingress。
kubectl create -f ingress-test.yaml
回显如下,表示Ingress服务已创建。
ingress/ingress-test created
- 查看已创建的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。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“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" }] }
- type:自定义转发的后端服务器组,可指定“service”和“pool”。
- 创建Ingress。
kubectl create -f ingress-test.yaml
回显如下,表示Ingress服务已创建。
ingress/ingress-test created
- 查看已创建的Ingress。
kubectl get ingress
回显如下,表示Ingress服务创建成功。NAME CLASS HOSTS ADDRESS PORTS AGE ingress-test cce * 121.**.**.** 80 10s