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

为ELB Ingress配置HTTP/HTTPS头字段

HTTP头字段是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分。HTTP头部字段可以根据需要自定义,本文介绍可通过HTTP和HTTPS监听器支持的非标准头字段实现的功能特性。
  • 配置HTTP/HTTPS头字段依赖ELB能力,使用该功能前请确认当前区域是否支持使用HTTP/HTTPS头字段,详情请参见HTTP/HTTPS头字段
  • 配置HTTP/HTTPS头字段后,如果您在CCE控制台删除HTTP/HTTPS头字段配置或在YAML中删除对应的annotation,ELB侧的配置将会保留。
表1 头字段开关

头字段

功能开关

功能说明

X-Forwarded-Port

获取监听器端口号

开启获取监听器端口号开关,ELB可通过X-Forwarded-Port头字段获取监听器的端口号,传输到后端服务器的报文中。

X-Forwarded-For-Port

获取客户端请求端口号

开启获取客户端请求端口号开关,ELB可通过X-Forwarded-For-Port头字段获取客户端请求的端口号,传输到后端服务器的报文中。

X-Forwarded-Host

重写X-Forwarded-Host

开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。

前提条件

配置HTTP/HTTPS头字段

您可以使用以下方式为Ingress配置HTTP/HTTPS头字段。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“服务”,切换至“路由”页签,在右上角单击“创建路由”
  3. 设置Ingress参数。

    本示例中展示配置HTTP/HTTPS头字段的关键参数,其余参数可按需配置,详情请参见通过控制台创建ELB Ingress

    表2 关键参数说明

    参数

    配置说明

    示例

    名称

    自定义Ingress名称。

    ingress-test

    负载均衡器

    选择对接的ELB实例或自动创建ELB实例。本例中仅支持选择“独享型”

    独享型ELB

    监听器配置

    • 前端协议:支持“HTTP”“HTTPS”
    • 对外端口:ELB监听器的端口。
    • 高级配置:
      • 获取监听器端口号:开启后可以将ELB实例的监听端口从报文的HTTP头中带到后端云服务器。
      • 获取客户端请求端口号:开启后可以将客户端的源端口从报文的HTTP头中带到后端云服务器。
      • 重写X-Forwarded-Host:开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。
    • 前端协议:“HTTP”
    • 对外端口:80
    • 高级配置:
      • 获取监听器端口号:开启
      • 获取客户端请求端口号:开启
      • 重写X-Forwarded-Host:开启

    转发策略配置

    • 域名:实际访问的域名地址,不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。
    • 路径匹配规则:支持前缀匹配精确匹配正则匹配,请按需选择。
    • 路径:后端应用对外提供访问的路径,此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。
    • 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。
    • 目标服务访问端口:可选择目标Service的访问端口。
    • 域名:无需填写
    • 路径匹配规则:前缀匹配
    • 路径:/
    • 目标服务名称:nginx
    • 目标服务访问端口:80
    图1 配置HTTP/HTTPS头字段

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

    vi ingress-test.yaml
    以关联已有ELB为例,YAML文件配置如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress 
    metadata: 
      name: ingress-test
      annotations: 
        kubernetes.io/elb.id: <your_elb_id>                 #替换为您已有的ELB ID
        kubernetes.io/elb.class: performance                #ELB类型
        kubernetes.io/elb.port: '80'
        kubernetes.io/elb.x-forwarded-port: 'true'         # 获取监听器端口号
        kubernetes.io/elb.x-forwarded-for-port: 'true'     # 获取客户端请求端口号
        kubernetes.io/elb.x-forwarded-host: 'true'         # 重写X-Forwarded-Host
    spec:
      rules: 
      - host: ''
        http: 
          paths: 
          - path: '/'
            backend: 
              service:
                name: <your_service_name>  #替换为您的目标服务名称
                port: 
                  number: 80             #替换为您的目标服务端口
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
            pathType: ImplementationSpecific
      ingressClassName: cce     
    表3 关键参数说明

    参数

    参数类型

    描述

    kubernetes.io/elb.x-forwarded-port

    String

    ELB可通过X-Forwarded-Port头字段获取监听器的端口号,传输到后端服务器的报文中。

    • true:开启获取监听器端口号开关。
    • false:关闭获取监听器端口号开关。

    kubernetes.io/elb.x-forwarded-for-port

    String

    ELB可通过X-Forwarded-For-Port头字段获取客户端请求的端口号,传输到后端服务器的报文中。

    • true:开启获取客户端请求端口号开关。
    • false:关闭获取客户端请求端口号开关。

    kubernetes.io/elb.x-forwarded-host

    String

    • true:开启重写X-Forwarded-Host开关,ELB以客户端请求头的Host重写X-Forwarded-Host传递到后端服务器。
    • false:关闭重写X-Forwarded-Host开关,ELB透传客户端的X-Forwarded-Host到后端服务器。

  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