更新时间:2024-08-17 GMT+08:00

为ELB Ingress配置自定义Header转发策略

独享型ELB的Ingress支持自定义Header的转发策略,可通过不同的Header键值来确定转发的后端Service。

前提条件

已创建满足条件的集群:
  • v1.23集群:v1.23.16-r0及以上
  • v1.25集群:v1.25.11-r0及以上
  • v1.27集群:v1.27.8-r0及以上
  • v1.28集群:v1.28.6-r0及以上
  • v1.29集群:v1.29.2-r0及以上

通过kubectl命令行配置

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

    vi ingress-test.yaml
    以使用已有ELB创建Ingress的场景为例,YAML配置示例如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-test
      namespace: default
      annotations:
        kubernetes.io/elb.port: '80'
        kubernetes.io/elb.id: 08eab934-1636-4d90-a4cd-cb3fa4330411
        kubernetes.io/elb.class: performance  #需使用独享型ELB
        # 表示只能通过Header key1=value1或者key1=value2访问/a路径,最终访问到的服务是 svc-a:80
        kubernetes.io/elb.headers.svc-a: | 
          {
              "key": "key1",
              "values": [
                  "value1",
                  "value2"
              ]
          }
        # 表示只能通过Header key2=value1或者key2=value2访问/b路径,最终访问到的服务是 svc-b:81
        kubernetes.io/elb.headers.svc-b: |  
          {
              "key": "key2",
              "values": [
                  "value1",
                  "value2"
              ]
          }
    spec:
      rules:
        - host: ''
          http:
            paths:
              - path: /a
                backend:
                  service:
                    name: svc-a
                    port:
                      number: 80
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                pathType: ImplementationSpecific
              - path: /b
                backend:
                  service:
                    name: svc-b
                    port:
                      number: 81
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                pathType: ImplementationSpecific
      ingressClassName: cce
    表1 自定义Header转发策略注解

    参数

    类型

    描述

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

    String

    Ingress关联的Service配置自定义的Header,${svc_name}即对应的Service名称。

    格式说明:Json字符串,如 {"key": "test", "values": ["value1", "value2"]}

    • key/value表示自定义Header的键值对,value最多可以配置8个。

      key的取值范围:长度限制1-40字符,只允许包含字母、数字、中划线(-)和下划线(_)

      value的取值范围:长度限制1-128字符,不支持空格,双引号,支持以下通配符:*(匹配0个或更多字符)和?(正好匹配1个字符)

    • 设置自定义Header转发策略后,Ingress不能再同时创建灰度发布策略
    • svc_name最大长度51个字符

  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