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

Container Service for Kubernetes:QUICリスナーを使用してHTTP/3プロトコルをサポートし、ネットワーク通信を改善する

最終更新日:Oct 21, 2024

Quick UDP Internet Connections (QUIC) リスナーを使用してHTTP/3プロトコルをサポートすると、ネットワーク通信が改善されます。 このソリューションは、モバイルネットワークなどの不安定なネットワーク環境で使用できます。 また、高レイテンシを処理でき、オンラインゲームやストリーミングサービスなどのシナリオに最適です。

仕組み

UDPベースのQUICプロトコルは、HTTP/3の中核です。 QUICは、多重化、ゼロラウンドトリップタイム (0 − RTT) ハンドシェイク、効率的な輻輳制御アルゴリズム、およびシームレス統合などの利点を提供する。 HTTP/3は、Transport Layer Security (TLS) とTransmission Control Protocol (TCP) を使用するHTTP/2と比較して、データの再送信とネットワーク遅延を大幅に削減し、ネットワーク通信を改善します。 QUICの詳細については、「QUICの公式ドキュメント」をご参照ください。

QUICリスナーを個別に使用するか、HTTPSリスナーに関連付けることができます。 次のリストに違いを示します。

  • QUICリスナーのみを使用する: QUICリスナーを作成すると、HTTP/3を使用してクライアントからApplication Load Balancer (ALB) インスタンスにアクセスできます。 ただし、HTTP/2などの以前のHTTPプロトコルはサポートされていません。

  • HTTPSリスナーと一緒にQUICリスナーを使用する: HTTPSリスナーでQUICリスナーを使用すると、HTTP/1.1やHTTP/2などのさまざまなHTTPプロトコルとの互換性が確保されます。 このモードの動作を次の図に示します。 QUICリスナーとHTTPSリスナーは同じポートでリッスンし、同じ転送ルールを使用します。 ALBインスタンスは、デフォルトでQUICリスナーを使用して、クライアントアクセス要求をバックエンドサーバーに配信します。 クライアントがHTTP/3をサポートしていない場合、HTTPSリスナーを使用してリクエストを転送します。

    image

QUICリスナーの設定

QUICリスナーとHTTPSリスナーを一緒に使用する

前提条件

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

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

    kubectl edit albconfig <ALBCONFIG_NAME> # Replace <ALBCONFIG_NAME> with the name of the 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 # Certificate's CertIdentifier
            IsDefault: true
          quicConfig:
            quicListenerId: "" # Currently empty, will be filled in the next step
            quicUpgradeEnabled: false # Set to false
        - port: 443
          protocol: QUIC # QUIC Listener
          certificates:
          - CertificateId: 756****-cn-hangzhou # Same as HTTPS certificate
            IsDefault: true 
    重要

    上記の例では、AlbConfigを使用して証明書の設定方法を指定します。 自動証明書検出とQUICリスナーにSecretsとして保存された証明書を使用することもできます。 詳細については、「Configure HTTPS certificates for encrypted communication」をご参照ください。

ステップ2: Ingressに注釈を追加する

Ingressにアノテーションを追加して、Ingress構成を複数のリスナーに適用します。

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

    kubectl edit ingress <INGRESS_NAME> # Replace <INGRESS_NAME> with the name of the Ingress
  2. 次のコンテンツをIngressのannotationsフィールドに追加します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: #...
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"QUIC": 443},{"HTTPS": 443}]' # Make Ingress suitable for both QUIC and HTTPS listeners
    spec:
      #...

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

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

  2. インスタンス ページで、管理するALBインスタンスのIDをクリックします。 リスナー タブで、リスナープロトコル /ポートがQUIC:443として指定されているリスナーを見つけ、そのIDを取得します。

  3. QUICリスナーIDをAlbConfigに入力します。

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

      kubectl edit albconfig <ALBCONFIG_NAME> # Replace <ALBCONFIG_NAME> with the name of the 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**** # Specific QUIC listener ID.
              quicUpgradeEnabled: true # Change to true
          - port: 443
            protocol: QUIC # QUIC Listener
            certificates:
            - CertificateId: 756****-cn-hangzhou
              IsDefault: true 
  4. HTTPSリスナーがQUICリスナーに関連付けられているかどうかを確認します。

    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

    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: QUICリスナーからHTTPSリスナーの関連付けを解除する

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

    kubectl edit albconfig <ALBCONFIG_NAME> # Replace <ALBCONFIG_NAME> with the name of the AlbConfig.
  2. quicListenerIdフィールドをクリアし、quicUpgradeEnabledフィールドの値をfalseに変更してから、保存して終了します。

    # The above content is omitted.
        port: 443
        protocol: HTTPS
        quicConfig:
          quicListenerId: "" # Clear the QUIC listener ID.
          quicUpgradeEnabled: false # Change to false
        requestTimeout: 0
    # The following content is omitted.

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

