Application Load Balancer (ALB) インスタンスで QUIC リスナーを作成すると、互換性のあるクライアントが HTTP/3 経由で Service にアクセスできるようになります。HTTP/3 は、モバイルネットワーク、オンラインゲーム、ライブビデオストリーミングなど、複雑なネットワーク環境、変動する帯域幅、厳しいレイテンシー要件を持つシナリオに適しており、データの再送信と通信のレイテンシーを削減します。
仕組み
QUIC は UDP ベースのトランスポートプロトコルであり、HTTP/3 の基盤です。QUIC は、多重化、0-RTT ハンドシェイク、効率的な輻輳制御アルゴリズム、シームレスなコネクションマイグレーションをサポートしています。TLS と TCP 上で動作する HTTP/2 と比較して、QUIC 上の HTTP/3 はデータの再送信と通信のレイテンシーを大幅に削減します。QUIC の詳細については、公式の QUIC ドキュメントをご参照ください。
QUIC リスナーのみ — QUIC リスナーを作成すると、クライアントが HTTP/3 経由で Service にアクセスできるようになります。
QUIC リスナーと HTTPS リスナーの併用 — 一部のクライアントが HTTP/1.1 または HTTP/2 経由で Service にアクセスする必要がある場合は、QUIC リスナーと HTTPS リスナーを併用して、複数の HTTP プロトコルとの互換性を確保します。
2つのリスナーを併用すると、ALB インスタンスは次の図に示すように動作します。QUIC リスナーと HTTPS リスナーは同じポートでリッスンし、同じ一連の転送ルールを使用します。ALB インスタンスがクライアントリクエストを受信すると、リクエストをバックエンド Service に転送する際に QUIC リスナーを優先します。クライアントが HTTP/3 をサポートしていない場合、ALB インスタンスは HTTPS リスナー経由でリクエストを転送します。
前提条件
AlbConfig リソースが作成されていること。詳細については、「ALB Ingress の開始」をご参照ください。
ALB Ingress を介して公開する Service の Ingress が作成されていること。
リスナーで利用可能な証明書があること。このトピックの例では、AlbConfig で証明書を ID で指定します。QUIC リスナーは、自動検出された証明書と Secret 証明書もサポートしています。詳細については、「HTTPS 経由の暗号化通信のための証明書の設定」をご参照ください。
kubectl がインストールされ、クラスターに接続されていること。
HTTP/3 をサポートする
curlビルドが検証用に利用できること。一部のcurlビルドは、デフォルトでは HTTP/3 をサポートしていません。
スタンドアロン QUIC リスナーの使用
すべてのクライアントが HTTP/3 をサポートしている場合は、スタンドアロン QUIC リスナーを使用します。この設定では、AlbConfig で 1 つの QUIC リスナーを宣言します。一部のクライアントが HTTP/1.1 または HTTP/2 経由で Service にアクセスする場合は、代わりに次のセクションで説明するように、QUIC リスナーと HTTPS リスナーを併用します。
ステップ1:AlbConfig での QUIC リスナーの作成
次のコマンドを実行して AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。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
ステップ2:設定の確認
ALB Ingress を介して HTTP/3 経由で Service にアクセスし、QUIC リスナーが期待どおりに動作することを確認します。
次のコマンドを実行して Ingress を照会します。
kubectl get ingress出力の
HOSTS列とADDRESS列を控えておきます。次のコマンドを実行して、HTTP/3 経由で Service にアクセスします。
demo.alb.ingress.topとalb-********.alb.aliyuncs.comを、前の手順で取得した値に置き換えます。説明一部の
curlビルドは、デフォルトでは HTTP/3 をサポートしていません。HTTP/3 をサポートするcurlビルドを使用してください。curl --http3 -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.comold
QUIC リスナーと HTTPS リスナーの併用
一部のクライアントが HTTP/1.1 または HTTP/2 経由で Service にアクセスする場合は、QUIC リスナーと HTTPS リスナーを併用します。この設定では AlbConfig に両方のリスナーを宣言するため、最初にスタンドアロン QUIC リスナー設定を完了する必要はありません。
ステップ1:AlbConfig での QUIC リスナーと HTTPS リスナーの作成
次のコマンドを実行して AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。同じポートに QUIC リスナーと HTTPS リスナーを作成し、
quicConfigフィールドを HTTPS リスナーに追加します。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: "" # このフィールドは現時点では空のままにします。値はステップ3で指定します。 quicUpgradeEnabled: false # 値をfalseに設定します。
ステップ2:Ingress へのアノテーションの追加
Ingress リソースにアノテーションを追加して、Ingress が複数のリスナーに適用されるようにします。
次のコマンドを実行して Ingress を編集します。
kubectl edit ingress quic-ingress # quic-ingress をIngressの名前に置き換えます。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:リスナーの関連付け
QUIC リスナーを HTTPS リスナーに関連付け、ALB コンソールで関連付けが適用されていることを確認します。
ALB コンソールにログインします。
インスタンス ページで、対象の ALB インスタンスの ID をクリックします。リスナー タブで、[Listener Protocol/Port] が QUIC:443 のリスナーを見つけ、このリスナーの ID を控えておきます。
AlbConfig で QUIC リスナーの ID を指定します。
次のコマンドを実行して AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。QUIC リスナーの ID を
quicListenerIdフィールドに指定し、quicUpgradeEnabledフィールドの値をtrueに変更します。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 certificates: - CertificateId: 756****-cn-hangzhou # 証明書 ID IsDefault: true quicConfig: quicListenerId: lsn-tnz740dr8p5h65**** # 特定のQUIC リスナーのリスナーID。 quicUpgradeEnabled: true # 値をtrueに変更します。
リスナーが関連付けられていることを確認します。
ALB コンソールにログインします。
[Instances] ページで、対象の ALB インスタンスの ID をクリックします。インスタンス詳細ページで、[Listener] タブをクリックします。リスナーリストで、対象の HTTPS リスナーの名前をクリックします。リスナーの詳細 タブで、関連付けられた QUIC リスナーを確認します。
ステップ4:設定の確認
ステップ3では、ALB コンソールでの関連付けを確認しました。このステップでは、クライアントから ALB Ingress を介して Service にアクセスし、ALB インスタンスが HTTP/3 と HTTPS の両方でリクエストを処理することを確認します。
次のコマンドを実行して Ingress を照会します。
kubectl get ingress出力の
HOSTS列とADDRESS列を控えておきます。次のコマンドを実行して、HTTP/3 経由で Service にアクセスします。
demo.alb.ingress.topとalb-********.alb.aliyuncs.comを、前の手順で取得した値に置き換えます。説明一部の
curlビルドは、デフォルトでは HTTP/3 をサポートしていません。HTTP/3 をサポートするcurlビルドを使用してください。curl --http3 -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.comold次のコマンドを実行して、従来の HTTPS 経由で Service にアクセスします。
demo.alb.ingress.topとalb-********.alb.aliyuncs.comを、先ほどと同じ値に置き換えます。curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.comold
(オプション) ステップ5:関連付けの解除
HTTPS リスナーと QUIC リスナーを連携させる必要がなくなった場合は、関連付けを解除します。AlbConfig の他のフィールドは変更されません。
次のコマンドを実行して AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。quicListenerIdフィールドをクリアし、quicUpgradeEnabledフィールドの値をfalseに変更して、変更を保存して終了します。# 前の内容は省略 - port: 443 protocol: HTTPS quicConfig: quicListenerId: "" # QUIC リスナーのリスナーIDをクリアします。 quicUpgradeEnabled: false # 値をfalseに変更します。 # 後の内容は省略
関連ドキュメント
お使いの Service がネットワーク攻撃を受ける可能性がある場合は、Web アプリケーションファイアウォール (WAF) 対応の ALB インスタンスを使用します。詳細については、「WAF 対応 ALB インスタンスを使用したアプリケーションの保護」をご参照ください。
リスナー設定の詳細については、「AlbConfig を使用した ALB リスナーの設定」をご参照ください。