サービスメッシュ (ASM) は、kind が IstioGateway で、apiVersion が istio.alibabacloud.com/v1beta1 である CustomResourceDefinition (CRD) API リソースを提供します。さらに、ASM はリソースを管理するためのコントローラーを提供します。コントローラーは CRD の変更を監視し、コントローラーが実行されている Kubernetes クラスターのサービス、デプロイメント、およびサービスアカウントを更新します。このトピックでは、ASM ゲートウェイの設定例と CRD フィールドについて説明します。
設定例
前提条件
コンテナサービス Kubernetes 版 (ACK) クラスターが ASM インスタンスに追加されています。詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。
ASM ゲートウェイは istio-system 名前空間にデプロイする必要があります。こうすることで、ASM ゲートウェイを起動するときに、ASM ゲートウェイの設定を取得して起動を成功させることができます。インスタンスの Istio バージョンが 1.6 以降で、ASM ゲートウェイを別の名前空間にデプロイすると、ゲートウェイ設定の取得に失敗するため、ASM ゲートウェイを起動できません。
例 1:Kubernetes API を使用してイングレスゲートウェイを作成および管理する
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、[YAML から作成] をクリックします。
[作成] ページで、[名前] フィールドにイングレスゲートウェイの名前を入力し、[名前空間] ドロップダウンリストから [istio-system] を選択し、YAML ファイルで次のフィールドを設定して、[作成] をクリックします。
CRD フィールドの詳細については、「CRD フィールド」をご参照ください。
説明Kubernetes 用の Go Client を使用してイングレスゲートウェイを管理する必要がある場合は、「ASM ゲートウェイの Go 構造体」をご参照ください。
次の手順を実行して、イングレスゲートウェイのサービス情報を表示します。
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、 を選択します。
[サービス] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。
サービスのリストで、目的のイングレスゲートウェイのサービスの名前をクリックして、その情報を表示します。
イングレスゲートウェイの Pod 情報を表示します。
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、 を選択します。
[pod] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。
Pod のリストで、イングレスゲートウェイの Pod を見つけて Pod 名をクリックして、Pod 情報を表示します。
例 2:Kubernetes API を使用してエグレスゲートウェイを作成および管理する
ASM は、メッシュ内のすべてのアウトバウンドトラフィックをルーティングするためのエグレスゲートウェイサービスを提供します。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[エグレスゲートウェイ] ページで、[YAML から作成] をクリックします。
[作成] ページで、[名前] フィールドにエグレスゲートウェイの名前を入力し、[名前空間] ドロップダウンリストから [istio-system] を選択し、YAML ファイルで次のフィールドを設定して、[作成] をクリックします。
CRD フィールドの詳細については、「CRD フィールド」をご参照ください。
次の手順を実行して、エグレスゲートウェイのサービス情報を表示します。
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、 を選択します。
[サービス] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。
サービスのリストで、目的のエグレスゲートウェイのサービスの名前をクリックして、その情報を表示します。
エグレスゲートウェイの Pod 情報を表示します。
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のペインで、 を選択します。
[pod] ページの上部で、[名前空間] ドロップダウンリストから [istio-system] を選択します。
Pod のリストで、エグレスゲートウェイの Pod を見つけて Pod 名をクリックして、Pod 情報を表示します。
CRD フィールド
フィールド | 説明 | デフォルト値 |
metadata.name | ASM ゲートウェイの名前。生成される Kubernetes サービスとデプロイメントはどちらも istio-{metadata.name フィールドの値} という名前になります。 | なし |
metadata.namespace | ASM ゲートウェイがデプロイされる名前空間。生成される Kubernetes サービスとデプロイメントはこの名前空間に存在します。 重要 生成される Kubernetes サービスとデプロイメントが Istio 1.6 以降で使用できるようにするには、名前空間を istio-system にする必要があります。 | istio-system |
clusterIds | ASM ゲートウェイをデプロイするクラスターの ID。値は配列です。クラスターは現在の ASM インスタンスで管理されている必要があります。 | なし |
env | ASM ゲートウェイ Pod の環境変数。値は配列です。 | なし |
externalTrafficPolicy | ゲートウェイがインバウンドトラフィックをノードローカルエンドポイントまたはクラスターワイドエンドポイントのどちらにルーティングするかを指定します。有効な値:Cluster または Local。 説明 このフィールドは、イングレスゲートウェイでのみ使用できます。 | Cluster |
ports | ASM ゲートウェイ Pod に定義されているポートとプロトコル。値は配列です。次に例を示します。
説明 1.9.7.107 より前のバージョンでは、protocol フィールドを TCP に設定する必要があります。 | なし |
gatewayType | ASM ゲートウェイのタイプ。有効な値:ingress および egress。
| ingress |
replicaCount | Pod レプリカの数。 | 1 |
configVolumes | ASM ゲートウェイ Pod にマウントされる ConfigMap ボリュームに関する情報。次に例を示します。 | なし |
resources | ASM ゲートウェイ Pod のリソース設定。 |
|
secretVolumes | ASM ゲートウェイ Pod にマウントされるシークレットボリュームに関する情報。次に例を示します。 | なし |
serviceType | ASM ゲートウェイのサービスタイプ。有効な値:LoadBalancer、NodePort、および ClusterIP。エグレスゲートウェイの場合、このフィールドの値は通常 ClusterIP に設定されます。 重要 データプレーンで登録済みクラスターを使用し、このフィールドが LoadBalancer に設定されている場合は、クラスターが LoadBalancer サービスをサポートしていることを確認してください。そうでない場合、ASM ゲートウェイの作成に失敗する可能性があります。 | LoadBalancer |
loadBalancerClass | ASM ゲートウェイの loadBalancerClass。このフィールドは、serviceType パラメーターが LoadBalancer に設定されている場合にのみ有効です。このフィールドは、v1.18 以降の ASM インスタンスでサポートされています。詳細については、「NLB インスタンスをイングレスゲートウェイに関連付ける」をご参照ください。 | なし |
serviceAnnotations | ASM ゲートウェイのアノテーション。例: 説明 このフィールドは、serviceType が LoadBalancer であるゲートウェイでのみ使用できます。エグレスゲートウェイの場合、このフィールドは通常設定されません。 | なし |
serviceLabels | ASM ゲートウェイのラベル。 | なし |
podLabels | ASM ゲートウェイ Pod のラベル。 | なし |
podAnnotations | ASM ゲートウェイ Pod のアノテーション。 | なし |
rollingMaxSurge | ローリングアップデート中に、想定されるレプリカ数を超えてスケジュールされる Pod の最大数。値は絶対値またはパーセンテージです。 | "100%" |
rollingMaxUnavailable | ローリングアップデート中に使用できない Pod の最大数。値は絶対値またはパーセンテージです。 | "25%" |
overrides | 特定のクラスターに個別の設定を行います。clusterIds フィールドで 2 つ以上のクラスターが指定されている場合、このフィールドを使用できます。前のクラスター設定とは異なる設定で特定のクラスターを設定する場合に、このフィールドを使用できます。値は、キーと値のペアを含む MAP タイプです。 説明
| なし |
kernel.enabled | カスタムカーネルフィールドを有効にするかどうかを指定します。 | false |
kernel.parameters | カーネルフィールド。次のカーネルフィールドがサポートされています。
説明 ASM でサポートされている特定のカーネルフィールドは、ホストのカーネルバージョンが原因で無効になる場合があります。この状況が発生した場合、ASM ゲートウェイ Pod はエラーを報告する可能性があります。
すべてのカーネルフィールドの値は文字列形式である必要があります。YAML は数値を数値として認識します。したがって、各値を二重引用符 (") で囲む必要があります。例:net.core.somaxconn:"65535"。 | なし |
compression.enabled | イングレスゲートウェイの圧縮機能を有効にするかどうかを指定します。 説明 compression 関連のフィールドは、イングレスゲートウェイでのみ使用できます。 | false |
compression.content_type | Content-Type ヘッダーで示される、圧縮されるデータのタイプ。次に例を示します。
| なし |
compression.disable_on_etag_header |
| false |
compression.min_content_length | 圧縮がトリガーされるしきい値。フィールド値は、Content-Length ヘッダーのサイズを示します。 | 30 |
compression.remove_accept_encoding_header |
| false |
compression.gzip | 圧縮形式。GZIP 形式のみがサポートされています。圧縮機能を有効にする場合は、このフィールドが必要です。他のすべてのフィールドにデフォルト値を使用する場合は、このフィールドを空のままにする必要があります。例: | なし |
compression.gzip.memory_level | zlib ライブラリのメモリ使用量レベル。有効な値:1 ~ 9。このフィールドの値が大きいほど、メモリ使用量は増加しますが、圧縮速度と圧縮品質は向上します。 | 5 |
compression.gzip.compression_level | zlib ライブラリで使用される圧縮レベル。有効な値:
説明 BEST_COMPRESSION は最高の圧縮品質を示します。BEST_SPEED は最高の圧縮速度を示します。次のリストでは、いくつかの圧縮レベルについて説明します。
| DEFAULT_COMPRESSION |
compression.gzip.compression_strategy | zlib ライブラリで使用される圧縮ポリシー。有効な値:
説明 DEFAULT_STRATEGY この圧縮ポリシーは、基になるデフォルトの動作を使用するデフォルトの圧縮ポリシーであり、ほとんどの場合に満足のいく圧縮結果を生成できます。 FILTERED この圧縮ポリシーは、重複データが存在するほとんどのシナリオに適用可能なフィルタリング圧縮アルゴリズムを優先的に使用します。この圧縮ポリシーは、テキストデータと人工的に生成されたデータの圧縮率を向上させるのに役立ちます。 HUFFMAN_ONLY この圧縮ポリシーは、圧縮にハフマン符号化のみを使用します。他のアルゴリズムは使用されません。この圧縮ポリシーは、一般的に静的データを圧縮するために使用されます。このような圧縮データはより迅速に解凍できます。 RLE ランレングスエンコーディング (RLE) アルゴリズムは、ビットマップデータなどの反復データシーケンスの圧縮に非常に効果的です。 FIXED この圧縮ポリシーは、特定のデータに基づいて動的に生成される符号木ではなく、事前定義された符号木を使用してハフマン符号化を実行します。これにより、高速な圧縮と解凍を実現できます。ただし、圧縮率は低くなります。 | DEFAULT_STRATEGY |
compression.gzip.window_bits | zlib ライブラリのウィンドウサイズ。有効な値:9 ~ 15。 | 12 |
compression.gzip.chunk_size | zlib ライブラリの出力バッファーサイズ。 | 4096 |
hostNetwork | ASM ゲートウェイ Pod がホストのネットワーク名前空間にアクセスすることを許可するかどうかを指定します。有効な値:
| false |
dnsPolicy | ASM ゲートウェイ Pod に設定されているドメインネームシステム (DNS) ポリシー。DNS ポリシーの詳細については、「サービスと Pod の DNS」をご参照ください。 | ClusterFirst |
cpu.targetAverageUtilization | HPA が有効になっている場合の予想 CPU 使用率。有効な値:1 ~ 100。メモリ使用率がこの値を超えると、Pod レプリカの数が増加します。メモリ使用率がこの値未満の場合、Pod レプリカの数は減少します。 | なし |
memory.targetAverageUtilization | HPA が有効になっている場合の予想メモリ使用率。有効な値:1 ~ 100。メモリ使用率がこの値を超えると、Pod レプリカの数が増加します。メモリ使用率がこの値未満の場合、Pod レプリカの数は減少します。 | なし |
maxReplicas | ASM ゲートウェイの HPA 機能によってスケーリングできる Pod レプリカの最大数。このフィールドの値は正の整数である必要があります。 | なし |
minReplicas | ASM ゲートウェイの HPA 機能によってスケーリングできる Pod レプリカの最小数。値は正の整数です。最小値は 1 です。 | なし |
nodeSelector | ASM ゲートウェイ Pod が存在するノードのラベルを指定します。キーと値をカスタマイズできます。次に例を示します。 | なし |
affinity | ノードアフィニティを設定して、ASM ゲートウェイ Pod をノードにスケジュールできます。詳細については、「アフィニティとアンチアフィニティ」をご参照ください。 | なし |
tolerations | ASM ゲートウェイ Pod の toleration を設定して、ノードの taint を許容できます。詳細については、「taint と toleration」をご参照ください。 | なし |
変更すると ASM ゲートウェイのローリング再起動が発生するフィールド
次のフィールドを変更すると、ASM ゲートウェイのローリング再起動が発生します。これらのフィールドを変更する場合は注意してください。
env
ports (ASM インスタンスのバージョンが 1.16 より前の場合、このフィールドを変更すると ASM ゲートウェイがローリング方式で再起動します。ASM インスタンスのバージョンが 1.16 以降の場合、このフィールドを変更しても ASM ゲートウェイはローリング方式で再起動しません。)
configVolumes
resources
secretVolumes
podLabels
podAnnotations
kernel.enabled
kernel.parameters
hostNetwork
dnsPolicy
nodeSelector (スケジューリングの影響を受ける)
affinity (スケジューリングの影響を受ける)
tolerations (スケジューリングの影響を受ける)