すべてのプロダクト
Search
ドキュメントセンター

:HTTP/3 のサポートとネットワーク パフォーマンスの向上に QUIC リスナーを使用する

最終更新日:Dec 27, 2024

モバイルネットワーク、変動する帯域幅の使用量に基づいて低ネットワークレイテンシが必要なネットワーク、ネットワークレイテンシに敏感なアプリケーション (オンラインゲームやライブストリーミングなど) などの複雑なネットワークシナリオでは、QUIC を使用してバックエンドサーバーで QUICK リスニングを有効にすることができます。QUIC を使用すると、クライアントは HTTP/3 を使用してネットワーク通信の安定性とパフォーマンスを向上させることができます。

仕組み

QUIC は UDP に基づいており、HTTP/3 のコアです。多重化、0-RTT ハンドシェイク、輻輳制御アルゴリズム、シームレスな接続移行をサポートしています。TLS と TCP を使用する HTTP/2 と比較して、QUIC に基づく HTTP/3 はデータ再送信と通信のレイテンシを効率的に削減できます。QUIC の詳細については、QUIC 公式ドキュメントを参照してください。

  • ALB インスタンスの QUIC リスナーを作成すると、クライアントを使用して HTTP/3 経由でバックエンドサービスにアクセスできます。

  • 一部のクライアントが HTTP/1.1 または HTTP/2 経由でサービスにアクセスする必要がある場合は、HTTPS リスナーと共に QUIC を使用して、さまざまな HTTP プロトコルとの互換性を確保できます。QUIC リスナーと HTTPS リスナーの組み合わせを使用するには、ALB インスタンスが次のモードで動作する必要があります。QUIC リスナーと HTTPS リスナーは同じポートでリッスンし、同じ転送ルールを使用します。リクエストを受信すると、ALB インスタンスは優先的に QUIC リスナーを使用してリクエストをバックエンドサービスに転送します。クライアントが HTTP/3 をサポートしていない場合、ALB インスタンスは HTTPS リスナーを使用してリクエストを転送します。

前提条件

ALBConfig が作成されていること。詳細については、ALB Ingress を使用するを参照してください。

QUIC リスナーのみを使用する

手順 1: 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 # 証明書の ID。
            IsDefault: true 
    重要

    上記の例では、ALBConfig を使用して証明書を設定しています。QUIC リスナーは、自動証明書または Secret ディスカバリもサポートしています。詳細については、暗号化通信用の HTTPS 証明書を設定するを参照してください。

手順 2: 設定を確認する

  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 リスナーの組み合わせを使用する

手順 1: HTTPS リスナーを作成する

  1. 次のコマンドを実行して、AlbConfig を変更します。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
  2. HTTPS リスナーを作成し、quicConfig フィールドを追加します。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        #...
      listeners:
        - port: 443
          protocol: QUIC # QUIC リスナー。
          certificates:
          - CertificateId: 756****-cn-hangzhou # 証明書の ID。
            IsDefault: true
        - port: 443
          protocol: HTTPS # HTTPS リスナー。
          certificates:
          - CertificateId: 756****-cn-hangzhou # 証明書の ID。
            IsDefault: true
          quicConfig:
            quicListenerId: "" # 空のままにします。このパラメーターは、後続の手順で指定されます。
            quicUpgradeEnabled: false # false に設定します。
    重要

    上記の例では、ALBConfig を使用して証明書を設定しています。QUIC リスナーは、自動証明書または Secret ディスカバリもサポートしています。

手順 2: Ingress にアノテーションを追加する

Ingress が両方のリスナーを提供するように、Ingress にアノテーションを追加する必要があります。

  1. 次のコマンドを実行して、Ingress を変更します。

    kubectl edit ingress quic-ingress # quic-ingress を Ingress の名前に置き換えます。
  2. annotations を Ingress に追加します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: #...
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"QUIC": 443},{"HTTPS": 443}]' # 複数のリスナーを使用する場合、ALB Ingress にアノテーションを追加する必要があります。
    spec:
      #...

手順 3: リスナーを関連付ける

  1. ALB コンソールにログインします。

  2. インスタンスページで、ALB インスタンスの ID をクリックします。リスナータブで、リスナープロトコル/ポートが QUIC:443 のリスナーを見つけ、その ID を記録します。

  3. ALBConfig で ID を指定します。

    1. 次のコマンドを実行して、AlbConfig を変更します。

      kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
    2. quicListenerId を QUIC リスナーの ID に設定し、quicUpgradeEnabledtrue に設定します。

      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 リスナーの ID を指定します。
              quicUpgradeEnabled: true # true に設定します。
          - port: 443
            protocol: QUIC # QUIC リスナー。
            certificates:
            - CertificateId: 756****-cn-hangzhou
              IsDefault: true 
  4. リスナーの関連付けを確認します。

    1. ALB コンソールにログインします。

    2. インスタンスページで、管理するALBインスタンスのIDをクリックします。インスタンスの詳細ページで、リスナータブをクリックします。リスナーの一覧で、HTTPSリスナーの名前をクリックします。リスナーの詳細ページで、関連付けられているQUICリスナーを表示できます。

手順 4: 設定を確認する

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

    予期される出力が次のとおりである場合、2 つのリスナーは関連付けられており、複数の HTTP プロトコルと互換性があります。

    old
    old

手順 5: (オプション) 関連付けを削除する

  1. 次のコマンドを実行して、AlbConfig を変更します。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
  2. quicListenerId を空のままにし、quicUpgradeEnabled を false に設定します。

    # 前の内容は省略されています。
        port: 443
        protocol: HTTPS
        quicConfig:
          quicListenerId: "" # パラメーターを空のままにします。
          quicUpgradeEnabled: false # false に設定します。
        requestTimeout: 0
    # 内容は省略されています。

参考文献