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リスナーを使用してリクエストを転送します。
QUICリスナーの設定
QUICリスナーとHTTPSリスナーを一緒に使用する
前提条件
SSL証明書が設定されています。 詳細については、「Configure HTTPS certificates for encrypted communication」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「kubectl を利用した Kubernetes クラスターへの接続」をご参照ください。
ステップ1: AlbConfigでQUICリスナーを作成する
次のコマンドを実行して、AlbConfigを変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # Replace <ALBCONFIG_NAME> with the name of the AlbConfig.
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構成を複数のリスナーに適用します。
次のコマンドを実行して、Ingressを変更します。
kubectl edit ingress <INGRESS_NAME> # Replace <INGRESS_NAME> with the name of the Ingress
次のコンテンツを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: リスナーの関連付け
にログインします。ALBコンソール.
インスタンス ページで、管理するALBインスタンスのIDをクリックします。 リスナー タブで、リスナープロトコル /ポートがQUIC:443として指定されているリスナーを見つけ、そのIDを取得します。
QUICリスナーIDをAlbConfigに入力します。
次のコマンドを実行して、AlbConfigを変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # Replace <ALBCONFIG_NAME> with the name of the AlbConfig.
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
HTTPSリスナーがQUICリスナーに関連付けられているかどうかを確認します。
にログインします。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を使用しません。 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リスナーの関連付けを解除する
次のコマンドを実行して、AlbConfigを変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # Replace <ALBCONFIG_NAME> with the name of the AlbConfig.
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リスナーのみを使用する
前提条件
AlbConfigが作成されます。 詳細については、「ALB Ingressの作成」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「kubectl を利用した Kubernetes クラスターへの接続」をご参照ください。
手順1: AlbConfigでQUICリスナーを作成
次のコマンドを実行して、AlbConfigを変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> をAlbConfigの名前に置き換えます。
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: 必要なリソースの作成
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
次のコマンドを実行してリソースを作成します。
kubectl apply -f https-quickstart.yaml
ステップ3: Ingressに注釈を追加する
Ingressにアノテーションを追加して、Ingress構成を複数のリスナーに適用します。
次のコマンドを実行して、Ingressを変更します。
kubectl edit ingress https-ingress
次のコンテンツを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
次のコマンドを実行して、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
の下の値をコピーして、後で使用します。次のコマンドを実行して、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リスナーが設定されます。
古い
関連ドキュメント
webサービスが侵入に対して脆弱であるか、より高いセキュリティが必要な場合は、WAF対応のALBインスタンスを使用できます。 詳細については、「Use WAF-enabled ALB instances to protect applications」をご参照ください。
リスナー設定の詳細については、「Use AlbConfigs to configure ALB listeners」をご参照ください。