为ELB Ingress配置写入/删除Header
独享型ELB的Ingress支持自定义重写Header的转发策略,可将在请求中写入或删除配置的Header后再访问后端Service。
ELB Ingress配置重写Header的功能依赖ELB写入Header和删除Header能力,使用该功能前请提交工单申请开通ELB相关能力。
前提条件
- 已创建一个CCE Standard或CCE Turbo集群,且集群版本满足以下要求:
- 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及以上
- 其他更高版本的集群
- 您需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。
约束与限制
- 该特性仅在使用独享型ELB时支持配置。
- 该特性依赖ELB高级转发策略,开启后将不再根据域名/路径匹配确定优先级,请您根据实际需要自定义转发策略优先级。关于转发策略优先级详情请参见ELB Ingress转发策略优先级说明。
通过kubectl命令行配置
- 请参见通过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" # 表示对应Rule的Service是test-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
表1 重写Header转发策略注解 参数
类型
描述
kubernetes.io/elb.actions.${svc_name}
String
Ingress关联的Service配置重写Header,${svc_name}即对应的Service名称,其最大长度为51个字符。
如果该annotation值配置成[]则表示删除相应的重写Header的策略。
注解值格式为Json字符串数组,具体格式请参见表2,例如:
[{"type":"InsertHeader","InsertHeaderConfig":{"key":"aa","value_type":"USER_DEFINED","value":"aa"}}]
说明:最多添加5条写入Header或删除Header配置。
- 创建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