更新时间:2025-08-19 GMT+08:00

为负载均衡类型的Service配置HTTP/2

Service支持HTTP/2的方式暴露服务。在默认情况下,客户端与负载均衡之间采用HTTP1.X协议,使用HTTP/2可提升客户端与ELB间的访问性能,但ELB与后端服务器间仍采用HTTP1.X协议。

  • 当负载均衡端口使用HTTPS协议时,支持使用HTTP/2功能。
  • 配置HTTP/2后,如果您在CCE控制台删除开启HTTP/2的高级配置或在YAML中删除对应的annotation,ELB侧的配置将会保留。

前提条件

  • 已创建Kubernetes集群,且集群版本满足以下要求:
    • v1.23集群:v1.23.13-r0及以上版本
    • v1.25集群:v1.25.8-r0及以上版本
    • v1.27集群:v1.27.5-r0及以上版本
    • v1.28集群:v1.28.3-r0及以上版本
    • 其他更高版本的集群

步骤一:部署示例应用

本文以Nginx无状态工作负载为例。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“工作负载”,单击页面右上角“创建工作负载”
  3. 在工作负载的“基本信息”中,填写负载名称,本示例中为nginx。其他参数保持默认值。
  4. 在“容器配置 > 容器信息”中,填写容器镜像名称和镜像版本。其他参数保持默认值。

    配置项

    配置示例

    镜像名称

    单击“选择镜像”,选择“镜像中心”页签,然后搜索nginx,选择nginx后单击“确定”。

    镜像版本

    选择需要部署的镜像版本为latest。

  5. 其余参数均可保持默认,单击“创建工作负载”,完成创建。

步骤二:创建负载均衡并配置HTTP/2

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“服务”,在右上角单击“创建服务”
  3. 设置Service参数。本示例中仅列举必选参数,其余参数可根据需求参考通过控制台创建进行设置。

    • Service名称:自定义服务名称,可与工作负载名称保持一致。
    • 访问类型:选择“负载均衡”
    • 选择器:添加标签,Service根据标签选择Pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”
    • 负载均衡器:选择弹性负载均衡的类型、创建方式。
      • 类型:“独享型”“共享型”,其中独享型ELB需选择“应用型(HTTP/HTTPS)”“网络型(TCP/UDP)&应用型(HTTP/HTTPS)”,否则监听器端口将无法启用HTTP/HTTPS。
      • 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见表1
    • 端口配置:
      • 协议:请选择TCP协议,选择UDP协议将无法使用HTTP/HTTPS。
      • 服务端口:Service使用的端口,端口范围为1-65535。
      • 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。
      • 监听器前端协议:本例中Service使用HTTP/2需选择开启HTTPS。当选择独享型负载均衡器类型时,需包含“应用型(HTTP/HTTPS)”方可支持配置HTTP/HTTPS。
    • 监听器配置:
      • SSL解析方式:v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上版本的集群支持。
        • 单向认证:仅进行服务器端认证。如需认证客户端身份,请选择双向认证。
        • 双向认证:双向认证需要负载均衡实例与访问用户互相提供身份认证,从而允许通过认证的用户访问负载均衡实例,后端服务器无需额外配置双向认证。
      • CA证书:SSL解析方式选择“双向认证”时需要添加CA证书,用于认证客户端身份。CA证书又称客户端CA公钥证书,用于验证客户端证书的签发者;在开启HTTPS双向认证功能时,只有当客户端能够出具指定CA签发的证书时,HTTPS连接才能成功。
      • 服务器证书:使用HTTPS协议时需要选择一个服务器证书。如果当前无可选证书,需前往弹性负载均衡控制台进行创建,详情请参见创建证书
      • SNI:选择添加SNI证书,证书中必须包含域名。如果当前无可选证书,需前往弹性负载均衡控制台进行创建,详情请参见创建证书
      • 高级配置:单击“添加高级配置”,选择“开启HTTP/2”,并将状态设置为“开启”。
    图1 开启HTTP/2

  4. 单击“确定”,创建Service。

若需开启HTTP2功能,可在annotation字段中加入如下配置:

kubernetes.io/elb.http2-enable: 'true'
以关联已有ELB为例,yaml配置文件如下。
apiVersion: v1
kind: Service
metadata:
  name: test
  labels:
    app: test
    version: v1
  namespace: default
  annotations:
    kubernetes.io/elb.class: performance
    kubernetes.io/elb.id: 35cb350b-23e6-4551-ac77-10d5298f5204
    kubernetes.io/elb.protocol-port: https:443
    kubernetes.io/elb.cert-id: b64ab636f1614e1a960b5249c497a880
    kubernetes.io/elb.http2-enable: 'true'
    kubernetes.io/elb.lb-algorithm: ROUND_ROBIN
spec:
  selector:
    app: test
    version: v1
  externalTrafficPolicy: Cluster
  ports:
    - name: cce-service-0
      targetPort: 80
      nodePort: 0
      port: 443
      protocol: TCP
  type: LoadBalancer
  loadBalancerIP: **.**.**.**
表1 HTTP/2参数说明

参数

参数类型

描述

kubernetes.io/elb.protocol-port

String

Service使用HTTP/HTTPS时,需设置协议及端口号,格式为protocol:port。

其中,

  • protocol:为监听器端口对应的协议,取值为http或https。
  • ports:为Service的服务端口,即spec.ports[].port指定的端口。

例如,本示例中使用HTTPS协议,Service服务端口为443,因此参数值为https:443

kubernetes.io/elb.cert-id

String

ELB服务中的证书ID,作为HTTPS服务器证书。

获取方法:在ELB控制台,选择“证书管理”。在列表中复制对应证书名称下的ID即可。

kubernetes.io/elb.http2-enable

String

表示HTTP/2功能的开启状态。开启后,可提升客户端与ELB间的访问性能,但ELB与后端服务器间仍采用HTTP1.X协议。

取值范围:

  • true:开启HTTP/2功能;
  • false:关闭HTTP/2功能(默认为关闭状态)。

注意:只有当监听器的协议为HTTPS时,才支持开启或关闭HTTP/2功能。当监听器的协议为HTTP时,该字段无效,默认将其设置为false。

步骤三:访问工作负载

测试HTTP/2连接,其中https://example.com仅作为示例,请根据实际情况进行替换。
curl -I -k https://example.com --http2

回显如下:

HTTP/2 200
date: Wed, 30 Jul 2025 08:03:45 GMT
content-type: text/html
content-length: 612
last-modified: Tue, 17 Apr 2018 13:46:53 GMT
etag: "5ad5facd-264"
accept-ranges: bytes
server: elb

部分curl版本可能不支持HTTP2,使用以上命令前建议执行curl --version命令,确认Features字段中包含HTTP2。如果curl版本不满足要求,请访问curl官网获取最新版本。