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

转发动作 |
额外添加转发动作 |
说明 |
操作指导 |
集群版本要求 |
---|---|---|---|---|
转发至后端服务器组 |
不额外添加转发动作 |
ELB Ingress的默认转发动作,不对请求进行操作,直接转发至后端服务器(集群中的后端节点或Pod)。 |
无集群版本要求 |
|
重写 |
该转发动作可以重写请求的路径信息。 |
|
||
跨域访问 |
该转发动作可以支持资源的跨域访问。 |
|
||
写入/删除Header |
该转发动作可以在请求中写入或删除配置的Header后再访问后端服务器。 |
|||
限速 |
该转发动作支持对请求设置限速。 |
|
||
重定向至监听器(HTTP重定向至HTTPS) |
无可额外添加的转发动作 |
该转发动作可以将HTTP协议的访问请求转发至HTTPS协议的监听器上。 |
|
|
重定向至URL |
无可额外添加的转发动作 |
该转发动作可以将特定的访问请求重定向至指定的URL,并返回3xx返回码。 |
||
返回固定响应 |
不额外添加转发动作 |
该转发动作可以直接返回固定响应,不向后端服务器继续转发。 |
|
|
限速 |
该转发动作支持对请求设置限速。 |
|
前提条件
- 已创建一个集群版本满足要求的CCE Standard或CCE Turbo集群。
- 您需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。
约束与限制
- 该特性仅在使用独享型ELB时支持配置。
- 该特性依赖ELB高级转发策略,开启后将不再根据域名/路径匹配确定优先级,请您根据实际需要自定义转发策略优先级。关于转发策略优先级详情请参见ELB Ingress转发策略优先级说明。
为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: 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: 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: 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