モバイルネットワーク、変動する帯域幅の使用量に基づいて低ネットワークレイテンシが必要なネットワーク、ネットワークレイテンシに敏感なアプリケーション (オンラインゲームやライブストリーミングなど) などの複雑なネットワークシナリオでは、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 リスナーを作成する
次のコマンドを実行して、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
重要上記の例では、ALBConfig を使用して証明書を設定しています。QUIC リスナーは、自動証明書または Secret ディスカバリもサポートしています。詳細については、暗号化通信用の HTTPS 証明書を設定するを参照してください。
手順 2: 設定を確認する
次のコマンドを実行して、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
の下の値をコピーして、後で 使用します。次のコマンドを実行して、HTTP/3 と従来の方法で HTTPS サービスにアクセスします。
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.com
次の出力が返された場合、QUIC リスナーは設定されています。
old
QUIC リスナーと HTTPS リスナーの組み合わせを使用する
手順 1: HTTPS リスナーを作成する
次のコマンドを実行して、AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
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 にアノテーションを追加する必要があります。
次のコマンドを実行して、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: リスナーを関連付ける
ALB コンソールにログインします。
インスタンスページで、ALB インスタンスの ID をクリックします。リスナータブで、リスナープロトコル/ポートが QUIC:443 のリスナーを見つけ、その ID を記録します。
ALBConfig で ID を指定します。
次のコマンドを実行して、AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
quicListenerId
を QUIC リスナーの ID に設定し、quicUpgradeEnabled
をtrue
に設定します。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
リスナーの関連付けを確認します。
ALB コンソールにログインします。
インスタンスページで、管理するALBインスタンスのIDをクリックします。インスタンスの詳細ページで、リスナータブをクリックします。リスナーの一覧で、HTTPSリスナーの名前をクリックします。リスナーの詳細ページで、関連付けられているQUICリスナーを表示できます。
手順 4: 設定を確認する
HTTP/3 を使用して、ALB Ingress 経由でサービスにアクセスします。
次のコマンドを実行して、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
の下の値をコピーして、後で使用します。次のコマンドを実行して、HTTP/3 と従来の方法で HTTPS サービスにアクセスします。
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.com curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com
予期される出力が次のとおりである場合、2 つのリスナーは関連付けられており、複数の HTTP プロトコルと互換性があります。
old old
手順 5: (オプション) 関連付けを削除する
次のコマンドを実行して、AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
quicListenerId
を空のままにし、quicUpgradeEnabled
を false に設定します。# 前の内容は省略されています。 port: 443 protocol: HTTPS quicConfig: quicListenerId: "" # パラメーターを空のままにします。 quicUpgradeEnabled: false # false に設定します。 requestTimeout: 0 # 内容は省略されています。
参考文献
Web サービスが侵入に対して脆弱な場合は、WAF 対応 ALB インスタンスを使用できます。詳細については、WAF 対応 ALB インスタンスを使用してアプリケーションを保護するを参照してください。
リスナー設定の詳細については、AlbConfig を使用して ALB リスナーを設定するを参照してください。