更新时间:2024-11-12 GMT+08:00

为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连接集群

通过kubectl命令行配置

  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"
        # 表示对应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配置。

    表2 数组结构

    参数

    使用说明

    示例

    type

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

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

    不支持其他字段。

    -

    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