Quality of Service(QoS)は、帯域幅、レイテンシ、パケットロスなどの要因を制御することで、ネットワーク トラフィックを管理し、重要なアプリケーションのパフォーマンスを確保します。このテクノロジーは、ネットワーク リソースが制限されている場合や輻輳している場合に、特定の種類のネットワーク トラフィックを他のトラフィックよりも優先します。DSCP(Differentiated Services Code Point)タグを使用して、最新の IP ネットワーク上のトラフィックに優先順位を付けることができます。
DSCP タグの使用方法については、DSCP タグを構成するをご覧ください。
下り(外向き)DSCP タグの仕組み
Quality of Service(QoS)は、ネットワーク トラフィックを管理して、帯域幅が低い状況でも重要なアプリケーションが動作するようにします。下り(外向き)DSCP タグを使用すると、IP ヘッダーに DSCP 値でパケットにタグを付けて、優先度レベルをダウンストリーム ネットワーク デバイスに伝達できます。
対応しているワークロード
下り(外向き)DSCP タグは、次の Google Distributed Cloud ワークロードのトラフィックの優先順位付けをサポートしています。
- コンテナ ワークロード: クラスタで実行されている Kubernetes Pod とサービス。
- 仮想マシン(VM): デフォルト ネットワークに接続されている VM ランタイムを介して実行される VM ワークロード。
DSCP タグのリソースタイプ
Distributed Cloud は、特定のカスタム リソースを使用して DSCP タグを管理します。これらのオブジェクトを使用して、パケットの優先度を定義します。
EgressDSCP: 選択したトラフィック パケットの IP ヘッダーに挿入する特定の DSCP 値を定義するカスタム リソース。このオブジェクトは、0~63の整数値を受け入れます。TrafficSelector: ネットワーク トラフィック フローを正確に選択するカスタム リソース。このリソースは、0~65535の優先度整数を受け入れます。 デフォルトは1000です。TrafficSelectorオブジェクトはEgressDSCPオブジェクトを参照して、識別されたトラフィックに特定のアクションを適用します。Namespace スコープのTrafficSelectorを使用する場合でも、ターゲット トラフィックを開始する Pod の Namespace を明示的に識別するには、Namespace セレクタを含める必要があります。
競合の解決
複数の TrafficSelector リソースが同じサブジェクトに適用される場合、システムは特定の階層を使用して優先順位を決定します。システムは、次の原則に従って競合を解決します。
- 優先度: システムは、数値的に優先度の値が最も低い
TrafficSelectorを適用します。 - CIDR の範囲の具体性: ルールの優先度が同じ場合、システムは最も具体的な CIDR 制限(最長プレフィックス一致)を持つルールを適用します。
- ポートの具体性: ルールの優先度と CIDR の範囲が同じ場合、システムは最も具体的なポートを持つルールを適用します。
より具体的な CIDR ルールの優先度が数値的に高い場合(優先度が低い場合)、システムはより広範なルールを適用し、より具体的なルールを無視します。
シャドウイングの例
同じ宛先に適用される次の 2 つの TrafficSelector ルールについて考えてみましょう。
- ルール A: 優先度
100、宛先 CIDR192.168.1.0/24、DSCP40をマークします。 - ルール B: 優先度
200、宛先 CIDR192.168.1.15/32、DSCP46をマークします。
ルール B はより正確な宛先 CIDR
(192.168.1.15/32) を指定していますが、優先度の値が数値的に低い(100)ため、システムはルール
A を優先します。その結果、システムはルール B を無視し、
192.168.1.15 に送信されるすべての下り(外向き)トラフィックに DSCP タグ 40 を適用します。
制限事項
DSCP タグ機能には、現在の実装に関するいくつかの制約があります。
- 外部下り(外向き)トラフィック: ワークロードによって開始された下り(外向き)トラフィックや、Kubernetes サービスから外部クライアントへの戻りトラフィックなど、クラスタから送信される north-south トラフィックにのみタグを付けることができます。
- 内部適用なし: システムはクラスタ内トラフィックにタグを付けますが、Kubernetes はこれらのタグに基づいて QoS ポリシーを内部的に適用しません。
- マーキングのみ: システムは IP ヘッダーにのみタグを付けます。実際の QoS の適用を処理するように、アップストリームの物理ネットワーク インフラストラクチャを構成する必要があります。
- サポートされているプロトコル: IPv4 トラフィックにのみタグを付けることができます。
- サポートされているサービス:
LoadBalancerサービスとNodePortサービスのトラフィックにのみタグを付けることができます。 - 仮想マシン ネットワーク: デフォルト ネットワークに接続されている VM ワークロードにのみタグを付けることができます。
- 機能の有効化: クラスタ リソースに
preview.baremetal.cluster.gke.io/traffic-selector: "enable"アノテーションを追加して、機能を有効にする必要があります。 - 戻りパスのデフォルト: 戻りパス トラフィックの場合、明示的に構成しない限り、DSCP 値はデフォルトで
0になります。
セキュリティ上の考慮事項
不正なユーザーが重要でないトラフィックに高い DSCP 値でマークを付けると、クラスタ全体の重要なサービスが中断する可能性があります。
セキュリティ リスクを軽減するには、Kubernetes のロールベース アクセス制御(RBAC)を使用してアクセスを制限します。
- クラスタ全体の制御: クラスタ スコープの
EgressDSCPリソースを作成または変更する権限を、信頼できるクラスタ管理者に制限します。 - Namespace 制御: Namespace ごとに
TrafficSelectorリソースを管理することで、ユーザーは特定のワークロードにのみ影響を与えられるようにします。