
# 为负载均衡类型的Service配置HTTP/HTTPS头字段
HTTP头字段是指在超文本传输协议（HTTP）的请求和响应消息中的消息头部分。HTTP头部字段可以根据需要自定义，本文介绍可通过HTTP和HTTPS监听器支持的非标准头字段实现的功能特性。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
- 配置HTTP/HTTPS头字段依赖ELB能力，使用该功能前请确认当前区域是否支持使用HTTP/HTTPS头字段，详情请参见[HTTP/HTTPS头字段](https://support.huaweicloud.com/usermanual-elb/zh-cn_topic_0118147668.html)。
- 配置HTTP/HTTPS头字段后，如果您在CCE控制台删除HTTP/HTTPS头字段配置或在YAML中删除对应的annotation，ELB侧的配置将会保留。
 
 表1头字段开关 
| 头字段                            | 功能开关               | 功能说明                                                                  | 支持的集群版本                                                                                      |
|:---|:---|:---|:---|
| X-Forwarded-Port               | 获取监听器端口号           | 开启获取监听器端口号开关，ELB可通过X-Forwarded-Port头字段获取监听器的端口号，传输到后端服务器的报文中。         | v1.23.13-r0、v1.25.8-r0、v1.27.5-r0、v1.28.3-r0及以上版本                                            |
| X-Forwarded-For-Port           | 获取客户端请求端口号         | 开启获取客户端请求端口号开关，ELB可通过X-Forwarded-For-Port头字段获取客户端请求的端口号，传输到后端服务器的报文中。 | v1.23.13-r0、v1.25.8-r0、v1.27.5-r0、v1.28.3-r0及以上版本                                            |
| X-Forwarded-Host               | 重写X-Forwarded-Host | 开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。                          | v1.23.13-r0、v1.25.8-r0、v1.27.5-r0、v1.28.3-r0及以上版本                                            |
| X-Real-IP                      | 重写X-Real-IP        | 开启后将以客户端的源IP地址重写X-Real-IP传递到后端服务器。                                    | v1.25.16-r30、v1.27.16-r30、v1.28.15-r20、v1.29.13-r0、v1.30.10-r0、v1.31.6-r0、v1.32.1-r0及以上版本    |
| X-Forwarded-ELB-IP             | 获取ELB实例的EIP地址      | 开启后，ELB会将ELB实例的EIP地址通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTP和HTTPS协议。     | v1.30.14-r100、v1.31.14-r60、v1.32.13-r30、v1.33.12-r10、v1.34.8-r10、v1.35.5-r10、v1.36.2-r0及以上版本 |
| X-Forwarded-ELB-ID             | 获取负载均衡器实例的ID       | 开启后，ELB会将ELB实例的监听端口通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTP和HTTPS协议。      | v1.30.14-r100、v1.31.14-r60、v1.32.13-r30、v1.33.12-r10、v1.34.8-r10、v1.35.5-r10、v1.36.2-r0及以上版本 |
| X-Forwarded-Proto              | 获取负载均衡器实例的监听协议     | 开启后，ELB会将负载均衡器实例的监听协议通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTP和HTTPS协议。    | v1.30.14-r100、v1.31.14-r60、v1.32.13-r30、v1.33.12-r10、v1.34.8-r10、v1.35.5-r10、v1.36.2-r0及以上版本 |
| X-Forwarded-TLS-Certificate-ID | 获取负载均衡器实例的证书ID     | 开启后，ELB会将负载均衡器实例的证书ID通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTPS协议。         | v1.30.14-r100、v1.31.14-r60、v1.32.13-r30、v1.33.12-r10、v1.34.8-r10、v1.35.5-r10、v1.36.2-r0及以上版本 |
| X-Forwarded-TLS-Protocol       | 获取负载均衡器实例的算法协议     | 开启后，ELB会将负载均衡器实例的算法协议通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTPS协议。         | v1.30.14-r100、v1.31.14-r60、v1.32.13-r30、v1.33.12-r10、v1.34.8-r10、v1.35.5-r10、v1.36.2-r0及以上版本 |
| X-Forwarded-TLS-Cipher         | 获取负载均衡器实例的算法套件     | 开启后，ELB会将负载均衡器实例的算法套件通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTPS协议。         | v1.30.14-r100、v1.31.14-r60、v1.32.13-r30、v1.33.12-r10、v1.34.8-r10、v1.35.5-r10、v1.36.2-r0及以上版本 |
   
#### 前提条件
- 已创建Kubernetes集群，且集群版本满足[表1]要求。

- 如果您需要通过命令行创建，需要使用kubectl连接到集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
 
#### 创建负载均衡并配置HTTP/HTTPS头字段
您可以通过以下方式进行创建。
- [通过控制台创建]
- [通过kubectl命令行创建]
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"服务"，在右上角单击"创建服务"。 
   本示例中仅列举配置SNI的必选参数，其余参数保持默认，您可根据需求参考[通过控制台创建](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section6880821105120)进行设置。
   
   
3. 设置基础配置参数。 
   
   | 参数   | 说明                                                                                                                                                            | 示例        |
   |:---|:---|:---|
   | 访问类型 | 选择"负载均衡"。                                                                                                                                                     | -         |
   | 服务名称 | 自定义服务名称，可与工作负载名称保持一致。                                                                                                                                         | nginx     |
   | 命名空间 | 工作负载所在命名空间。                                                                                                                                                   | default   |
   | 选择器  | 您可以添加Pod标签的键值，Service将会根据标签与工作负载的Pod进行关联，将流量导向包含该标签的Pod。 您也可以引用已有工作负载的标签，单击"引用负载标签"，在弹出的窗口中选择负载，然后单击"确定"。 | app:nginx |
      
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002407634521.png "点击放大")
   
   
   
