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

Container Service for Kubernetes:QUIC リスナーを用いた HTTP/3 対応によるネットワークパフォーマンスの向上

最終更新日:Mar 07, 2026

モバイルネットワークなどの不安定なネットワーク環境、またはオンラインゲームやストリーミングメディアサービスなど低遅延が求められるシナリオでは、HTTP/3 対応の QUIC リスナーを活用して、ネットワーク通信のパフォーマンスを向上させます。

仕組み

UDP を基盤とする QUIC プロトコルは、HTTP/3 の基盤です。多重化、0-RTT ハンドシェイク、効率的な輻輳制御アルゴリズム、シームレスな接続移行といった改善点を提供します。TCP 上の TLS に依存する HTTP/2 と比較して、QUIC を基盤とする HTTP/3 は、データの再送および通信遅延を大幅に削減し、ネットワークパフォーマンスを向上させます。QUIC の詳細については、「公式 QUIC ドキュメント」をご参照ください。

QUIC リスナーは、HTTPS リスナーと併用することも、単独で使用することもできます。それぞれの違いは以下のとおりです:

  • QUIC リスナーを単独で使用する場合:QUIC リスナーを作成後、Application Load Balancer (ALB) インスタンスはクライアントからの HTTP/3 プロトコルによるサービスアクセスを許可しますが、HTTP/2 などの従来の HTTP プロトコルはサポートされません。

  • QUIC リスナーと HTTPS リスナーを併用する場合:一部のクライアントが HTTP/1.1 や HTTP/2 を用いてサービスにアクセスする必要がある場合は、両方のリスナーを併用することで、複数の HTTP プロトコルとの互換性を確保できます。両方のリスナーを併用する場合、ALB インスタンスの動作は以下の図のとおりです。QUIC リスナーと HTTPS リスナーは同一ポートを監視し、同一の転送ルールセットを使用します。ALB インスタンスがクライアントリクエストを受信すると、まず QUIC リスナーを優先してバックエンドサービスへリクエストを転送します。クライアントが HTTP/3 をサポートしていない場合は、HTTPS リスナー経由でリクエストを転送します。

    image

QUIC リスナーの構成

QUIC リスナーと HTTPS リスナーを併用する

前提条件

ステップ 1:AlbConfig で QUIC リスナーを作成する

  1. 以下のコマンドを実行して AlbConfig を編集します。

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

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: #...
    spec:
      config:
        #...
      listeners:
        - port: 443
          protocol: HTTPS
          certificates:
          - CertificateId: 756****-cn-hangzhou # 証明書の CertIdentifier
            IsDefault: true
          quicConfig:
            quicListenerId: "" # ここは現時点では空欄のままにしてください。次のステップで値を入力します。
            quicUpgradeEnabled: false # この値を false に設定します。
        - port: 443
          protocol: QUIC # QUIC リスナー
          certificates:
          - CertificateId: 756****-cn-hangzhou # HTTPS リスナーと同じ証明書を使用します。
            IsDefault: true 
    重要

    上記の例では、AlbConfig 内での証明書の指定方法を示しています。QUIC リスナーは、自動検出証明書および Secret 証明書もサポートします。詳細については、「暗号化通信のための HTTPS 証明書の構成」をご参照ください。

ステップ 2:Ingress にアノテーションを追加する

Ingress リソースにアノテーションを追加し、Ingress が複数のリスナーに適用されるようにします。

  1. 以下のコマンドを実行して Ingress を編集します。

    kubectl edit ingress <INGRESS_NAME> # <INGRESS_NAME> をご利用の Ingress の名前に置き換えます。
  2. Ingress の annotations フィールドに、以下の内容を追加します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: #...
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"QUIC": 443},{"HTTPS": 443}]' # Ingress を QUIC リスナーおよび HTTPS リスナーの両方に適用します。
    spec:
      #...

