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

Microservices Engine:クラウドネイティブゲートウェイで HTTP/3 を有効にする

最終更新日:Apr 10, 2025

HTTP/3 には、ヘッドオブラインブロッキング、接続移行、ゼロラウンドトリップ時間(0-RTT)という 3 つの主要な機能があります。 HTTP/3 は、複数のデバイスでネットワーク切り替えが実行されるシナリオや、ネットワーク接続が弱いシナリオに特に適しています。このトピックでは、クラウドネイティブゲートウェイで HTTP/3 を有効にして使用する方法について説明します。

前提条件

バージョン V1.2.15 以降の Microservices Engine(MSE)クラウドネイティブゲートウェイが作成されていること。詳細については、「MSE クラウドネイティブゲートウェイを作成する」をご参照ください。

背景情報

HTTP/3 を使用するには、サービスが 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 年 6 月 6 日、IETF QUIC ワーキンググループと HTTP ワーキンググループのメンバーである Robin Marx 氏は、5 年間の努力を経て、HTTP/3 が RFC 9114 で提案標準として公開されたことを発表しました。詳細については、「HTTP/3 From A To Z: Core Concepts」および「RFC 9114」をご参照ください。

以前は HTTP-over-QUIC と呼ばれていた HTTP/3 は、Google が長年の経験に基づいて開発した UDP ベースの QUIC プロトコルです。 IETF は 2018 年に HTTP-over-QUIC を HTTP/3 に改名しました。Cloudflare、Google Chrome、Firefox Nightly は HTTP/3 をサポートしています。

HTTP/2 に存在するヘッドオブラインブロッキング問題の修正のために、HTTP/3 は TCP に基づいて実装されるのではなく、UDP の上に構築されます。 HTTP/3 では、ストリームを使用して HTTP/2 によって提供される多重化機能をさらに拡張し、輻輳制御とヘッダー圧縮のパフォーマンスが向上しています。ヘッドオブラインブロッキングの詳細については、「Head-of-line blocking」をご参照ください。

フローチャート

image

手順

MSE コンソールで HTTP/3 を有効にする

  1. クラウドネイティブゲートウェイで HTTP/3 を有効にします。

    1. [MSE コンソール] にログインします。上部のナビゲーションバーで、リージョンを選択します。

    2. 左側のナビゲーションペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。[ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

    3. 左側のナビゲーションペインで、パラメーターの設定 をクリックします。

    4. Gateway Engine Parameters セクションで、[enablehttp3] パラメーターを見つけ、Actions 列の Edit をクリックします。

      image

    5. Modify Parameters ダイアログボックスで、Value スイッチをオンにし、OK をクリックします。

  2. ゲートウェイのドメイン名のプロトコルとして HTTPS が構成されているかどうかを確認します。

    HTTP/3 では、安全な送信を確保するために HTTPS プロトコルが必要です。そのため、ゲートウェイのテストドメイン名に対して HTTPS を有効にする必要があります。ゲートウェイのドメイン名を構成する方法の詳細については、「ドメイン名を作成する」をご参照ください。

    説明

    ゲートウェイに HTTPS ドメイン名が構成されている場合は、[概要] ページで、ゲートウェイに関連付けられている Classic Load Balancer(CLB)インスタンスの名前をクリックできます。 CLB コンソールに移動し、CLB インスタンスのリスナーポート 443 の [ヘルスチェックステータス] が正常であることを確認します。

  3. ゲートウェイに HTTP サービスを追加し、ルーティングルールを追加します。

    1. HTTP/1.1 をサポートするバックエンドテストサービスを追加します。詳細については、「サービスの追加」および「サービスソースの追加」をご参照ください。

    2. テストサービスのルーティングルールを追加します。詳細については、「ルートの作成」をご参照ください。

      たとえば、quic という名前のルーティングルールを追加します。

    3. 次の cURL コマンドを実行して、HTTP/3 リクエストテストを開始します。

      curl --http3 https://api.alibaba-inc.com/quic --resolve api.alibaba-inc.com:443:<CLB インスタンスの IP アドレス> -k
      説明

      HTTP/3 テストを実行するには、ソースコードをコンパイルする必要があります。既存の cURL HTTP/3 イメージをテストに使用する場合、ソースコードをコンパイルする必要はありません。ビジネス要件に基づいてテスト方法を選択できます。詳細については、「curl-http3」をご参照ください。

Ingress を使用して HTTP/3 を有効にする

  1. クラウドネイティブゲートウェイで HTTP/3 を有効にします。

    1. [MSE コンソール] にログインします。上部のナビゲーションバーで、リージョンを選択します。

    2. 左側のナビゲーションペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。[ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

    3. 左側のナビゲーションペインで、パラメーターの設定 をクリックします。

    4. Gateway Engine Parameters セクションで、[enablehttp3] パラメーターを見つけ、Actions 列の Edit をクリックします。

      image

    5. Modify Parameters ダイアログボックスで、Value スイッチをオンにし、OK をクリックします。

  2. Container Service for Kubernetes(ACK)クラスターに MSE Ingress Controller をインストールし、ゲートウェイを MSE Ingress Controller に関連付けます。

  3. ACK クラスターで Ingress を構成します。

    ACK クラスターで HTTPS シークレットと HTTPS ドメイン名のルーティングルールを作成します。サンプルコード:

    apiVersion: v1
    kind: Secret
    metadata:
      name: testsecret-tls
      namespace: default
    data:
      tls.crt: base64 # Base64 エンコードされた証明書。
      tls.key: base64 # 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 # バックエンドサービスで HTTP/2 を使用する場合は、このパラメーターを 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. 次の cURL コマンドを実行して、HTTP/3 リクエストテストを開始します。

    curl --http3 https://https-example.foo.com/quic --resolve https-example.foo.com:443:<CLB インスタンスの IP アドレス> -k