4. 设置负载均衡配置参数。 
   
   | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 示例                                              |
   |:---|:---|:---|
   | 负载均衡器 | 选择弹性负载均衡的类型及创建方式。其中独享型ELB需选择"应用型（HTTP/HTTPS）"或"网络型（TCP/UDP/TLS）\&应用型（HTTP/HTTPS）"，否则监听器端口将无法启用HTTP/HTTPS。 - 选择已有：仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例，请单击"创建负载均衡器"跳转到ELB控制台创建。  - 自动创建：自动创建的负载均衡实例将创建到集群所在的VPC，具体配置如[表1](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__table3428724185319)所示。 说明： 当集群使用共享VPC时，不支持自动创建共享型ELB。    | 选择已有"独享型"的"网络型（TCP/UDP/TLS）\&应用型（HTTP/HTTPS）"实例 |
      
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002374155156.png "点击放大")
   
   
   
5. 填写访问设置参数。
   
   
   | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|:---|
   | 服务亲和 | 选择将外部流量路由到节点本地或集群范围的端点，详情请参见[服务亲和（externalTrafficPolicy）](https://support.huaweicloud.com/usermanual-cce/cce_10_0249.html#cce_10_0249__section18134208069)。 - 集群级别：集群下所有节点的IP+节点端口均可以访问到此服务关联的负载，服务访问会因路由跳转导致一定性能损失，且无法获取到客户端源IP。  - 节点级别：只有通过负载所在节点的IP+节点端口才可以访问此服务关联的负载，服务访问没有因路由跳转导致的性能损失，且可以获取到客户端源IP。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 集群级别                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 端口配置 | - 协议：请根据业务的协议类型选择。根据Kubernetes中定义的实现方案，Service在使用ELB提供的非UDP协议时，都需要将该参数设置为TCP并选择对应的[监听器前端协议](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__li1688115499190)。详细说明请参见[Service所用的协议](https://kubernetes.io/zh-cn/docs/reference/networking/service-protocols/#special-cases)。  - 容器端口：工作负载程序实际监听的端口，需用户确定。例如nginx默认使用80端口。  - 服务端口：Service使用的端口。 - 单端口监听：端口范围为1-65535。  - 区间端口监听：负载均衡服务支持创建某个端口范围的监听器，您最多可为每个监听器添加10个互不重叠的监听端口段。 为负载均衡服务配置区间端口监听需满足以下条件： - 集群版本为v1.23.18-r0、v1.25.13-r0、v1.27.10-r0、v1.28.8-r0、v1.29.4-r0、v1.30.1-r0及以上。  - 使用独享型ELB且选择TCP/UDP/TLS协议。  - 该功能依赖ELB能力，使用该功能前请确认ELB在当前区域是否支持四层协议全端口监听和转发。      - 监听器前端协议：ELB监听器的前端协议，是客户端与负载均衡监听器建立流量分发连接所使用的协议。当选择独享型负载均衡器类型时，包含"应用型（HTTP/HTTPS）"方可支持配置HTTP/HTTPS；包含"网络型（TCP/UDP/TLS）"方可支持配置TLS。   说明： 在创建LoadBalancer类型Service时，会自动生成一个随机节点端口号（NodePort）。 | - 协议：TCP协议  - 容器端口：80  - 服务端口：80  - 监听器前端协议：HTTP   |
      
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002413836705.png "点击放大")
   
   
   
