圧縮を実行する際、さまざまなプログラミング言語やフレームワークで異なる圧縮構成が使用されます。一貫した圧縮構成を使用する圧縮フィルターをアプリケーションに追加することで、圧縮構成の保守と管理を向上させることができます。圧縮構成には、最小圧縮バイト数、圧縮レベル、およびデフォルトで圧縮される応答が含まれます。このトピックでは、ASMCompressor を使用してアプリケーションサービス間の呼び出しの圧縮構成を定義する方法について説明します。
前提条件
バージョンが 1.21 以降の ASM インスタンスに Container Service for Kubernetes (ACK) クラスターが追加されていること。詳細については、「ASM インスタンスにクラスターを追加する」および「ASM インスタンスの更新」をご参照ください。
Bookinfo アプリケーションが ASM インスタンスにデプロイされていること。詳細については、「ASM インスタンスに追加された ACK クラスターにアプリケーションをデプロイする」をご参照ください。
Istio リソースを使用して、サービスの異なるバージョンにトラフィックをルーティングしていること。詳細については、「Istio リソースを使用してサービスの異なるバージョンにトラフィックをルーティングする」をご参照ください。
機能の説明
ウェイポイントプロキシは Gzip と Brotli の両方のアルゴリズムをサポートしています。
Gzip は、多くの Web サーバーやブラウザでサポートされている広く使用されている圧縮アルゴリズムです。Gzip 圧縮アルゴリズムは、高い圧縮率と高速な圧縮速度で知られています。静的コンテンツと動的コンテンツの圧縮によく使用されます。
Brotli は、より高い圧縮率とより高速な展開速度を提供できる高度な圧縮アルゴリズムであり、Web サービスで広く使用されています。Brotli 圧縮アルゴリズムは、通常、HTML、カスケードスタイルシート (CSS)、JavaScript ファイルなどの静的コンテンツを圧縮するために使用されます。
Gzip と比較して、Brotli はより高い圧縮率を提供しますが、圧縮速度に影響を与える可能性があります。実際のアプリケーションシナリオとパフォーマンス要件に基づいて圧縮アルゴリズムを選択できます。
Gzip 圧縮の有効化と検証
ステップ 1: 圧縮が有効になっていない場合に返される応答のサイズを記録する
イングレスゲートウェイの IP アドレスを取得します。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[イングレスゲートウェイ] ページで、[サービスアドレス] の値を取得します。
ブラウザのアドレスバーに
http://{ASM ゲートウェイアドレス}/productpageを入力して、Bookinfo アプリケーションにアクセスします。ブラウザで開発者モードをオンにし、productpage リクエストに対して返された応答のサイズを確認します。
次の図に示すように、返された応答のサイズは 5.5 KB です。

ステップ 2: Gzip 圧縮を有効にする
次の内容で ingressgateway-gzip.yaml ファイルを作成します。
フィールドの詳細については、「ASMCompressor フィールドの説明」をご参照ください。
次のコマンドを実行して Gzip 圧縮を有効にします:
kubectl apply -f ingressgateway-gzip.yaml
ステップ 3: Gzip 圧縮が有効になった後の結果を表示する
ブラウザのアドレスバーに
http://{ASM ゲートウェイアドレス}/productpageを入力して、Bookinfo アプリケーションにアクセスします。ブラウザの開発者モードをオンにし、productpage リクエストに対して返された応答のサイズを確認します。
次の図に示すように、返された応答のサイズが 5.5 KB から 1.8 KB に変更され、Gzip 圧縮構成が有効になったことを示しています。

