首页 微服务引擎 MSE 快速入门 云原生网关 在云原生网关中开启HTTP/3

在云原生网关中开启HTTP/3

更新时间: 2023-08-08 15:54:56

HTTP/3具备三大特性:对头阻塞、连接迁移、O-RTT,尤其对于目前多设备网络切换、弱网连接具备很明显的优势。本文介绍如何在云原生网关中开启并使用HTTP/3。

背景信息

HTTP/3的使用不仅需要业务服务自身支持HTTP/3,还需要外部请求的流量是HTTP/3。因为业务自身支持HTTP/3需要做一定的程序改造,所以大部分用户更倾向于保持自身业务不变,由接入网关完成协议转换。该方式虽然链路请求不如全程选择HTTP/3提升大,但也可以享受一部分HTTP/3的网络优势,因此本文以该链路为背景说明。

HTTP/1.1

HTTP/1.1使用空格分隔的文本字段来传递HTTP消息。虽然这些交换是可读的,但使用空格进行消息格式化会导致解析复杂和对变体行为的过度容忍。HTTP/1.1不包含多路复用层,因此经常使用多个TCP连接来并行处理请求。但是这样对拥塞控制和网络效率有负面影响。更多信息,请参见HTTP/1.1

HTTP/2

HTTP/2引入了二进制帧和多路复用层,在不修改传输层的情况下改善了延迟。但由于HTTP/2多路复用的并行特性对TCP的丢失恢复机制不可见,因此丢失或重新排序的数据包会导致所有活动请求都经历停顿,无论该请求是否直接受到丢失数据包的影响。更多信息,请参见HTTP/2

HTTP/3

2022年06月06日,IETF QUIC和HTTP工作组成员Robin Marx宣布,经过5年的努力,HTTP/3被标准化为RFC 9114。更多信息,请参见HTTP/3 From A To Z: Core ConceptsRFC 9114

HTTP/3采用了谷歌多年探索的基于UDP的QUIC协议,原名HTTP-over-QUIC,2018年被IETF批准更名为HTTP/3。目前,Cloudflare、Google Chrome、Firefox Nightly均表示支持HTTP/3。

为了解决HTTP/2中存在的队头阻塞问题,HTTP/3不再基于TCP建立,而是基于Google提出了基于UDP实现的开源协议QUIC,使用stream进一步扩展了HTTP/2的多路复用,并在阻塞控制、头部压缩等方面做了提升。更多信息,请参见队头阻塞

操作流程image

操作步骤

通过MSE控制台配置

  1. 网关开启HTTP/3支持。

    说明

    网关需为1.2.14及以上版本。

    1. 登录MSE网关管理控制台,并在顶部菜单栏选择地域。

    2. 在左侧导航栏,选择云原生网关 > 网关列表,单击目标网关名称。

    3. 在左侧导航栏,单击参数配置

    4. 网关引擎参数区域,参数EnableHttp3操作列,单击编辑

      image
    5. 参数修改对话框,打开参数值开关并单击确定

  2. 检查网关配置的域名中是否开启HTTPS。

    HTTP/3要求使用HTTPS来保证链路安全性,因此需要在网关针对测试域名开启HTTPS。关于如何在网关中配置域名,请参见关联域名1677657587920-4b715a47-e640-49d3-a62b-19f11a1d2c34

    说明

    如果网关中配置了HTTPS域名,可以在CLB控制台查看CLB实例443监听端口的健康检查状态是否正常。

    image
  3. 网关的入口CLB开启UDP监听。

    1. 登录MSE网关管理控制台,并在顶部菜单栏选择地域。

    2. 在左侧导航栏,选择云原生网关 > 网关列表,单击目标网关名称。

    3. 在左侧导航栏,单击基本概览

    4. 网关入口页签,找到需要开启HTTP/3的CLB实例,然后单击对应的ID跳转至CLB控制台。

    5. 实例管理页面,单击监听,然后单击添加监听,配置完相关信息,后单击提交。

      配置项

      描述

      选择负载均衡协议

      选择UDP协议。

      监听端口

      添加443端口。

      虚拟服务器组

      复用网关TCP 443虚拟服务器组。

      image

      开启健康检查

      配置健康检查能够让负载均衡自动排除健康状况异常的后端服务器。

  4. 网关中添加HTTP服务并增加对应的路由配置。

    1. 添加HTTP/1.1的后端测试服务。具体操作,请参见添加服务新建服务来源

    2. 为测试服务添加路由。具体操作,请参见新建路由规则

      例如已经添加了一条名称为quic的路由规则,调用方式为https://api.alibaba-inc.com/quic。

      image
    3. 使用curl命令发起HTTP/3请求测试。

      说明

      通过curl命令测试时,需添加--http3参数。HTTP/3方式需编译源码,使用已有curl http3镜像测试无需编译,您可按需选择测试方式。更多信息,请参见curl-http3

      image

通过Ingress配置

  1. 网关开启HTTP/3支持。

    1. 登录MSE网关管理控制台,并在顶部菜单栏选择地域。

    2. 在左侧导航栏,选择云原生网关 > 网关列表,单击目标网关名称。

    3. 在左侧导航栏,单击参数配置

    4. 网关引擎参数区域,单击参数EnableHttp3操作列的编辑

    5. 参数修改对话框,打开参数值开关,单击确定

      说明

      网关需为1.2.14及以上版本。

  2. 在ACK集群安装MSE Ingress Controller并关联MSE云原生网关。

  3. 在ACK集群配置Ingress。

    在ACK集群中创建HTTPS使用的Secret以及HTTPS域名路由,如下所示:

    apiVersion: v1
    kind: Secret
    metadata:
      name: testsecret-tls
      namespace: default
    data:
      tls.crt: base64 #编码的证书
      tls.key: base64 #编码的私钥
    type: kubernetes.io/tls
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tls-example-ingress
      annotations:
        nginx.ingress.kubernetes.io/backend-protocol: HTTP #如果后端是H2配置:HTTP2
    spec:
      tls:
      - hosts:
          - https-example.foo.com
        secretName: testsecret-tls
      rules:
      - host: https-example.foo.com
        http:
          paths:
          - path: /quic
            pathType: Prefix
            backend:
              service:
                name: service1  #后端服务
                port:
                  number: 80
  4. 为网关的入口CLB开启UDP监听。

    1. 登录MSE网关管理控制台,并在顶部菜单栏选择地域。

    2. 在左侧导航栏,选择云原生网关 > 网关列表,单击目标网关名称。

    3. 基本概览页面的网关入口页签,单击目标CLB ID,进入传统型负载均衡CLB控制台。

    4. 实例管理页面,单击监听页签,然后单击添加监听

      配置项

      描述

      选择负载均衡协议

      选择UDP协议。

      监听端口

      添加443端口。

      虚拟服务器组

      复用网关TCP 443虚拟服务器组。

      image

      开启健康检查

      配置健康检查能够让负载均衡自动排除健康状况异常的后端服务器。

  5. 使用curl命令发起HTTP/3请求测试。

    测试URL示例如下所示:

    curl --http3 https://https-example.foo.com/quic --resolve https-example.foo.com:443:<CLB IP地址>

阿里云首页 微服务引擎 MSE 相关技术圈