6. 设置负载监听器相关配置参数。 
   
   | 参数                 | 说明                                                                 | 使用限制                                                              | 示例 |
   |:---|:---|:---|:---|
   | 获取监听器端口号           | 开启后可以将ELB实例的监听端口从报文的HTTP头中带到后端云服务器。                                | 独享型ELB实例的监听器前端协议[使用HTTP/HTTPS]时支持配置。 | 开启 |
   | 获取客户端请求端口号         | 开启后可以将客户端的源端口从报文的HTTP头中带到后端云服务器。                                   | 独享型ELB实例的监听器前端协议[使用HTTP/HTTPS]时支持配置。 | 开启 |
   | 重写X-Forwarded-Host | 开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。                       | 独享型ELB实例的监听器前端协议[使用HTTP/HTTPS]时支持配置。 | 开启 |
   | 重写X-Real-IP        | 开启后将以客户端的源IP地址重写X-Real-IP传递到后端服务器。                                 | 独享型ELB实例的监听器前端协议[使用HTTP/HTTPS]时支持配置。 | 开启 |
   | 获取ELB实例的EIP地址      | 开启后，ELB会将ELB实例的EIP地址通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTP和HTTPS协议。  | 独享型ELB实例的端口[使用HTTP/HTTPS]时支持配置。      | 开启 |
   | 获取负载均衡器实例的ID       | 开启后，ELB会将ELB实例的监听端口通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTP和HTTPS协议。   | 独享型ELB实例的端口[使用HTTP/HTTPS]时支持配置。      | 开启 |
   | 获取负载均衡器实例的监听协议     | 开启后，ELB会将负载均衡器实例的监听协议通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTP和HTTPS协议。 | 独享型ELB实例的端口[使用HTTP/HTTPS]时支持配置。      | 开启 |
   | 获取负载均衡器实例的证书ID     | 开启后，ELB会将负载均衡器实例的证书ID通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTPS协议。      | 独享型ELB实例的端口[使用HTTP/HTTPS]时支持配置。      | 开启 |
   | 获取负载均衡器实例的算法协议     | 开启后，ELB会将负载均衡器实例的算法协议通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTPS协议。      | 独享型ELB实例的端口[使用HTTP/HTTPS]时支持配置。      | 开启 |
   | 获取负载均衡器实例的算法套件     | 开启后，ELB会将负载均衡器实例的算法套件通过HTTP请求头传递给后端服务器。仅支持独享型ELB，且仅支持HTTPS协议。      | 独享型ELB实例的端口[使用HTTP/HTTPS]时支持配置。      | 开启 |
      
   
   
   
7. 单击"创建"，创建Service。
 
