全部產品
Search
文件中心

Container Compute Service:使用QUIC監聽相容HTTP/3協議提高網路通訊效能

更新時間:Dec 11, 2024

針對移動網路等網路環境複雜、頻寬波動且時延要求較高的情境,或者對於需要低延遲資料互動的應用(如網路遊戲、線上ApsaraVideo for Live等),您可以使用QUIC協議,並在服務端開啟QUIC監聽。QUIC支援相容用戶端使用HTTP/3協議訪問服務,從而有效提升網路通訊的穩定性和即時效能。

工作原理

基於UDP的QUIC協議是HTTP/3的核心,它具有多工、0-RTT握手、高效擁塞控制演算法、無縫連結遷移等多種改進。相比起使用TLS+TCP的HTTP/2,基於QUIC的HTTP/3能顯著減少資料重傳和通訊延遲,從而提高網路通訊效能。關於QUIC的更多資訊,請參考QUIC官方文檔

  • 建立QUIC監聽後,ALB執行個體支援用戶端使用HTTP/3協議訪問服務。

  • 如果部分用戶端需要使用HTTP/1.1或HTTP/2訪問服務,QUIC還支援與HTTPS監聽聯合使用,以保證對多種HTTP協議的相容性。在聯合使用兩種監聽時,ALB執行個體的工作模式如下圖所示。QUIC監聽與HTTPS監聽同時監聽同一個連接埠,並且使用相同的一組轉寄規則。在接收用戶端訪問請求時,ALB執行個體會優先使用QUIC監聽將請求轉寄至後端服務。而當用戶端不支援HTTP/3協議時,ALB執行個體會通過HTTPS監聽進行轉寄。

前提條件

已建立ALBConfig資源。具體操作,請參見ALB Ingress快速入門

單獨使用QUIC監聽

步驟一:在ALBConfig中建立QUIC監聽

  1. 執行以下命令編輯AlbConfig。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
  2. 建立QUIC監聽。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        #...
      listeners:
        - port: 443
          protocol: QUIC # QUIC監聽
          certificates:
          - CertificateId: 756****-cn-hangzhou # 認證的CertIdentifier
            IsDefault: true 
    重要

    以上樣本使用了ALBConfig指定認證的配置方法。QUIC監聽同樣支援使用自動探索認證或Secret認證。具體操作,請參見配置HTTPS認證以實現加密通訊

步驟二:效果驗證

  1. 執行以下命令,查看Ingress資訊。

    kubectl get ingress

    預期輸出:

    NAME            CLASS                HOSTS                  ADDRESS                         PORTS     AGE
    https-ingress   https-ingressclass   demo.alb.ingress.top   alb-********.alb.aliyuncs.com   80, 443   83m

    記錄下HOSTSADDRESS部分的值,以便後續步驟使用。

  2. 執行以下命令,分別使用HTTP/3與傳統的HTTPS訪問服務。其中的demo.alb.ingress.topalb-********.alb.aliyuncs.com請替換為在上一步中得到的值。

    說明

    一部分curl版本並不預設支援使用HTTP/3協議,請使用支援HTTP/3的curl。

    curl --http3 -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com

    預期輸出如下,則表明QUIC監聽配置成功:

    old

聯合使用QUIC監聽與HTTPS監聽

步驟一:建立HTTPS監聽

  1. 執行以下命令編輯AlbConfig。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
  2. 建立HTTPS監聽,並在HTTPS監聽中添加quicConfig欄位。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        #...
      listeners:
        - port: 443
          protocol: QUIC # QUIC監聽
          certificates:
          - CertificateId: 756****-cn-hangzhou # 認證的CertIdentifier
            IsDefault: true
        - port: 443
          protocol: HTTPS # HTTPS監聽
          certificates:
          - CertificateId: 756****-cn-hangzhou # 認證的CertIdentifier
            IsDefault: true
          quicConfig:
            quicListenerId: "" # 目前置空,在下一步中會填入值
            quicUpgradeEnabled: false # 設為false
    重要

    以上樣本使用了ALBConfig指定認證的配置方法。QUIC監聽同樣支援使用自動探索認證或Secret認證。

步驟二:在Ingress中添加註解

您需要在Ingress資源中添加註解,以保證Ingress同時作用於多個監聽。

  1. 執行以下命令,編輯Ingress。

    kubectl edit ingress quic-ingress # quic-ingress替換為Ingress的名稱
  2. 在Ingress中添加annotation

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: #...
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"QUIC": 443},{"HTTPS": 443}]' # 使用多個監聽時需要添加annotation使ALB Ingress正常工作
    spec:
      #...

步驟三:關聯監聽

  1. 登入應用型負載平衡ALB控制台

  2. 執行個體頁面,單擊目標ALB執行個體ID。在監聽頁簽,尋找監聽協議/連接埠為QUIC:443的監聽,記錄此監聽的ID。

  3. 在ALBConfig中填入QUIC監聽的ID。

    1. 執行以下命令編輯AlbConfig。

      kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
    2. quicListenerId欄位中填入QUIC監聽的ID,並將quicUpgradeEnabled欄位的值修改為true

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb
      spec:
        config:
          #...
        listeners:
          - port: 443
            protocol: HTTPS
            certificates:
            - CertificateId: 756****-cn-hangzhou
              IsDefault: true 
            quicConfig: 
              quicListenerId: lsn-tnz740dr8p5h65**** # 具體QUIC監聽listener ID。
              quicUpgradeEnabled: true # 修改為true
          - port: 443
            protocol: QUIC # QUIC監聽
            certificates:
            - CertificateId: 756****-cn-hangzhou
              IsDefault: true 
  4. 確認監聽已關聯。

    1. 登入應用型負載平衡ALB控制台

    2. 執行個體頁面,單擊目標執行個體ID,然後在執行個體詳情頁面,單擊監聽頁簽,最後在監聽列表,單擊目標HTTPS監聽名稱,在監聽詳情頁簽查看已關聯的QUIC監聽。

步驟四:效果驗證

使用HTTP/3協議通過ALB Ingress訪問服務,驗證配置的效果。

  1. 執行以下命令,查看Ingress資訊。

    kubectl get ingress

    預期輸出:

    NAME            CLASS                HOSTS                  ADDRESS                         PORTS     AGE
    https-ingress   https-ingressclass   demo.alb.ingress.top   alb-********.alb.aliyuncs.com   80, 443   83m

    記錄下HOSTSADDRESS部分的值,以便後續步驟使用。

  2. 執行以下命令,分別使用HTTP/3與傳統的HTTPS訪問服務。其中的demo.alb.ingress.topalb-********.alb.aliyuncs.com請替換為在上一步中得到的值。

    說明

    一部分curl版本並不預設支援使用HTTP/3協議,請使用支援HTTP/3的curl。

    curl --http3 -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com
    curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com

    預期輸出如下,則表明兩種監聽關聯成功,相容多種HTTP協議:

    old
    old

(可選)步驟五:解除關聯

  1. 執行以下命令編輯AlbConfig。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
  2. quicListenerId欄位置空,並將quicUpgradeEnabled欄位的值修改為false,然後儲存並退出。

    # 以上內容省略。
        port: 443
        protocol: HTTPS
        quicConfig:
          quicListenerId: "" # 將QUIC監聽listener ID置空。
          quicUpgradeEnabled: false # 修改為false
        requestTimeout: 0
    # 以下內容省略。

相關文檔