ステップ 4: Brotli 圧縮を検証する
bookinfo という名前の仮想サービスを変更します。
`bookinfo.yaml` ファイルの
spec.httpセクションに次の内容を追加します:- directResponse: body: string: >- Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! status: 200 match: - uri: prefix: /helloworld変更後の YAML ファイルの内容を次のコードに示します:
次のコマンドを実行して仮想サービスをデプロイします:
kubectl apply -f bookinfo.yaml
Brotli 圧縮を有効にします。
次の内容を使用して ingressgateway-brotli.yaml ファイルを作成します。
フィールドの詳細については、「ASMCompressor フィールドの説明」をご参照ください。
次のコマンドを実行して Brotli 圧縮を有効にします:
kubectl apply -f ingressgateway-brotli.yaml
Brotli 圧縮が有効になっているかどうかを確認します。
次のコマンドを実行して、
/helloworldパスの応答を `out.br` ファイルに保存します:curl -I -H "Accept-Encoding: br" http://{IP address of the ASM gateway}/helloworld > out.brBrotli をインストールします。
macOS では、
brew install brotliコマンドを実行して Brotli をインストールします。Windows: インストール手順の詳細については、「brotli」をご参照ください。
Brotli で次のコマンドを実行して out.br ファイルを展開します:
brotli -d out.br展開されたファイルとその内容が表示され、Brotli 圧縮構成が有効になったことを示します。
ステップ 5: ルートレベルで構成を検証する
ステップ 4 の設定を完了すると、すべてのパスからの応答に対して圧縮が有効になります。次のコマンドを使用して構成をテストします:
curl ${IP address of the ASM gateway}/helloworld > helloworld_no_compress.html curl -H "Accept-Encoding: br" ${IP address of the ASM gateway}/helloworld > helloworld_compress.html curl ${IP address of the ASM gateway}/productpage > productpage_no_compress.html curl -H "Accept-Encoding: br" ${IP address of the ASM gateway}/productpage > productpage_compress.htmllsコマンドを実行して、2 つのパスの応答サイズを比較します:ls -lh total 40 -rw-r--r--@ 1 user staff 37B 5 28 18:16 helloworld_compress.html -rw-r--r--@ 1 user staff 324B 5 28 18:15 helloworld_no_compress.html -rw-r--r--@ 1 user staff 1.2K 5 28 18:17 productpage_compress.html -rw-r--r--@ 1 user staff 5.2K 5 28 18:16 productpage_no_compress.html仮想サービスを変更して、`helloworld` パスに対応するルートにルート名を追加します。変更後の `bookinfo.yaml` ファイルは次のとおりです:
ASMCompressor にルートレベルの構成を追加し、helloworld ルートで圧縮機能を無効にします。変更された ASMCompressor の内容を次のコードに示します:
apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMCompressor metadata: name: ingressgateway-gzip namespace: istio-system spec: compressor_library: brotli: quality: 5 window_bits: 15 isGateway: true portNumber: 80 request_direction_config: # リクエスト圧縮を無効にします。 common_config: enabled: default_value: false runtime_key: NOT_EXISTENT_KEY response_direction_config: common_config: content_type: - application/json - text/plain - text/html min_content_length: 100 disable_on_etag_header: true per_route_configs: # 新しいルートレベルの構成 - disabled: true route_match: vhost: route: name: helloworld-route # VirtualService で構成されたルート名を入力します。 workloadSelector: labels: istio: ingressgateway次のコマンドを実行して、
/helloworldパスの応答圧縮が無効になっていることを確認します:curl -H "Accept-Encoding: br" ${IP address of the ASM gateway}/helloworld > helloworld_route_disabled.htmllsコマンドを再度実行して、`/helloworld` パスの応答サイズを確認します。ls -lh total 48 -rw-r--r--@ 1 user staff 37B 5 28 18:16 helloworld_compress.html -rw-r--r--@ 1 user staff 324B 5 28 18:15 helloworld_no_compress.html -rw-r--r--@ 1 user staff 324B 5 28 19:29 helloworld_route_disabled.html -rw-r--r--@ 1 user staff 1.3K 5 28 19:30 productpage_compress.html -rw-r--r--@ 1 user staff 5.2K 5 28 18:16 productpage_no_compress.html出力は、ルートレベルで圧縮が無効になっていることを示しています。