以关联已有ELB为例，Service配置HTTP/HTTPS头字段的YAML文件配置如下：
```
apiVersion: v1
kind: Service
metadata:
  name: test
  labels:
    app: nginx
  namespace: default
  annotations:
    kubernetes.io/elb.class: performance                              # ELB类型，仅支持performance，即独享型ELB
    kubernetes.io/elb.id: 35cb350b-23e6-4551-ac77-10d5298f5204        # 已有ELB的ID
    kubernetes.io/elb.protocol-port: https:443                          # 使用HTTPS协议443端口
    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
    kubernetes.io/elb.x-real-ip: 'true'                              # 重写X-Real-IP
    kubernetes.io/elb.x-forwarded-proto: 'true'              # 获取负载均衡器实例的监听协议
    kubernetes.io/elb.x-forwarded-elb-ip: 'true'             # 获取ELB实例的eip地址
    kubernetes.io/elb.x-forwarded-elb-id: 'true'             # 获取负载均衡器实例的ID
    kubernetes.io/elb.x-forwarded-tls-certificate-id: 'true' # 获取负载均衡器实例的证书ID
    kubernetes.io/elb.x-forwarded-tls-protocol: 'true'       # 获取负载均衡器实例的算法协议
    kubernetes.io/elb.x-forwarded-tls-cipher: 'true'         # 获取负载均衡器实例的算法套件
    kubernetes.io/elb.tls-certificate-ids: 6cfb43c9de1a41a18478b868e3******       # HTTPS监听器服务端证书
spec:
  selector:
    app: nginx
  externalTrafficPolicy: Cluster
  ports:
    - name: cce-service-0
      targetPort: 80
      nodePort: 0
      port: 80
     
      protocol: TCP
  type: LoadBalancer
  loadBalancerIP: **.**.**.**    # ELB的IP
```
表2关键参数说明 
| 参数                                               | 参数类型   | 描述                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| 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到后端服务器。   |
| kubernetes.io/elb.x-real-ip                      | String | - true：开启重写X-Real-IP开关，ELB以客户端的源IP地址重写X-Real-IP传递到后端服务器  - false：关闭重写X-Real-IP开关，ELB透传客户端的X-Real-IP到后端服务器。                                           |
| kubernetes.io/elb.x-forwarded-elb-ip             | String | ELB可通过x-forwarded-elb-ip头字段获取监听器eip地址，传输到后端服务器的报文中。仅支持HTTP和HTTPS协议。 ● true：开启获取监听器eip地址开关。 ● false（默认）：关闭获取监听器eip地址开关。                                                                                                                      |
| kubernetes.io/elb.x-forwarded-elb-id             | String | ELB可通过x-forwarded-elb-id头字段获取负载均衡器实例的ID，传输到后端服务器的报文中。仅支持HTTP和HTTPS协议。 ● true：开启获取负载均衡器实例的ID开关。 ● false（默认）：关闭获取负载均衡器实例的ID开关。                                                                                                                   |
| kubernetes.io/elb.x-forwarded-proto              | String | ELB可通过x-forwarded-proto头字段获取负载均衡器实例的监听协议，传输到后端服务器的报文中。仅支持HTTP和HTTPS协议。 ● true（默认）：开启获取负载均衡器实例的监听协议开关。 ● false：关闭获取负载均衡器实例的监听协议开关。                                                                                                              |
| kubernetes.io/elb.x-forwarded-tls-certificate-id | String | ELB可通过x-forwarded-tls-certificate-id头字段获取负载均衡器实例的证书ID，传输到后端服务器的报文中。仅支持HTTPS协议。 ● true：开启获取负载均衡器实例的证书ID开关。 ● false（默认）：关闭获取负载均衡器实例的证书ID开关。                                                                                                    |
| kubernetes.io/elb.x-forwarded-tls-protocol       | String | ELB可通过x-forwarded-tls-protocol头字段获取负载均衡器实例的算法协议，传输到后端服务器的报文中。仅支持HTTPS协议。 ● true（默认）：开启获取负载均衡器实例的算法协议开关。 ● false：关闭获取负载均衡器实例的算法协议开关。                                                                                                           |
| kubernetes.io/elb.x-forwarded-tls-cipher         | String | ELB可通过x-forwarded-tls-cipher头字段获取负载均衡器实例的算法套件，传输到后端服务器的报文中。仅支持HTTPS协议。 ● true：开启获取负载均衡器实例的算法套件开关。 ● false（默认）：关闭获取负载均衡器实例的算法套件开关。                                                                                                            |
   
#### 验证配置
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"服务"，找到新建Service所在行，单击负载均衡名称跳转至ELB控制台查看。
3. 切换至"监听器"页签，单击新建端口对应的监听器名称，查看配置是否开启。 
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002413906757.png "点击放大")
   
   
   
   
   
 