前提条件

手順1: AlbConfigでQUICリスナーを作成

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

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

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    メタデータ:
      name: #...
    spec:
      config:
        #...
      リスナー:
        - port: 443
          プロトコル: QUIC # QUICリスナー
          証明書:
          -CertificateId: 756 ****-cn-hangzhou# 証明書のCertIdentifier
            IsDefault: true 
    重要

    上記の例では、AlbConfigを使用して証明書の設定方法を指定します。 自動証明書検出とQUICリスナーにSecretsとして保存された証明書を使用することもできます。 詳細については、「Configure HTTPS certificates for encrypted communication」をご参照ください。

手順2: 必要なリソースの作成

  1. https-quickstart.yamlという名前のファイルを作成し、次の内容をファイルにコピーして保存します。

    apiVersion: networking.k8s.io/v1
    種類: IngressClass
    メタデータ:
      名前: https-ingressclass
    spec:
      コントローラー: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb# AlbConfigリソースの名前への変更
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: https-ingress
    spec:
      ingressClassName: https-ingressclass
      rules:
      -host: demo.alb.ingress.top# demo.alb.ingress.topを証明書に関連付けられたドメイン名に置き換えます
        http:
          paths:
          - backend:
              service:
                名前: https-svc
                port:
                  number: 443
            path: /
            pathType: プレフィックス
    ---
    apiVersion: apps/v1
    kind: 配置
    メタデータ:
      名前: https-deploy
    spec:
      replicas: 1
      セレクタ:
        matchLabels:
          app: https-deploy
      template:
        metadata:
          labels:
            app: https-deploy
        仕様:
          containers:
            -画像: registry.cn-hangzhou.aliyuncs.com/acs-sample/old-nginx:latest
              imagePullPolicy: IfNotPresent
              名前: https-deploy
              ポート:
                - containerPort: 80
                  プロトコル: TCP
    ---
    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: https-svc
    spec:
      ポート:
        -name: port1
          port: 443
          protocol: TCP
          targetPort: 80
      セレクタ:
        app: https-deploy
      sessionAffinity: None
      タイプ: ClusterIP 
  2. 次のコマンドを実行してリソースを作成します。

    kubectl apply -f https-quickstart.yaml

ステップ3: Ingressに注釈を追加する

Ingressにアノテーションを追加して、Ingress構成を複数のリスナーに適用します。

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

    kubectl edit ingress https-ingress
  2. 次のコンテンツをIngressのannotationsフィールドに追加します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      name: #...
      アノテーション:
        alb.ingress.kubernetes.io/listen-ports: '[{"QUIC": 443}]'# IngressをQUICリスナーに適したものにする
    spec:
      #...

ステップ4: Verify the result

  1. 次のコマンドを実行して、Ingress情報を表示します。

    kubectl get ingress

    期待される出力:

    NAME CLASS HOSTS ADDRESS PORTS AGE
    https-ingressclass 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ホスト: demo.alb.ingress.top -k https:// alb-******** .alb.aliyuncs.com

    次の出力が返されると、QUICリスナーが設定されます。

    古い

関連ドキュメント