ステップ 3:リスナーを関連付ける

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

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

  3. QUIC リスナー ID を AlbConfig に追加します。

    1. 以下のコマンドを実行して AlbConfig を編集します。

      kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
    2. HTTPS リスナーの quicListenerId フィールドに QUIC リスナー ID を入力し、quicUpgradeEnabled フィールドの値を true に変更します。

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: #...
      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. インスタンス ページで、対象インスタンスの ID をクリックします。次に、インスタンスの詳細ページで リスナー タブをクリックします。最後に、リスナー一覧から対象の HTTPS リスナー名をクリックし、リスナーの詳細 タブで関連付けられた QUIC リスナーを確認します。

ステップ 4:結果の検証

ALB Ingress を通じて HTTP/3 プロトコルでサービスにアクセスし、構成を検証します。

  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

    次のステップで使用するため、HOSTS 列および ADDRESS 列の値を記録します。

  2. 以下のコマンドを実行して、HTTP/3 および従来の HTTPS を使用してサービスにアクセスします。前のステップで記録した値を、demo.alb.ingress.top および alb-********.alb.aliyuncs.com にそれぞれ置き換えます。

    説明

    一部のバージョンの curl は、デフォルトで HTTP/3 をサポートしていません。お使いの curl のバージョンが HTTP/3 をサポートしていることを確認してください。

    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: "" # QUIC リスナー ID を空欄に設定します。
          quicUpgradeEnabled: false # この値を false に変更します。
        requestTimeout: 0
    # ... (省略)

QUIC リスナーを単独で使用する

前提条件

ステップ 1:AlbConfig で QUIC リスナーを作成する

  1. 以下のコマンドを実行して AlbConfig を編集します。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
  2. QUIC リスナーを作成します。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: #...
    spec:
      config:
        #...
      listeners:
        - port: 443
          protocol: QUIC # QUIC リスナー
          certificates:
          - CertificateId: 756****-cn-hangzhou # 証明書の CertIdentifier
            IsDefault: true 
    重要

    上記の例では、AlbConfig 内での証明書の指定方法を示しています。QUIC リスナーは、自動検出証明書および Secret 証明書もサポートします。詳細については、「暗号化通信のための HTTPS 証明書の構成」をご参照ください。

ステップ 2:サンプルリソースを作成する

  1. ファイル名を `https-quickstart.yaml` として作成し、以下の内容をコピーして保存します。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: https-ingressclass
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb # これをご利用の AlbConfig リソースの名前に変更します。
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: https-ingress
    spec:
      ingressClassName: https-ingressclass
      rules:
      - host: demo.alb.ingress.top # 証明書に関連付けられたドメイン名に置き換えます。
        http:
          paths:
          - backend:
              service:
                name: https-svc
                port:
                  number: 443
            path: /
            pathType: Prefix
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: https-deploy
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: https-deploy
      template:
        metadata:
          labels:
            app: https-deploy
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/old-nginx:latest
              imagePullPolicy: IfNotPresent
              name: https-deploy
              ports:
                - containerPort: 80
                  protocol: TCP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: https-svc
    spec:
      ports:
        - name: port1
          port: 443
          protocol: TCP
          targetPort: 80
      selector:
        app: https-deploy
      sessionAffinity: None
      type: ClusterIP
  2. 以下のコマンドを実行してリソースを作成します。

    kubectl apply -f https-quickstart.yaml

ステップ 3:Ingress にアノテーションを追加する

Ingress リソースにアノテーションを追加し、Ingress が QUIC リスナーに適用されるようにします。

  1. 以下のコマンドを実行して Ingress を編集します。

    kubectl edit ingress https-ingress
  2. Ingress の annotations フィールドに、以下の内容を追加します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: #...
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"QUIC": 443}]' # Ingress を QUIC リスナーに適用します。
    spec:
      #...

ステップ 4:検証

  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

    次のステップで使用するため、HOSTS 列および ADDRESS 列の値を記録します。

  2. 以下のコマンドを実行して、HTTP/3 を使用してサービスにアクセスします。前のステップで記録した値を、demo.alb.ingress.top および alb-********.alb.aliyuncs.com にそれぞれ置き換えます。

    説明

    一部のバージョンの curl は、デフォルトで HTTP/3 をサポートしていません。お使いの curl のバージョンが HTTP/3 をサポートしていることを確認してください。

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

    以下の出力が返された場合、QUIC リスナーの構成が正常に完了しています。

    old

参考資料