IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ヴィーエムウェア, インコーポレイテッドの特許一覧

特許7417816ゲストVMモビリティを使用したサービスの提供
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-11
(45)【発行日】2024-01-19
(54)【発明の名称】ゲストVMモビリティを使用したサービスの提供
(51)【国際特許分類】
   H04L 49/60 20220101AFI20240112BHJP
   G06F 9/455 20180101ALI20240112BHJP
   H04L 41/0895 20220101ALI20240112BHJP
【FI】
H04L49/60
G06F9/455 150
H04L41/0895
【請求項の数】 12
(21)【出願番号】P 2021546813
(86)(22)【出願日】2020-02-03
(65)【公表番号】
(43)【公表日】2022-04-05
(86)【国際出願番号】 US2020016457
(87)【国際公開番号】W WO2020171937
(87)【国際公開日】2020-08-27
【審査請求日】2021-10-06
(31)【優先権主張番号】16/444,884
(32)【優先日】2019-06-18
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/444,956
(32)【優先日】2019-06-18
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/809,464
(32)【優先日】2019-02-22
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】201941007860
(32)【優先日】2019-02-28
(33)【優先権主張国・地域又は機関】IN
(31)【優先権主張番号】16/444,826
(32)【優先日】2019-06-18
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/444,927
(32)【優先日】2019-06-18
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/445,004
(32)【優先日】2019-06-18
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】514097912
【氏名又は名称】ヴィーエムウェア エルエルシー
【氏名又は名称原語表記】VMware LLC
【住所又は居所原語表記】3401 Hillview Ave., Palo Alto, CA 94303, U.S.A
(74)【代理人】
【識別番号】100087642
【弁理士】
【氏名又は名称】古谷 聡
(74)【代理人】
【識別番号】100082946
【弁理士】
【氏名又は名称】大西 昭広
(74)【代理人】
【識別番号】100195693
【弁理士】
【氏名又は名称】細井 玲
(74)【代理人】
【識別番号】100203242
【弁理士】
【氏名又は名称】河戸 春樹
(74)【代理人】
【識別番号】100212657
【弁理士】
【氏名又は名称】塚原 一久
(72)【発明者】
【氏名】ミシュラ, ラウル
(72)【発明者】
【氏名】レクイア, キャミール
(72)【発明者】
【氏名】ゴカーレ, サーリ
(72)【発明者】
【氏名】ナイアー, ラジーブ
(72)【発明者】
【氏名】チャルバディ, アヌプレム
(72)【発明者】
【氏名】ピン, ヤン
(72)【発明者】
【氏名】ムンダラギ, カンテシュ
(72)【発明者】
【氏名】ローランド, ピエールンギ
(72)【発明者】
【氏名】ジャイン, ジェヤント
(72)【発明者】
【氏名】コガンティ, ラジュ
【審査官】鈴木 香苗
(56)【参考文献】
【文献】米国特許出願公開第2019/0116063(US,A1)
【文献】米国特許出願公開第2015/0281180(US,A1)
【文献】米国特許出願公開第2015/0379277(US,A1)
【文献】米国特許出願公開第2016/0094451(US,A1)
【文献】米国特許出願公開第2017/0005923(US,A1)
【文献】特表2015-519822(JP,A)
【文献】中国特許出願公開第110521169(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 49/60
G06F 9/455
H04L 41/0895
(57)【特許請求の範囲】
【請求項1】
ホストコンピュータ上で動作するマシンに関連するデータメッセージのためのサービスを実行する方法であって、前記方法は、
前記ホストコンピュータにおいて、
マシンによって指定されたネットワークアドレスに基づいて、前記マシンによって送信されたデータメッセージを転送する第1の分散転送要素(DFE)を構成することと、
前記マシンによって指定された前記ネットワークアドレスに基づいて前記データメッセージが前記第1のDFEによって転送される前に、前記マシンによって送信されたデータメッセージを1つ以上のサービスノードのセットに転送する第2のDFEを構成することとを含み、
各DFEは、前記ホストコンピュータ上で動作する少なくとも1つのソフトウェア転送要素(SFE)と、少なくとも1つの他のホストコンピュータ上で動作する少なくとも1つの他のSFEによって実施される、方法。
【請求項2】
請求項1に記載の方法であって、前記第1のDFEおよび前記第2のDFEは、論理スイッチ、論理ルータ、および、論理ネットワークまたはその部分を形成する論理スイッチおよび/または論理ルータの任意の組み合わせのうちの同一タイプの転送要素である、方法。
【請求項3】
請求項2に記載の方法であって、各DFEは分散ソフトウェアスイッチであり、各SFEはソフトウェアスイッチである、方法。
【請求項4】
請求項1に記載の方法であって、前記ホストコンピュータ上の1つのSFEは、前記ホストコンピュータの外部で動作するソフトウェア転送要素の第1のセットおよび第2のセットと協働して前記第1のDFEおよび前記第2のDFEの両方を実施するように構成される、方法。
【請求項5】
請求項1に記載の方法であって、前記ホストコンピュータ上の第1のSFEおよび第2のSFEは、前記ホストコンピュータの外部で動作するソフトウェア転送要素の第1のセットおよび第2のセットと協働して前記第1のDFEおよび前記第2のDFEをそれぞれ実施するように構成される、方法。
【請求項6】
請求項1に記載の方法であって、前記第2のDFEは、前記マシンによって指定されたネットワークアドレスに基づいてデータメッセージが転送される前にサービスノードに前記データメッセージを転送するためのサービス転送プレーンを定義する一方で、前記第1のDFEは、前記マシンによって指定されたネットワークアドレスに基づいて前記データメッセージを転送するためのゲスト転送プレーンを定義する、方法。
【請求項7】
請求項6に記載の方法であって、
前記方法は、送信元として機能するゲストマシンと、データメッセージフローの宛先マシンと、サービスノードの少なくともサブセットとして機能するサービスマシンを有するデータセンタにおいて実施され、
前記第1のDFEは、前記ゲスト転送プレーンに接続されるゲストマシンからデータメッセージを受信し、且つ、該ゲストマシンにデータメッセージを供給するポートを含み、
前記第2のDFEは、前記サービス転送プレーンに接続されるサービスマシンにデータメッセージを供給し、且つ、該サービスマシンからデータメッセージを受信するポートを含み、
前記サービスマシンは、前記第1のDFE上の前記サービスマシンのためのポートを定義しないことにより前記ゲスト転送プレーンから分離され、前記ゲストマシンは、前記第2のDFE上の各ゲストマシンのためのポートを定義しないことにより前記サービス転送プレーンから分離され、
前記分離は、前記サービスマシンが前記ゲストマシンにデータメッセージを直接転送することができないことと、前記ゲストマシンが前記サービスマシンにデータメッセージを直接転送することができないこととを保証することにより、前記ゲストマシンと前記サービスマシンのセキュリティを向上させる、方法。
【請求項8】
請求項6に記載の方法であって、
前記第1のDFEは、前記マシンからデータメッセージを受信するためのポートを有し、
前記第2のDFEは、前記マシンからデータメッセージを受信するためのポートを有していないが、前記マシンによって送信されたデータメッセージを受信して前記データメッセージを特定のポートに転送するための、前記ホストコンピュータ上で動作する特定のポートプロキシから、データメッセージを受信するための前記特定のポートを有する、方法。
【請求項9】
請求項8に記載の方法であって、前記ポートプロキシは、前記ホストコンピュータ上で動作する複数のマシンと前記第2のDFEとの間のインターフェースとして機能する、方法。
【請求項10】
請求項1に記載の方法であって、前記第2のDFEは、前記ホストコンピュータ上で動作して前記マシンによって送信された前記データメッセージに対してサービス動作を実行する各サービスノードのためのサービスプロキシと、前記サービスプロキシの関連サービスノードに提供される前記データメッセージを定式化するサービスプロキシとを含む、方法。
【請求項11】
少なくとも1つの処理ユニットによって実施されると、請求項1から10のいずれか1項に記載の方法を実施するコンピュータプログラム。
【請求項12】
コンピューティングデバイスであって、
処理ユニットのセットと、
少なくとも1つの前記処理ユニットによって実施されると、請求項1から10のいずれか1項に記載の方法を実施するプログラムを格納する機械可読媒体と、を含む処理デバイス。
【発明の詳細な説明】
【背景技術】
【0001】
[0001] 現在のデータセンタでは、静的で構成集約的な方法を使用して、異なるアプリケーションレイヤ間および異なるサービスレイヤにデータメッセージを分配している。今日の一般的なアプローチは、仮想マシンが仮想IP(VIP)アドレスにパケットを送信するように構成し、次に、VIPアドレスで指定されたパケットを適切なアプリケーションまたはサービスレイヤー(あるいはその両方)に転送するように指示する転送ルールを使用して、データセンタ内の転送要素とロードバランサを構成することである。既存のメッセージ分配スキームの別の問題は、今日のロードバランサが分配されるトラフィックのための難所であることである。したがって、データセンタ内のデータメッセージを異なるアプリケーションレイヤおよび/またはサービスレイヤ間でシームレスに分配する新しいアプローチが当技術分野において必要とされている。理想的には、この新しいアプローチは、データメッセージを送信するサーバを再設定することなく、分配スキームを容易に修正することを可能にするであろう。
【発明の概要】
【0002】
[0002] いくつかの実施形態は、1つ以上のデータセンタで動作するマシンのためのサービスを実行するための新しい方法を提供する。例えば、関連するゲストマシンのグループ(例えば、テナントマシンのグループ)に対して、いくつかの実施形態は、(1)ゲスト転送プレーンと(2)サービス転送プレーンの2つの異なる転送プレーンを定義する。ゲスト転送プレーンは、グループ内のマシンに接続し、これらのマシンに対してL2および/またはL3転送を実行する。サービス転送プレーンは、(1)これらのマシンとの間で送受信されるデータメッセージに対してサービスを実行するサービスノードに接続し、(2)これらのデータメッセージをサービスノードに転送する。
【0003】
[0003] いくつかの実施形態では、ゲストマシンは、サービス転送プレーンと直接接続しない。例えば、いくつかの実施形態では、各転送プレーンは、マシンまたはサービスノードからデータメッセージを受信するか、またはマシンまたはサービスノードにデータメッセージを供給するポートを介して、マシンまたはサービスノードに接続する。このような実施形態では、サービス転送プレーンは、任意のゲストマシンからデータメッセージを直接受信したり、任意のゲストマシンにデータメッセージを供給したりするポートを持たない。代わりに、いくつかのそのような実施形態では、ゲストマシンに関連するデータは、同じホストコンピュータ上で実行されるポートプロキシモジュールにルーティングされ、このポートプロキシモジュールは、サービスプレーンポートを有する。いくつかの実施形態におけるこのポートプロキシモジュールは、同一ホスト上の複数のゲストマシンをサービスプレーンに間接的に接続することができる(すなわち、同一ホスト上の複数のゲストマシンのポートプロキシモジュールとして機能することができる)。
【0004】
[0004] いくつかの実施形態では、ゲストマシンは、サービスマシンまたはノードではない任意のマシンである。ゲストマシンは、マルチテナントデータセンタ内のテナントのマシンにすることはできるが、必ずしもする必要はない。いくつかの実施形態におけるゲストマシンは、ゲスト仮想マシンまたはゲストコンテナである。いくつかの実施形態におけるサービスノードは、サービス仮想マシン、サービスコンテナ、またはサービスアプライアンスである。いくつかの実施形態では、サービスノードは、ファイアウォール、侵入検知システム、侵入防御システム、ロードバランサ、暗号化器、メッセージモニタ、メッセージコレクタ、または任意の数の他のミドルボックスサービスなどのミドルボックスサービス動作を実行する。したがって、本書で使用されるサービスは、いくつかの実施形態における任意のタイプのミドルボックスサービス動作である。
【0005】
[0005] 前述の概要は、本発明のいくつかの実施形態の簡単な紹介として役立つことを意図している。これは、この文書に開示されたすべての発明の主題の導入または概要であることを意味するものではない。以下の詳細な説明および詳細な説明で参照される図面は、概要ならびに他の実施形態で説明される実施形態をさらに説明する。したがって、本書面によって説明されるすべての実施形態を理解するために、概要、詳細な説明、図面、および特許請求の範囲の全体的な検討が必要である。さらに、特許請求の範囲に記載される主題は、概要、詳細な説明、および図面における例示的な詳細によって限定されるべきではない。
【図面の簡単な説明】
【0006】
[0006] 本発明の新規な特徴は、添付の特許請求の範囲に記載されている。しかしながら、説明の目的のために、本発明のいくつかの実施形態を以下の図に示す。
図1】[0007] 図1は、2つの論理転送要素によっていくつかの実施形態で実現される分離ゲストおよびサービスプレーンの例を示す。
図2】[0008] 図2は、いくつかの実施形態のサービス仮想マシン(SVM)によって処理されるサービスパスに沿ってリダイレクトされる、2つのゲスト仮想マシン(GVM)間のデータメッセージを示す。
図3】[0009] 図3は、いくつかの実施形態において、サービスチェーンと、サービスチェーンを実装する1つ以上のサービスパスのセットとの間の関係を概念的に示す。
図4】[0010] 図4は、サービスチェーンとそれに関連するサービスパスの例を示す。
図5】[0011] 図5は、図4に示すフォワードサービスパスのリバースサービスパスの例を示す。
図6】[0012] 図6は、いくつかの実施形態におけるサービスプレーンを実装する入出力(IO)チェーンコンポーネントの例を示す。
図7】[0013] 図7は、いくつかの実施形態のサービスインデックスプリプロセッサおよびサービストランスポートレイヤ呼び出し元によって実行されるプロセスを示す。
図8】[0014] 図8は、図7で説明したプロセスに対応するデータフロー例を示す。
図9】[0015] 図9は、第1のサービスノードによって転送するためのデータメッセージを定式化するための、いくつかの実施形態のポートプロキシの動作を示す。
図10】[0016] 図10は、サービスパス内のデータメッセージをネクストホップに渡すための、いくつかの実施形態のプロセスを概念的に示す。
図11】[0017] 図11は、図6のサービスプロキシが、サービスノードの入口パスに沿って横断するデータメッセージを受信するたびに、いくつかの実施形態において実行するプロセスを示す。
図12】[0018] 図12は、いくつかの実施形態のデータメッセージの3つのカプセル化ヘッダを概念的に示す。
図13】[0019] 図13は、サービスプロキシから処理するデータメッセージを受信するたびにSVMがいくつかの実施形態で実行する1つの例示的なプロセスを概念的に示す。
図14】[0020] 図14は、いくつかの実施形態のSVMの第1のマッピングテーブルを示す。
図15】[0021] 図15は、いくつかの実施形態におけるデータメッセージが第1ホップサービスノードから第2ホップサービスノードに転送される例を示す。
図16】[0022] 図16は、サービスプロキシが、そのサービスノードの出口パスに沿って通過するデータメッセージを受信するたびに、いくつかの実施形態において実行するプロセスを概念的に示す。
図17】[0023] 図17は、コンピュータ上で実行されるSVMによって処理される必要があるカプセル化されたデータメッセージを受信するネクストホップコンピュータ上のカプセル化プロセッサによって開始されるプロセスを概念的に示す。
図18】[0024] 図18は、いくつかの実施形態におけるデータメッセージが第2ホップサービスノードから第3ホップサービスノードに転送される例を示す。
図19】[0025] 図19は、いくつかの実施形態におけるデータメッセージが、第3ホップサービスノードから第1ホップサービスノードに戻される例を示す。
図20】[0026] 図20は、サービスインデックスポストプロセッサがいくつかの実施形態において実行するプロセスを概念的に示す。
図21】[0027] 図21は、いくつかの実施形態のネットワークサービスヘッダを示す。
図22】[0028] 図22は、いくつかの実施形態のメタデータコンテンツヘッダに記憶されるメタデータコンテンツの例を示す。
図23】、
図24】[0029] 図23-24は、GREヘッダをカプセル化したGVMのSVM出口側および入口側データメッセージへのサービスプロキシ転送の例を示す。
図25】[0030] 図25は、いくつかの実施形態において、出口方向のサービスデータを記憶するために使用されるGREヘッダフォーマットを示す。
図26】[0031] 図26は、いくつかの実施形態において、入口方向のサービスデータを記憶するために使用されるGREヘッダフォーマットを示す。
図27】[0032] 図27は、2つのGeneveカプセル化ヘッダ(サービストランスポートレイヤデータを運ぶための外側Geneveヘッダと、サービス挿入レイヤメタデータを運ぶための内側Geneveヘッダ)の使用を示す。
図28】[0033] 図28は、図27の2つのGeneceカプセル化ヘッダを1つのGeneveカプセル化ヘッダにまとめたものである。
図29】[0034] 図29は、いくつかの実施形態のオブジェクトデータモデルを示す。
図30】[0035] 図30は、サービス挿入、ネクストサービスホップ転送、およびサービス処理のためのルールを定義するために、ネットワークマネージャおよびコントローラがいくつかの実施形態において実行するいくつかの動作を概念的に示す。
図31】[0036] 図31は、いくつかの実施形態において、サービスパスがどのように動的に修正されるかを示す。
図32】[0037] 図32は、いくつかの実施形態で、マルチテナントデータセンタ内のテナントのサービスプレーンとそれに関連するサービスノードを定義するために実行されるプロセスを示す。
図33】[0038] 図33は、移行されたGVMの送信元ホストで実行されるプロセスと、移行されたGVMの宛先ホストで実行されるプロセスを示す。
図34A】、
図34B】、
図34C】[0039] 図34A~34Cは、いくつかの実施形態におけるGVM移行の例を示す。
図35】[0040] 図35は、いくつかの実施形態において、GVM移行後に制御プレーンによって実行される動作を概念的に示す。
図36】[0041] 図36は、移行されたSVMの移行元ホストで実行されるプロセスと、移行されたSVMの移行先ホストで実行されるプロセスを示す。
図37A】、
図37B】、
図37C】[0042] 図37A-37Cは、いくつかの実施形態におけるSVM移行の例を示す。
図38】[0043] 図38は、いくつかの実施形態において、GVM移行後に制御プレーンによって実行される動作を概念的に示す。
図39】[0044] 図39は、いくつかの実施形態におけるホスト内SVM移行の例を示す。
図40】[0045] 図40は、本発明のいくつかの実施形態が実施される電子システムを概念的に示す。
【発明を実施するための形態】
【0007】
[0046] 本発明の以下の詳細な説明では、本発明の多数の詳細、例、および実施形態を説明する。しかしながら、本発明は、説明された実施形態に限定されず、本発明は、説明された特定の詳細および例のいくつかなしに実施されてもよいことが、当業者には明らかであり、明確であろう。
【0008】
[0047] いくつかの実施形態は、1つ以上のデータセンタで動作するマシンのためのサービスを実行するための新しい方法を提供する。例えば、関連するゲストマシンのグループ(例えば、テナントマシンのグループ)に対して、いくつかの実施形態は、(1)ゲスト転送プレーンと(2)サービス転送プレーンの2つの異なる転送プレーンを定義する。ゲスト転送プレーンは、グループ内のマシンに接続し、これらのマシンに対してL2および/またはL3転送を実行する。サービス転送プレーンは、(1)これらのマシンとの間で送受信されるデータメッセージに対してサービスを実行するサービスノードに接続し、(2)これらのデータメッセージをサービスノードに転送する。
【0009】
[0048] いくつかの実施形態では、ゲストマシンは、サービス転送プレーンと直接接続しない。例えば、いくつかの実施形態では、各転送プレーンは、マシンまたはサービスノードからデータメッセージを受信するか、またはマシンまたはサービスノードにデータメッセージを供給するポートを介して、マシンまたはサービスノードに接続する。このような実施形態では、サービス転送プレーンは、任意のゲストマシンからデータメッセージを直接受信したり、任意のゲストマシンにデータメッセージを供給したりするポートを持たない。代わりに、いくつかのそのような実施形態では、ゲストマシンに関連するデータは、同じホストコンピュータ上で実行されるポートプロキシモジュールにルーティングされ、この他のモジュールはサービスプレーンポートを有する。いくつかの実施形態におけるこのポートプロキシモジュールは、同一ホスト上の複数のゲストマシンをサービスプレーンに間接的に接続することができる(すなわち、同一ホスト上の複数のゲストマシンのポートプロキシモジュールとして機能することができる)。
【0010】
[0049] いくつかの実施形態では、ゲストマシンは、サービスマシンまたはノードではない任意のマシンである。ゲストマシンは、マルチテナントデータセンタ内のテナントのマシンにすることはできるが、必ずしもする必要はない。いくつかの実施形態におけるゲストマシンは、ゲスト仮想マシンまたはゲストコンテナである。いくつかの実施形態におけるサービスノードは、サービス仮想マシン、サービスコンテナ、またはサービスアプライアンスである。いくつかの実施形態では、サービスノードは、ファイアウォール、侵入検知システム、侵入防御システム、ロードバランサ、暗号化器、メッセージモニタ、メッセージコレクタ、または任意の数の他のミドルボックスサービスなどのミドルボックスサービス動作を実行する。したがって、本書で使用されるサービスは、いくつかの実施形態における任意のタイプのミドルボックスサービス動作である。
【0011】
[0050] また、本書で使用されているように、データメッセージは、ネットワークを介して送信される特定の形式のビットの集合を指す。当業者は、データメッセージという用語が、ネットワークを介して送信されるビットの様々な定式化された集合を指すために本書で使用されることを認識するであろう。これらのビットのフォーマットは、標準化されたプロトコルまたは標準化されていないプロトコルによって指定することができる。標準化されたプロトコルに従ったデータメッセージの例としては、イーサネットフレーム、IPパケット、TCPセグメント、UDPデータグラムなどがある。また、本明細書で使用するL2、L3、L4、L7レイヤ(またはレイヤ2、レイヤ3、レイヤ4、レイヤ7)は、OSI (Open System Interconnection)レイヤモデルの第2データリンクレイヤ、第3ネットワークレイヤ、第4トランスポートレイヤ、第7レイヤプリケーションレイヤをそれぞれ参照している。
【0012】
[0051] 図1は、2つの論理転送要素(LFE)130および132によっていくつかの実施形態で実施される分離ゲストおよびサービスプレーンの例を示す。図に示すように、2つのゲストマシン102および104と3つのサービスマシン106、108および110は、3つのソフトウェア転送要素120、122および124と共に、3つのホストコンピュータ112、114および116上で実行される。この例では、ゲストマシンおよびサービスマシンはゲスト仮想マシン(GVM)およびサービス仮想マシン(SVM)であるが、他の実施形態では、これらのマシンは、コンテナなどの他のタイプのマシンであってもよい。
【0013】
[0052] また、この例では、各論理転送要素は、複数のホストコンピュータに複数のソフトウェア転送要素(SFE)を設定することによって実装される分散転送要素である。これを行うために、いくつかの実施形態では、各SFEまたはSFEに関連するモジュールは、オーバーレイネットワークに関連する仮想ネットワーク識別子(VNI)を含むオーバーレイネットワークヘッダでLFEのデータメッセージをカプセル化するように構成される。このように、LFEは、以下の議論において、複数のホストコンピュータにまたがるオーバーレイネットワーク構造であると言われる。
【0014】
[0053] LFEはまた、いくつかの実施形態では、構成されたハードウェア転送要素(例えば、ラックスイッチの上)にまたがる。いくつかの実施形態では、各LFEは、複数のソフトウェアスイッチ(仮想スイッチまたはvswitchと呼ばれる)または関連モジュールを複数のホストコンピュータ上に構成することによって実現される論理スイッチである。他の実施形態では、LFEは、他のタイプの転送要素(例えば、論理ルーター)、または論理ネットワークまたはその部分を形成する転送要素(例えば、論理スイッチおよび/または論理ルーター)の任意の組合せであることができる。現在、LFE、論理スイッチ、分散論理ルーター、および論理ネットワークの多くの例が存在する。これには、VMwareのNSXネットワークおよびサービス仮想化プラットフォームによって提供されるものも含まれる。
【0015】
[0054] 図に示すように、LFE 130は、これらのGVM間でデータメッセージを転送するために、GVM102および104を接続するゲスト転送プレーンを定義する。いくつかの実施形態では、このLFEは、論理ルーターに接続する論理スイッチであり、この論理ルーターは、GVMを、直接又は論理ゲートウェイを介して、論理スイッチの論理ネットワーク外のネットワークに接続する。LFE130は、第1の分散論理スイッチを実装するために、ホストコンピュータ112および114上でソフトウェアスイッチ120および122および/またはそれらの関連モジュール(例えば、関連するポート/VNICフィルタモジュール)を構成することによって、いくつかの実施形態で実装される。
【0016】
[0055] 以下で説明する図1およびその他の図は、送信元GVMと宛先GVMが同じ論理ネットワーク上にあり、同じLFEに接続されていることを示している。当業者は、いくつかの実施形態のサービス動作は、送信元および宛先マシンが同一のLFEに接続されることを必要とせず、あるいは同一のネットワークまたは同一のデータセンタにあることさえ必要としないことを認識するであろう。これらのサービス動作は、送信元マシンのネットワークを終了するか、送信元マシンのネットワークに入るデータメッセージに対して実行される。図は、サービスプレーン132が、ゲストマシンに関連するデータメッセージを転送する論理ネットワークとは別の論理ネットワークによって実装されることを強調するために、同一のLFEに接続されたものとしての送信元および宛先マシンを示す。
【0017】
[0056] LFE132は、SVMを含むサービスパスを介してGVMに関連付けられたデータメッセージを転送するために、SVM106、108、110を接続するサービス転送プレーンを定義する。いくつかの実施形態では、LFE132はまた、第2の分散論理スイッチを実装するためにホストコンピュータ112、114および116上でソフトウェアスイッチ120、122および124および/またはそれらの関連モジュールを構成することによって実装される論理スイッチである。ゲストおよびサービス転送プレーン(すなわち、ゲストおよびサービスLFE)の両方を実装するために同じSFEのセットを構成する代わりに、他の実施形態は、サービス転送プレーンを実装するために、ゲスト転送プレーンおよびホストコンピュータのセット上の別のSFEのセットを実装するために、ホストコンピュータのセット上の1つのSFEのセットを構成する。例えば、いくつかの実施形態では、各ホストコンピュータは、ゲストソフトウェアスイッチおよびサービスソフトウェアスイッチを実行し、これら2つのスイッチおよび/またはそれらの関連モジュールは、ゲスト論理スイッチおよびサービス論理スイッチを実装するように構成されることができる。
【0018】
[0057] いくつかの実施形態では、ソフトウェアスイッチ120、122および124および/またはそれらの関連モジュールは、複数のゲスト転送プレーン(例えば、ゲストLFE)および複数のサービス転送プレーン(例えば、サービスLFE)を複数のマシンのグループに対して実装するように構成されることができる。例えば、マルチテナントデータセンタの場合、いくつかのこのような実施形態は、少なくとも1つのサービスチェーンが実装される必要がある各テナントに対して、ゲストLFEおよびサービスLFEを定義する。関連するマシンの各グループ(例えば、各テナントのマシン)に対して、いくつかの実施形態は、2つの異なる転送プレーン、すなわち、ゲスト転送プレーンおよびサービス転送プレーンを実装するためのソフトウェア転送要素(例えば、ソフトウェアスイッチ)の共有セットを構成するために、2つの仮想ネットワーク識別子(VNI)を定義する。これらの2つのVNIは、以下ではゲストVNI(GVNI)およびサービスVNI(SVNI)と呼ばれる。図1では、図に示すように、ゲストLFEポート150と152はGVNIに関連付けられ、サービスLFEポート154、156、および158はSVNIに関連付けられている。
【0019】
[0058] いくつかの実施形態では、サービスプレーン132は、SFE120または122との間のGVMの出入口のデータパスの入出力(IO)チェーンにモジュールを挿入することによっても実現される。この実装では、サービスプレーン132は、GVMから送信された、またはGVMのために受信されたデータメッセージを識別し、データメッセージ上でサービスのチェーンを実行するためにデータメッセージをSVMのセットに転送し、次にデータメッセージをGVMのデータパスに戻して、データメッセージがソフトウェアスイッチまたはGVMへのデータパスに沿って進むことができるようにする(すなわち、送信元GVMによって指定された宛先ネットワークアドレスに基づいてデータメッセージを処理できるようにする)。このようなGVMは、サービスノードによって処理されているデータメッセージがGVMの出口または入口パス上で識別されるデータメッセージであるため、送信元GVMとして以下で参照される。いくつかの実施形態では、GVMの出口/入口IOチェーンは、GVMのVNIC(仮想ネットワークインターフェースカード)180内のフック(関数呼び出し)のセット、またはGVMのVNICに関連するSFEポート(例えば、GVMのVNICと通信するSFEポート)として実装される。
【0020】
[0059] サービスプレーンを実装するいくつかの実施形態のIOチェーンコンポーネントの例を提供する前に、図2は、2つのサービス動作のチェーンを実行するSVM108および110によってデータメッセージを処理できるように、サービスプレーン132に沿ってリダイレクトされるGVM102からGVM104へのデータメッセージ202の例を示す。図に示すように、サービスLFE132は、まずデータメッセージをSVM108に転送し、次にデータメッセージをSVM110に転送してから、データメッセージをGVM102の出口パスに戻し、送信元GVM102によって指定された宛先ネットワークアドレスに基づいてデータメッセージを処理できるようにする。
【0021】
[0060] いくつかの実施形態におけるサービスLFEは、サービスLFEのためのSVNIを格納するオーバーレイカプセル化ヘッダを使用することによって、ホスト112、114、116の間でデータメッセージを転送する。また、サービスLFEがサービス論理スイッチであるとき、いくつかの実施形態におけるサービス転送プレーンは、SVMに関連するMACアドレス(例えば、SVM VNICのMACアドレス)を使用して、サービス論理スイッチのポート間でデータメッセージを転送する。いくつかの実施形態では、このGVMはサービスプレーンに直接接続せず、代わりにポートプロキシを介してサービスプレーンに接続するが、後述するように、MAC転送は送信元GVMに関連するサービスプレーンMACアドレスも使用する。
【0022】
[0061] データメッセージ202がGVM102の出口パスに戻ると、ゲストLFE130はデータメッセージをその宛先(例えば、データメッセージのヘッダ内の宛先ネットワークアドレスによって指定される)、これはGVM104である、に転送する。いくつかの実施形態におけるゲストLFE130は、ゲストLFEのためのGVNIを格納するオーバーレイカプセル化ヘッダを使用することによって、ホスト112と114との間でデータメッセージを転送する。また、ゲストLFEが論理スイッチであるとき、いくつかの実施形態におけるゲスト転送プレーンは、GVM102および104に関連するゲストプレーンMACアドレスを使用して、データメッセージを転送する(例えば、GVM104のゲストプレーンMACアドレスを使用して、このGVMに関連するゲスト転送ポート152にデータメッセージを転送する)。図2のサービスプレーンは、GVMの出口パスを通過するデータメッセージを捕捉するが、いくつかの実施形態では、サービスプレーンは、GVMのVNICに到達する前に、GVMの入口パスを通過するときに、データメッセージを捕捉することもできる。
【0023】
[0062] いくつかの実施形態では、サービス動作のチェーンは、サービスチェーンと呼ばれる。いくつかの実施形態におけるサービスチェーンは、サービスパスを定義するサービスノードの各セットと共に、サービスノードの1つ以上のセット(例えば、サービスマシンまたはアプライアンス)を用いて実現することができる。したがって、いくつかの実施形態では、サービスチェーンは、1つ以上のサービスパスのそれぞれによって実現することができる。いくつかの実施形態における各サービスパスは、サービスチェーンの1つ以上のサービスのセットと、これらのノードを介した特定の順序とを実行するための1つ以上のサービスノードを含む。
【0024】
[0063] 図3は、サービスチェーン302と、サービスチェーンを実装する1つ以上のサービスパス304のセットとの間の関係を示すオブジェクト図を示す。各サービスチェーンにはサービスチェーン(SC)識別子306があり、各サービスパスにはサービスパス識別子(SPI)308がある。各サービスパスは、示されるように、サービスインスタンスエンドポイント310に関して識別されるm個のサービスノードのセットに関連付けられる。いくつかの実施形態におけるサービスインスタンスエンドポイントは、トラフィックがサービスプレーンに接続されたサービスノードを行き来することができる、またはサービスプレーンから来ることができる、ネットワーク内の論理的な位置である。いくつかの実施形態では、サービスインスタンスエンドポイントは、サービスノード(例えば、SVMのVNIC)に関連する1つのLFEポート(例えば、SFEポート)である。これらまたは他の実施形態では、サービスインスタンスエンドポイントは、GREカプセル化を使用する実施形態のために、以下にさらに説明するように、サービスノードに使用される2つのLFEポートに関連付けられることができる。また、いくつかの実施形態におけるサービスエンドポイントは、LFEポートに関連するMACアドレス、または(例えば、これらのLFEポートと通信する)関連するSVM VNICを通してアドレス指定可能である。
【0025】
[0064] いくつかの実施形態では、各サービスチェーン302は、1つ以上のサービスプロファイル312への参照によって定義され、各サービスプロファイルは、チェーン内のサービス動作に関連付けられる。以下に説明するように、いくつかの実施形態におけるサービスノードは、(1)サービスマネージャから、サービスチェーン識別子の、それが実装しなければならないサービスプロファイルへのマッピングを受信し、(2)データメッセージと共に、それが実行しなければならないサービス動作を決定するためにサービスプロファイルにマッピングするサービスチェーン識別子を受信する。いくつかの実施形態では、受信されたマッピングは、サービスチェーン識別子(SCI)に基づくだけでなく、サービスインデックス値(サービスパス内のサービスノードの位置を指定する)およびサービスチェーンを介した方向(サービスチェーンによって指定されたサービスのシーケンスを実行するための順序を指定する)にも基づく。いくつかの実施形態におけるサービスプロファイルは、サービスノードが実行しなければならないサービス動作を記述する。いくつかの実施形態では、サービスプロファイルは、検査するサービスノードのためのルールのセットを識別することができる。
【0026】
[0065] また、いくつかの実施形態では、サービス挿入ルール314は、GVMに関連するサービス挿入モジュールのためのサービスチェーン識別306への参照によって定義される。このようなサービス挿入モジュールは、これらのサービス挿入ルール314を使用して、送信元GVMに関連するデータメッセージを処理するために使用するサービスチェーンを識別する。前述したように、データメッセージは、送信元GVMからのものとして、そして、サービスチェーンによって処理されるデータメッセージが、GVMからの出口パスまたはGVMへの入口パスで識別されるものとして、以下で参照される。
【0027】
[0066] 以下でさらに説明するように、サービス挿入(SI)ルールは、フロー識別子をサービスチェーン識別子に関連付ける。言い換えると、いくつかの実施形態は、データメッセージのフロー属性をサービス挿入ルールのフロー識別子(以下、SIルールのルール識別子と呼ぶ)に一致させることを試み、一致するサービス挿入ルール(すなわち、データメッセージのフロー属性に一致するフロー識別子の設定を有するルール)を識別し、この一致ルールの指定されたサービスチェーンをデータメッセージのサービスチェーンとして割り当てる。特定のフロー識別子(例えば、5つのタプル識別子への参照によって定義されるもの)は、1つの特定のデータメッセージフローを識別することができ、一方、より一般的なフロー識別子(例えば、5つのタプルより小さい参照によって定義されるもの)は、より一般的なフロー識別子と一致するいくつかの異なるデータメッセージフローのセットを識別することができる。そのため、一致するデータメッセージフローは、サービス挿入ルールのルール識別子に一致する共通の属性セットを持つ任意のデータメッセージセットである。
【0028】
[0067] 以下にさらに説明するように、他の実施形態は、データメッセージフローに関連するコンテキスト属性を使用して、データメッセージをサービス挿入ルールに関連付ける。転送およびサービス動作を実行するためのコンテキスト属性を捕捉および使用するための多くの技術は、本明細書に組み込まれる米国特許出願第15/650,251号に記載されている。これらの技術のいずれも、本明細書に記載する実施形態と共に使用することができる。
【0029】
[0068] いくつかの実施形態におけるネクストホップ転送ルール316は、SPI値308およびサービスインスタンスエンドポイント310を参照することによって定義される。具体的には、いくつかの実施形態では、データメッセージに対して識別されたサービスチェーンに対してサービスパスが選択される。各ホップで、これらの実施形態は、転送ルール314を使用して、サービスパス内のホップの位置を識別する現在のサービスインデックス(SI)値と共に、このサービスパスのSPI値に基づいて次のサービスインスタンスエンドポイントを識別する。言い換えると、いくつかの実施形態における各転送ルールは、SPI/SI値に関して定義された一致基準のセットを有し、これらのSPI/SI値に関連するネクストホップサービスインスタンスエンドポイントのネットワークアドレスを指定する。第1ホップのネクストホップルックアップを最適化するために、いくつかの実施形態は、サービスパス選択プロセスの一部として、SPIと共にネクストホップネットワークアドレスを送信元GVMのサービス挿入モジュールに提供する。
【0030】
[0069] 図4は、サービスチェーンとそれに関連するサービスパスの例を示す。図示のように、いくつかの実施形態における各サービスチェーン405は、サービスプロファイル410のシーケンシャルリストとして定義され、この例における各プロファイルは、異なるミドルボックスサービス(ファイアウォール、ロードバランサ、侵入検知器、データメッセージ監視など)に関連する。また、この例では、各Mプロファイルは、VMのクラスタm内の1つのSVMによって実装できる。図に示すように、プロファイルごとに異なるクラスタには、異なる数のSVMを設定できる。また、いくつかの実施形態では、1つのサービスプロファイルが1つのサービスノードによって実装される(すなわち、いくつかのサービスノードのクラスタは、サービスプロファイルを実装するために必要とされない)。
【0031】
[0070] クラスタ内の複数のSVMは特定のサービスを提供できるため、いくつかの実施形態では、特定のサービスチェーンに対して、複数の異なるSVMの組み合わせを介した複数のサービスパスを定義し、各クラスタの1つのSVMが各組み合わせで使用される。図4の例では、サービスチェーン405に関連するN個のサービスパスがあり、それらのサービスパスは、GVM404への経路上のGVM402で発信されるデータメッセージによって横断される。各サービスパスは、この図の異なる破線のセットで識別される。
【0032】
[0071] 具体的には、第1のサービスパスは、転送するサービスチェーン405の第1のサービスを実装するために第1のサービスプロファイルのクラスタの第1のSVM 1,1、転送するサービスチェーン405の第2のサービスを実装するために第2のサービスプロファイルのクラスタの第1のSVM 2,1、および転送するサービスチェーン405のM番目のサービスを実装するためにM番目のサービスプロファイルのクラスタの第3のSVM M,3を通過する。第2のサービスパスは、転送サービスチェーン405の第1のサービスを実装するために第1のサービスプロファイルのクラスタの第2のSVM 1,2を通過し、転送サービスチェーン405の第2のサービスを実装するために第2のサービスプロファイルのクラスタの第1のSVM 2,1と、転送サービスチェーン405のM番目のサービスを実装するためにM番目のサービスプロファイルのクラスタの第1のSVM M,1を通過する。
【0033】
[0072] 3番目のサービスパスは、転送サービスチェーン405の第1のサービスを実装するために、第1のサービスプロファイルのクラスタの3番目のSVM 1,3を通過し、転送サービスチェーン405の2番目のサービスを実装するために、2番目のサービスプロファイルのクラスタの2番目のSVM 2,2を通過し、転送サービスチェーン405のM番目のサービスを実装するために、M番目のサービスプロファイルのクラスタの2番目のSVM M,2を通過する。N番目のサービスパスは、転送サービスチェーン405の第1のサービスを実装するために、第1のサービスプロファイルのクラスタの3番目のSVM 1,3を通過し、転送サービスチェーン405の2番目のサービスを実装するために、2番目のサービスプロファイルのクラスタの2番目のSVM 2,2を通過し、転送サービスチェーン405のM番目のサービスを実装するために、M番目のサービスプロファイルのクラスタの4番目のSVM M,4を通過する。この例で説明するように、サービスパスが異なると、特定のサービス動作に同じSVMが使用される場合がある。ただし、特定のデータメッセージが通過するサービスパスに関係なく、同じサービスチェーンと同じサービス方向に関連付けられているパスに対して、同じサービス動作のセットが同じシーケンスで実行される。
【0034】
[0073] いくつかの実施形態では、サービスチェーンは、第1のGVMから第2のGVMへのデータメッセージに対して順方向に実行され、次に第2のGVMから第1のGVMへのデータメッセージに対して逆方向に実行されなければならない。いくつかのこのような実施形態では、サービスプレーンは、第1のGVMから第2のGVMへのフロー内の第1のデータメッセージを処理するときに、順方向(フォワード)のサービスパスと逆方向(リバース)のサービスパスの両方を選択する。また、これらの実施形態のいくつかでは、フォワードおよびリバースサービスパスは、サービスノードの同じセットによって実装されるが、逆の順序で実装される。
【0035】
[0074] 図5は、図4に示すフォワードサービスパスのリバースサービスパスの例を示す。フォワードサービスパスは、GVM402からGVM404へのデータメッセージに対してMサービスを実行するためのものであるが、リバースサービスパスは、GVM404からGVM402へのデータメッセージに対してMサービスを実行するためのものである。また、図5のサービスパスがサービスプロファイルM~1を実行するのに対して、図4のサービスパスがサービスプロファイル1~Mを実行すると、これらのサービスの順序が逆になる。
【0036】
[0075] また、図4および図5の例では、各リバースサービスパスは、サービスパスの凡例およびこれらの図の同様の破線によって示されるように、まったく同じSVMのセットによって実装されるが逆の順序で実装される、1つの対応するフォワードサービスパスを有する。たとえば、順方向、第2のサービスパスは、第1のプロファイルに関連付けられた第1のサービスについてはSVM 1,2を通過し、第2のプロファイルに関連付けられた第2のサービスについてはSVM 2,1を通過し、M番目のサービスプロファイルに関連付けられたM番目のサービスについてはSVM M,1を通過する。一方、第2のサービスパスは、M番目のサービスプロファイルに関連付けられた第1のサービスについてはSVM M,1を通過し、第2のプロファイルに関連付けられた第2のサービスについてはSVM 2,1を通過し、第1のプロファイルに関連付けられた第2のサービスについてはSVM 1,2を通過する。
【0037】
[0076] いくつかの実施形態では、サービスプロファイルの1つを実装するサービスノード(例えば、ファイアウォールSVM)の少なくとも1つが、2つのデータエンドポイント(例えば、2つのGVMS)間の双方向のデータトラフィックを見る必要があるため、フォワードパスとリバースパスに同じサービスノードが使用される。他の実施形態では、同じサービス動作のセットが反対の順序で実行される限り、2つのデータエンドポイント間のデータメッセージフローの両方向に同じサービスノードを使用する必要はない。
【0038】
[0077] 図6は、いくつかの実施形態におけるサービスプレーンを実装するIOチェーンコンポーネントの例を示す。図に示すように、サービスプレーン132は、ホストコンピュータ上で実行されるソフトウェアスイッチ120、122、124と、これらのコンピュータ上で実行される2組のモジュール610、612、614、620、624、626、および628によって実現される。この例に実装されているサービスプレーンと、後続のいくつかの図に示されているいくつかの他の実施形態は、オーバーレイ論理L2サービスプレーンである。当業者は、他の実施形態が、オーバーレイL3サービスプレーン、または複数のL2論理スイッチおよび1つ以上の論理L3ルーターを備えたオーバーレイネットワークなどの他のタイプのサービスプレーンによって実現されることを理解するであろう。
【0039】
[0078] 図6では、ソフトウェアスイッチ120、122、124、およびモジュール610、612、614、620、624、626、および628は、サービス挿入レイヤ602およびサービストランスポートレイヤ604であるサービスプレーンの2つの異なるレイヤを実装する。サービス挿入レイヤ602は、(1)データメッセージのサービスチェーンを識別し、(2)サービスチェーンのサービス動作を実行するために使用するサービスパスを選択し、(3)選択されたサービスパス内の各ホップにあるネクストホップサービスノードを識別し(サービスチェーンの完了時にデータメッセージが戻されるべき送信元ホストコンピュータの識別を含む)、(4)サービスパスに対して、データメッセージのサービスメタデータ(SMD)ヘッダ属性を指定する。いくつかの実施形態におけるSMD属性は、IETF(Internet Engineering Task Force)のRFC(Request for Comments)8300によるネットワークサービスヘッダ(NSH)属性を含む。
【0040】
[0079] 一方、サービストランスポートレイヤ604は、サービスオーバーレイカプセル化ヘッダを定式化し、サービスホップ間を通過できるように、このヘッダでデータメッセージをカプセル化する。いくつかの実施形態では、サービストランスポートレイヤ604は、サービスオーバーレイカプセル化ヘッダを生成するようにSMDヘッダを修正する。例えば、これらの実施形態のいくつかでは、オーバーレイカプセル化ヘッダは、GeneveヘッダのTLV(タイプ、長さ、値)セクションに格納されたSMD属性をもつGeneveヘッダである。他の実施形態では、サービストランスポートレイヤ604は、サービスオーバーレイカプセル化ヘッダを、データメッセージをカプセル化するために最初に使用されるSMDヘッダに追加する。また、同じホストコンピュータ上で実行される2つのホップ間(例えば、2つのサービスノード間)を横断する場合、以下に説明するいくつかの実施形態におけるサービストランスポートレイヤは、いくつかの実施形態において、オーバーレイカプセル化ヘッダでデータメッセージをカプセル化しない。他の実施形態では、同じホストコンピュータ上の2つのホップ間を横断する場合でも、サービストランスポートレイヤはオーバーレイカプセル化ヘッダでデータメッセージをカプセル化する。
【0041】
[0080] いくつかの実施形態では、サービス挿入(SI)レイヤ602は、SIプリプロセッサ610とSIポストプロセッサ612とを含み、各2つのIOチェーン650および652(すなわち、1つ以上のサービスチェーンが定義されているGVMの出口IOチェーン650および入口IOチェーン652)内に含まれる。SIレイヤ602はまた、サービスプレーンに接続された各サービスノードのためのサービスプロキシ614を含む(例えば、サービスプレーンLFEポートと対になったVNICを有する各SVMのため)。サービストランスポートレイヤ604は、1つ以上のサービスチェーンが定義されている1つ以上の可能な送信元GVMを有する各ホストコンピュータ上に、1つのSTLポートプロキシ620を含む。また、STレイヤ604は、(1)各送信元GVMの各IOチェーン内のSTL呼出元624、(2)各SVMのIOチェーン内のSTLモジュール626、および(3)1つ以上のカプセル化プロセッサ628を有する。
【0042】
[0081] GVMの入口または出口データパスを通過するデータメッセージの場合、このデータパス上のSIプリプロセッサ610は、いくつかの動作を実行する。データメッセージのサービスチェーンを識別し、識別されたサービスチェーンのサービスパスを選択する。また、プリプロセッサは、選択されたサービスパス内の第1ホップサービスノードのネットワークアドレスを識別し、データメッセージのSMD属性を指定する。SMD属性は、いくつかの実施形態では、サービスチェーン識別子(SCI)、SPIおよびSI値、およびサービスチェーンのサービス動作を処理するための方向(例えば、順方向または逆方向)を含む。いくつかの実施形態では、SPI値はサービスパスを識別し、SI値はサービスノードの数を指定する。
【0043】
[0082] SIプリプロセッサがその動作を完了した後、同じデータパス内のSTL呼出元624は、STLポートプロキシ620を呼び出して、プリプロセッサが識別したSMD属性と第1ホップのネットワークアドレスを中継し、それにより、ポートプロキシは、サービスプレーンを介してSMD属性を第1ホップに転送することができる。ポートプロキシは、第1サービスノードに転送するためにデータメッセージを定式化する。いくつかの実施形態では、この定式化は、データメッセージ内のオリジナルの送信元および宛先MACアドレスを、送信元GVM102および第1ホップサービスノードのMACアドレスに関連するサービスプレーンMACアドレスに置き換えることを含む。この定式化は、同じホストコンピュータ上の他のサービストランスポートレイヤモジュール(例えば、他のSTLモジュールなど)によって処理されるべきデータメッセージのための属性の集合も格納する。これらのデータメッセージ属性には、オリジナルの送信元と宛先のMACアドレスだけでなく、SMD属性も含まれる。
【0044】
[0083] STLポートプロキシ620は、定式化されたデータメッセージをその記憶された属性と共にソフトウェアスイッチ120に渡す。定式化されたデータメッセージの宛先MACアドレス(つまり、第1ホップMACアドレス)に基づいて、ソフトウェアスイッチは、第1ホップSVMに関連付けられたスイッチポートにデータメッセージを配信する。第1ホップがポートプロキシ620と同じホストコンピュータ上にあるとき、データメッセージは、同じホストコンピュータ上の第1ホップのサービスノードの入口IOチェーン内のSTLモジュール626に提供される。第1ホップが同じホストコンピュータ上にないとき、データメッセージはカプセル化ヘッダでカプセル化され、後述するように、次のホップに転送される。
【0045】
[0084] 各ホップのSTLモジュール626は、サービスプレーンの送信元MACアドレスおよびサービスプレーンの宛先MACアドレス(すなわち、そのサービスノードのMACアドレス)をデータメッセージの元の送信元および宛先MACアドレスに置き換えることによって、データメッセージを再定式化する。次に、この再定式化されたデータメッセージを、それに付随するSMD属性と共に、そのホップのサービスプロキシ614に渡す。このサービスプロキシは、GVMの入口データパスのIOチェーンにある。図6の図が不要に詳細で複雑すぎることを防ぐために、この例の各SVMの入口パスと出口パスは、GVM102の入口パスと出口パス650および652とは異なり、この図で結合されている。
【0046】
[0085] サービスプロキシ614は、データメッセージのSMD属性を格納するカプセル化NSHヘッダを用いて受信データメッセージをカプセル化し、サービスノードがNSHヘッダをサポートできるとき、このカプセル化データメッセージをサービスノードに提供する。サービスノードがSVMである場合、以下にさらに説明するように、いくつかの実施形態では、サービスプロキシは、VNICインジェクション処理を通じて、データメッセージとそのNSHヘッダをSVMのVNICに供給する。サービスノードがNSHヘッダを処理できないとき、サービスプロキシ614はSMD属性をレガシーQinQカプセル化ヘッダまたはGREカプセル化ヘッダに格納し、カプセル化されたデータメッセージをSVMのVNICに渡す。これらのヘッダについては、以下でさらに説明する。
【0047】
[0086] いくつかの実施形態では、各サービスホップのサービスプロキシ614は、サービストランスポートレイヤからそのホップのサービスノードを分離する。この分離により、SVMとサービストランスポートレイヤの両方のセキュリティが向上する。また、サービスプロキシは、SVMに提供されるデータメッセージが適切に定式化されていることを確認できる。これは、新しいNSH形式をサポートしていない従来のSVMでは特に重要である。
【0048】
[0087] いくつかの実施形態におけるサービスプロキシ614は、サービスノードが動作可能であることを保証するために、そのサービスノードと共にライブネス検出シグナリングも実行する。いくつかの実施形態では、サービスプロキシは、それぞれの反復時間周期に少なくとも1回、そのサービスノードにライブネス値(liveness value)をもつデータメッセージを送信する。これを行うために、サービスプロキシはタイマーを設定し、リセットして、サービスノードに期間ごとにライブネス信号を送信したことを確認する。各ライブネス値には、サービスプロキシがSVMから提供されたライブネス応答を追跡できるようにするライブネスシーケンス番号が付随する。サービスノードは、ライブネス信号に応答するたびに、いくつかの実施形態では応答データメッセージ内の同一のライブネス値、または他の実施形態では応答データメッセージ内の対応する値をサービスプロキシに提供する。また、各ライブネス応答データメッセージと共に、サービスノードは、いくつかの実施形態では同じシーケンス番号、または他の実施形態ではサービスプロキシによって提供されるシーケンス番号のインクリメントされたバージョンを提供する。
【0049】
[0088] 以下にさらに説明するように、いくつかの実施形態のサービスプロキシは、サービスフォワーディングプレーンからそのサービスノードに渡す各データメッセージ上で、そのライブネス検出シグナリングの一部をピギーバックする。サービスプロキシは、サービスノードにライブネス信号を送信するたびに、そのライブネスタイマーをリセットする。サービスノードは、データメッセージを処理するたびに、応答ライブネス値および関連するシーケンス番号(いくつかの実施形態ではインクリメントされるか、または上述のように他の実施形態ではインクリメントされない)をサービスノードに提供する。
【0050】
[0089] いくつかの実施形態では、サービスプロキシは、サービスノードが特定の時間内(例えば、0.3秒以内)にそのライブネス信号に応答しないとき、ライブネス検出障害を登録する。2つの連続したライブネス検出障害を登録した後、いくつかの実施形態のサービスプロキシは、SVMが障害を起こしたホスト上で実行しているローカル制御プレーン(LCP)モジュールに通知し、LCPが中央制御プレーン(CCP)サーバに通知できるようにする。このような通知に応じて、CCPはSVMとSVMが存在するサービスパスをデータプレーンの転送ルールとパス選択ルールから削除し、必要に応じて、障害が発生したSVMの関連サービスチェーンに追加のサービスパスを生成する。また、いくつかの実施形態では、サービスプロキシは、故障したサービスノードが存在するサービスパスを選択しないようにその分類器をプログラムするために、帯域内データメッセージを送信元GVMに送り返す。
【0051】
[0090] いくつかの実施形態では、サービスプロキシはまた、そのサービスノードの最上位でフロープログラミングを実行する。いくつかの実施形態におけるこのフロープログラムは、送信元GVMのIOチェーンがサービスパスに沿ってサービスチェーン、サービスパス、および/またはデータメッセージフローを選択する方法を修正することを含む。他の実施形態では、このフロープログラムは、データメッセージフローがサービスプレーンによって処理される方法に対する他の修正を含む。以下、フロープログラムについてさらに説明する。
【0052】
[0091] データメッセージとそのSMD属性(カプセル化NSHヘッダまたは他のカプセル化ヘッダ)を受信すると、SVMはサービス動作を実行する。いくつかの実施形態では、SVMは、サービスマネージャから受信したマッピングレコードを使用して、SMD属性内のSCI、SI、および方向の値をサービスプロファイルにマッピングし、このサービスプロファイルをそのルールセットの1つにマッピングし、次に、このサービスプロファイルを調べて、処理する1つ以上のサービスルールを識別する。いくつかの実施形態では、各サービスルールは、データメッセージ属性(例えば、送信元および宛先IPアドレス、送信元および宛先ポートアドレスおよびプロトコルである5つのタプル属性)に関して定義されるルール識別子を有する。いくつかの実施形態におけるSVMは、ルールの識別子をデータメッセージの属性と比較して、一致するルールを識別する。1つ以上の一致ルールを識別すると、いくつかの実施形態では、SVMは、最高優先度の一致ルールによって指定されたアクションを実行する。たとえば、ファイアウォールSVMは、データメッセージの通過を許可するか、ドロップするか、またはリダイレクトするかを指定し得る。
【0053】
[0092] SVMがサービス動作を完了すると、SVMはその出口データパスに沿ってデータメッセージを転送する。次に、出口データパスのIOチェーンのサービスプロキシは、このデータメッセージをキャプチャし、このデータメッセージについて、サービスパス内のネクストホップのネットワークアドレスを識別する。これを行うために、いくつかの実施形態におけるサービスプロキシは、SI値をデクリメントし、次いで、データメッセージの記憶された属性セット内のSPI値と共に、このデクリメントされた値を使用して、ネクストホップネットワークアドレスを識別する完全一致転送ルールを識別する。実施形態によっては、SVMはSI値をデクリメントすることができる。このような場合、いくつかの実施形態のサービスプロキシは、対応するSVMがSI値をデクリメントしたときにSI値をデクリメントしないように構成されることができる。
【0054】
[0093] どちらの構成でも、サービスプロキシは適切なSPI/SI値を使用して、データメッセージに適用可能なネクストホップ転送ルールを識別することで、ネクストホップネットワークアドレスを識別する。プロキシのサービスノードが複数のサービスパスにある場合、プロキシの転送ルール記憶装置には、異なるサービスパスに関連付けられた異なるSPI/SI値に異なるネクストホップネットワークアドレスを指定できる複数の完全一致転送ルールが格納される。デクリメントされたSI値がゼロでないと仮定すると、サービスパスのネクストホップは別のサービスノードになる。それゆえ、いくつかの実施形態におけるプロキシは、SVMの出口データパスにおいて、ネクストホップのMACアドレスをプロキシの関連するSTLモジュール626に提供する。次に、このモジュールは、SVMのMACアドレスとネクストホップのMACアドレスを送信元と宛先のMACアドレスとして指定し、データメッセージに格納されている属性セットにデータメッセージの元の(original)送信元と宛先のMACアドレスを格納することによって、データメッセージを再定式化する。次に、STLモジュール626は、データメッセージを出口パスに沿って転送し、そこでソフトウェアスイッチに到達し、そこで、データメッセージとその格納された属性をネクストホップサービスノードに転送しなければならない。
【0055】
[0094] ネクストホップが同じホストコンピュータ上にある場合、ソフトウェアスイッチは、前述のように、データメッセージとその属性を、ネクストホップのサービスノードのSTLモジュールに接続するポートに渡す。一方、ネクストホップサービスノードが別のホストコンピュータ上にある場合、ソフトウェアスイッチは、他のホストコンピュータ上のVTEPとオーバーレイネットワークトンネルを介して通信するVTEP(VXLAN Tunnel Endpoint)に接続するアップリンクポートにデータメッセージを提供する。次に、カプセル化プロセッサ628は、このポートの出口パスに沿ってこのデータメッセージを捕捉し、このデータメッセージのカプセル化オーバーレイヘッダを定義し、このオーバーレイヘッダでデータメッセージをカプセル化する。いくつかの実施形態では、オーバーレイヘッダは、SMD属性とSTL属性の両方を格納する単一のヘッダである。例えば、いくつかの実施形態では、オーバーレイヘッダは、1つ以上のTLVにSMDおよびSTL属性を格納するGeneveヘッダである。
【0056】
[0095] 上述したように、いくつかの実施形態におけるSMD属性は、SCI値、SPI値、SI値、およびサービス方向を含む。また、いくつかの実施形態では、STL属性は、オリジナルL2送信元MACアドレス、オリジナルL2宛先MACアドレス、データメッセージ方向、および送信元GVMのサービスプレーン送信元MACアドレスを含む。いくつかの実施形態では、サービス方向およびサービスプレーン送信元MACアドレスは、すでにSMD属性の一部である。いくつかの実施形態でのサービストランスポートレイヤは、サービスパスの終わりに元のデータメッセージとその後を再作成するため、データパスに沿って戻るようにデータメッセージを元のホストに戻すために、処理された各データメッセージと共にこれらの属性を必要とする。
【0057】
[0096] カプセル化されたデータメッセージがネクストホップのホストコンピュータで受信されると、データメッセージは、前ホップのVTEPからデータメッセージを受信したVTEPに接続するソフトウェアスイッチのダウンリンクポートのカプセル化(encap)プロセッサ628によってキャプチャされる。このカプセル化プロセッサは、データメッセージからカプセル化ヘッダを除去し、STL属性とSMD属性をデータメッセージの属性のセットとして格納する。その後、カプセル解除されたメッセージをダウンリンクポートに渡し、ソフトウェアスイッチに渡してネクストホップのスイッチポートに転送する。そこから、データメッセージは、前述のように、サービスノードに到達する前に、STLモジュールとサービスプロキシによって処理される。
【0058】
[0097] サービスプロキシがデクリメントされたSI値がゼロであると判断すると、サービスプロキシはデクリメントされたSI 値と埋め込みSPI値を照合し、ネクストホップを送信元GVMのサービスプレーンMACアドレスとして識別するようにサービスプロキシに指示するルールを使用する。いくつかの実施形態では、この判定は、転送テーブルの転送エントリによって指定されず、むしろサービスプロキシのロジックにハードコーディングされる。したがって、SI値がゼロであるとき、プロキシは、データメッセージをGVMのホストコンピュータに転送するために使用するために、送信元GVMのサービスプレーンMACアドレスを、その関連するSTLモジュール626に提供する。次に、STLモジュールは、メッセージの送信先MAC(DMAC)アドレスを送信元GVMのサービスプレーンMACアドレスとして定義し、一方、メッセージの送信元MAC(SMAC)アドレスをそのサービスノードに関連付けられたサービスプレーンMACアドレスとして定義する(たとえば、サービスノードに関連付けられたソフトウェアスイッチのポートのサービスプレーンMAC)。また、データメッセージのオリジナルのSMACとDMACをデータメッセージの属性セットに格納する。
【0059】
[0098] STLモジュールは、定式化されたデータメッセージとその属性を出口パスに沿って渡し、そこで関連するソフトウェアスイッチポートに到達する。その後、ソフトウェアスイッチはこのメッセージをアップリンクポートに渡す。次に、このポートのカプセル化プロセッサ628は、このデータメッセージを捕捉し、このデータメッセージのカプセル化オーバーレイヘッダを定義し、このオーバーレイヘッダでデータメッセージをカプセル化する。前述したように、このオーバーレイヘッダは、1つ以上のTLVにSMDおよびSTL属性を格納するGeneveヘッダである。このカプセル化されたデータメッセージは、次にオーバーレイネットワークを通過して送信元GVMのホストコンピュータに到達し、そこでこのデータメッセージはダウンリンクポートのカプセル化プロセッサによりカプセル解除され、その後ソフトウェアスイッチに提供され、その後ポートプロキシに転送される。
【0060】
[0099] ポートプロキシ620は、カプセル解除されたデータメッセージを受信すると、カプセル解除されたデータメッセージの記憶された属性の一部となっているオリジナルの宛先MACアドレスから、このデータメッセージに関連するGVMを識別する。いくつかの実施形態では、ポートプロキシは、受信データのSMD属性におけるオリジナルの送信元MACアドレスとサービス方向を、そのホスト上のGVM(例えば、ゲスト転送プレーンと関連付けられたソフトウェアスイッチポートとそのホスト上のGVM)にマッピングするレコードを有する。次に、ポートプロキシは、オリジナルのSMACとDMACを含むようにデータメッセージを定式化し、データメッセージを送信元GVMのIOチェーンに戻す。次に、このIOチェーン内のSIポストプロセッサ612は、このデータメッセージを処理してから、このデータメッセージをGVMの出口データパスに戻す。このポストプロセッサの動作については、以下にさらに説明する。
【0061】
[00100] 当業者は、他の実施形態におけるサービス挿入レイヤおよびサービストランスポートレイヤが、上述の例示的な実施形態とは異なるように実装されることを認識するであろう。例えば、異なるサービスホップを横断するためにMACアドレスに依存するL2オーバーレイ(L2トランスポートレイヤ)を使用する代わりに、他の実施形態は、L3および/またはL4ネットワークアドレスを使用して連続するサービスホップを識別するL3オーバーレイ(L3トランスポートレイヤ)を使用する。また、上記のサービス挿入および/またはトランスポートモジュールは、異なった動作をするように構成されることができる。
【0062】
[00101] サービス挿入レイヤおよびサービストランスポートレイヤの動作のより詳細な例を、図7-19を参照して説明する。図7は、いくつかの実施形態のSIプリプロセッサ610およびSTL呼出元624によって実行される処理700を示す。このプロセスは、図8に示されているデータフローの例を参照することによって以下に説明される。プロセス700は、SIプリプロセッサ610が呼び出されて、GVMの入口または出口データパスに沿って送信されるデータメッセージを分析するときに開始される。
【0063】
[00102] 図に示すように、処理700は、最初に、(705において)プリプロセッサ610がデータメッセージのフローのためのサービスチェーンおよびサービスパスを事前に選択し、選択されたサービスチェーンおよびパスのためのSMD属性を記憶しているか否かを判定する。いくつかの実施形態では、処理700は、データメッセージの属性(例えば、その5つのタプル属性)を使用して、サービスチェーンとパスが以前に選択されたメッセージフローのレコードを格納する接続トラッカーでメッセージのフローのレコードを識別しようとすることによって、この判定を行い、SMD属性は、接続トラッカーレコードでこれらのチェーンとパスに対して以前に格納される。
【0064】
[00103] 図8は、プリプロセッサ610がGVM 102の出口データパスに沿ってデータメッセージ802を受信する様子を示す。また、受信したデータメッセージの属性のセット(例えば、5つのタプル属性)に一致するフロー識別子(例えば、5つのタプル識別子)を有する接続レコードを見つけようとするために、プリプロセッサが最初に接続追跡記憶装置804をチェックすることを示す。この例では、受信されたデータメッセージがそのフローのための最初のデータメッセージであるため、プリプロセッサ610はそのような接続レコードを見つけることができない。
【0065】
[00104] 処理700が、(705において)接続記憶装置804が、受信されたデータメッセージと一致する接続レコードを有することを判定すると、処理は、このレコードから、または一致する接続レコードによって参照される別のレコードからSMD属性を検索する(710において)。いくつかの実施形態におけるSMD属性は、SCI、SPI、SIおよび方向値を含む。710から、プロセスは、後述する740に遷移する。
【0066】
[00105] 一方、処理700が(705において)、接続記憶装置804が、受信されたデータメッセージと一致する接続レコードを持たないことを判定すると、処理は、図8に記憶装置806として示されているSIルール記憶装置内のサービス挿入ルールにデータメッセージを一致させようとする分類動作を(715において)実行する。いくつかの実施形態において、SIルール記憶装置806は、1つ以上のデータメッセージフロー属性(例えば、5つのタプル属性の1つ以上またはそれらの部分)に関して定義されたルール識別子を有するサービス挿入ルール822を記憶する。各サービスルールは、サービスルールのルール識別子に一致するデータメッセージフローに適用可能なサービスチェーンを識別するSCIも指定する。
【0067】
[00106] 720において、プロセスは、分類動作がデータメッセージの属性と、データメッセージ上で実行されるサービスチェーンを必要とするサービス挿入ルールのルール識別子とが一致するか否かを判定する。分類動作が、データメッセージに対してサービスチェーンを実行することを要求するサービス挿入ルールを識別しない場合、処理700は終了する。いくつかの実施形態では、SIルール保管806は、データメッセージの属性が任意のより高い優先度SIルールに一致しないときに、任意のデータメッセージに一致するデフォルトの低優先度ルールを有し、このデフォルトの低優先度ルールは、データメッセージのフローに対してサービスチェーンが定義されていないことを指定する。データメッセージフローに対してサービス動作を実行する必要がない場合、いくつかの実施形態では、データメッセージフローに対してサービスチェーンは定義されない。
【0068】
[00107] 一方、分類動作が、データメッセージ上でサービスチェーンを実行することを要求するサービス挿入ルールのルール識別子にデータメッセージの属性が一致する場合、処理700は、(725)パス選択動作を実行して、715で識別されるサービス挿入ルールによって指定されるサービスチェーンのサービスパスを選択する。図8に示すように、プリプロセッサ610は、サービスチェーン識別子ごとに1つ以上のサービスパスを識別するパス記憶テーブル808を調べることによって、パス選択動作を実行する。
【0069】
[00108] 各サービスパスは、そのSPI値で指定される。サービスチェーンに複数のサービスパスが指定されている場合、パス記憶装置808は、利用可能なSPIから1つのSPIを選択するための一連の選択指標820をサービスチェーンごとに格納する。様々な実施形態は、異なる選択指標を使用する。例えば、いくつかの実施形態は、サービスパスのサービスノードが実行されるホストの数に基づいてサービスパスをコストとする選択指標を使用する。他の実施形態では、これらの選択指標は、これらの重み値によって向けられるロードバランシングの態様で、プリプロセッサがサービスチェーンのSPIを選択することを可能にする重み値である。例えば、いくつかの実施形態では、これらの重み値は、サービスパス内のサービスノードのそれぞれの負荷に基づいて、および/または他のコスト(サービスパスによって横断されるホストの数など)に基づいて、中央制御プレーンによって生成される。
【0070】
[00109] これらの実施形態のいくつかでは、プリプロセッサは、特定のサービスチェーンに対して行った以前の選択のレコードを維持し、これらの以前の選択に基づいて後続のサービスパスを選択する。たとえば、4つのサービスパスの場合、重み値は1、2、2、1となる。これは、サービスチェーンに対して6回連続してSPIを選択する場合、最初のSPIを1回選択し、次に2番目と3番目のSPIをそれぞれ2回選択し、4番目のSPIを1つ選択することを特定する。このサービスチェーンの次のSPI選択では、選択メカニズムがラウンドロビンであるため、最初のSPIが選択される。
【0071】
[00110] 他の実施形態では、重み値は、数値範囲(例えば、ハッシュ値の範囲)に関連付けられ、データメッセージフローを数値範囲およびそれによってその関連SPIにマッピングするために、各データメッセージフローに対してランダムにまたは決定論的に生成される。さらに他の実施形態では、ホストLCPは、利用可能なサービスパスのプールから各サービスチェーン識別子に対して1つのサービスパスを選択し、そのため、各SCIに対して1つのSPIのみをパステーブル808に格納する。これらの実施形態におけるLCPは、コスト(各サービスパスによって横断されるホストの数および/またはサービスパスのサービスノード上の負荷など)に基づいて、各サービスチェーンのサービスパスを選択する。
【0072】
[00111] 識別されたサービスチェーンについてのサービスパスを識別した後、プロセス700は次に、選択されたサービスパスの最初のホップのためのネットワークアドレスを(730において)識別する。いくつかの実施形態では、このホップのためのMACアドレスは、選択されたパスのSPIと同じレコードに格納される。したがって、これらの実施形態では、このMACアドレスは、選択されたSPIと共にパス選択記憶装置808から取り出される。他の実施形態では、プリプロセッサは、図8に示すように、SPI/SI値の関連するペアのネクストホップネットワークアドレスを格納する完全一致転送テーブル810からファーストホップのMACアドレスを取り出す。いくつかの実施形態では、サービスチェーンの初期SI値は、SIルール記憶装置806のSIルールに格納され、一方、他の実施形態では、これらの最初のSI値は、そのパステーブル808内のSPI値と共に格納される。
【0073】
[00112] 735において、処理700は、データメッセージのSMD属性を指定し、これらの属性をデータメッセージに関連付ける。上述したように、SMD属性は、いくつかの実施形態では、SCI、SPI、SIおよび方向値を含む。サービスパスのサービス方向は、サービスチェーンを通る方向がサービスパスに依存するので、パステーブル808内のSPI値と共に格納される。また、以下に述べるように、いくつかの実施形態におけるサービスチェーンは、第1のGVMから第2のGVMへのデータメッセージに対して順方向に実行され、次いで、第2のGVMから第1のGVMへのデータメッセージに対して逆方向に実行されなければならない。このようなサービスチェーンの場合、プリプロセッサ610は、第1のGVMから第2のGVMへのフロー内の最初のデータメッセージを処理するときに、順方向のサービスパスと逆方向のサービスパスの両方を選択する。
【0074】
[00113] SIプリプロセッサがその動作を完了した後、ポートプロキシがサービスプレーンを介して最初のホップにSMD属性を転送できるように、STLポートプロキシ620は、同じデータパス内のSTL呼出元624が、SMD属性と、プリプロセッサが識別した最初のホップのネットワークアドレスとを中継する(740において)。サービス挿入レイヤおよびサービストランスポートレイヤにおけるポートプロキシ620および他のモジュールの動作は、図9-19を参照して説明される。これらの図は、SVM106、次にSVM108、次にSVM110を含むサービスパスを介してGVM102からのデータメッセージを処理する例を説明する。
【0075】
[00114] これらの図では、各GVMはマルチテナントデータセンタのテナントのコンピューティングマシンであり、テナントのゲストVNI (GVNI)に関連付けられたスイッチポートを介してソフトウェアスイッチに接続する。また、これらの図では、各SVMは、GVMメッセージトラフィックを処理するためのサービスマシンであり、テナントのサービスVNI (SVNI)に関連付けられたスイッチポートを介してソフトウェアスイッチに接続されている。上記および以下にさらに説明するように、いくつかの実施形態は、テナントのためのサービス論理転送動作(すなわち、サービス論理転送要素、例えば、論理スイッチまたはルーター、またはサービス論理ネットワークを確立するため)を実行するためにSVNIを使用しながら、テナントのためのゲスト論理転送動作(すなわち、ゲスト論理転送要素、例えば、論理スイッチまたはルーター、またはゲスト論理ネットワークを確立するため)を実行するためにGVNIを使用する。
【0076】
[00115] これらの論理ネットワーク識別子(すなわち、GVNIおよびSVNI)の両方は、いくつかの実施形態において、管理プレーンまたは制御プレーンによってテナントのために生成される。いくつかの実施形態の管理または制御プレーンは、異なるテナントに対して異なるGVNIおよびSVNIを生成し、2つのテナントが同じGVNIまたはSVNIを持たないようにする。いくつかの実施形態では、各SVMは、1つのテナント専用であり、一方、他の実施形態では、1つのSVMは、複数のテナントによって使用され得る。マルチテナントの状況では、各SVMは、テナントごとに異なるサービスプレーンの異なるポート(異なる論理スイッチなど)に接続できる。
【0077】
[00116] 図9に示すように、ポートプロキシ620は、データメッセージ内のオリジナルの送信元および宛先MACアドレスを、送信元GVM102および第1ホップサービスノードのMACアドレスに関連付けられたサービスプレーンMACアドレスに置き換えることによって、第1のサービスノードに転送するためのデータメッセージを定式化する。この動作は、図10のプロセス1000における動作1005として描かれている。このプロセス1000は、SIモジュール(SIプリプロセッサ610またはSIプロキシ614など)がデータメッセージを処理するときに、ポートプロキシ620またはSTLモジュール626が必ず開始するプロセスである。
【0078】
[00117] このプロセス1000では、ポートプロキシは、同じホストコンピュータ上の他のサービストランスポートレイヤモジュール(例えば、vswitch、他のSTLモジュール、カプセル化プロセッサなど)によって処理されるべきデータメッセージのための属性のセットに、データメッセージのオリジナルの送信元および宛先MACアドレスも(1010において)追加する。再定式化されたデータメッセージ902および拡張属性セット904は、図9に描かれている。
【0079】
[00118] データメッセージを再定式化し、その属性セットを増強した後、ポートプロキシ620は、定式化されたデータメッセージを、その格納された属性セットと共に、ソフトウェアスイッチ120に到達する出口パスに沿って(1015において)渡す。定式化されたデータメッセージの宛先MACアドレス(例:ファーストホップMACアドレス)に基づいて、ソフトウェアスイッチは(1020で)ネクストホップのポートがローカルかどうかを判定する。これは、図9に示す例の場合であるため、ソフトウェアスイッチは(1025で)データメッセージを第1ホップのSVM106に関連付けられたスイッチポートに配信する。次に、このポートは、SVMの入口パスに沿ってデータメッセージを送信し、図9に示すように、データメッセージ902とその拡張属性セット904は、第1ホップのSVMの入口IOチェーンの関数呼び出しを通じてSTLモジュール626によって識別される。
【0080】
[00119] 次に、このSTLモジュール626は、GVMのサービスプレーンMACアドレスおよび第1ホップMACアドレス(すなわち、SVM106のMACアドレス)を、拡張属性セット904から取得するデータメッセージの元の送信元および宛先MACアドレスに置き換えることによって、データメッセージを(1030において)再定式化する。オリジナルのSMACおよびDMACアドレスを検索する際に、STLモジュール626は、データメッセージの属性セットを変更する。再定式化されたデータメッセージ906および修正された属性セット908は、図9に描かれている。STLモジュールは、次に、この再定式化されたデータメッセージを、それに付随するSMD属性と共に、SVMの入口パスに沿って渡し、これは、このホップの入口サービスプロキシ614によって次に処理される。
【0081】
[00120] 図11は、サービスプロキシ614が、サービスノードの入口パスに沿って横断するデータメッセージを受信するたびに、いくつかの実施形態において実行する処理1100を示す。図に示すように、サービスプロキシは、必要に応じて、最初に(1105において)データメッセージのコピーを作成する。例えば、いくつかの実施形態では、サービスノードは、その動作を実行するためにデータメッセージのコピーを受信するだけでよい。このようなサービスノードの一例は、メッセージ監視またはミラーリング動作のためにデータメッセージコピーを取得する必要がある監視SVMを提供する。
【0082】
[00121] これらの実施形態では、サービスプロキシは、データメッセージをコピーし、このコピーに関して残りの操作1110~1125を実行する一方で、元のデータメッセージを次のサービスホップに渡すか、または送信元GVMに戻す。元のデータメッセージをネクストサービスホップに転送するか、GVMに戻すには、サービスプロキシは、SPI/SI値に基づいてネクストホップルックアップを実行し、次に転送するSTLモジュールにネクストホップアドレス(たとえば、ネクストサービスホップのアドレスまたは送信元GVMのサービスプレーンMAC)を提供する必要がある。これらのルックアップおよび転送動作は、図15-17を参照して後述するものと同様である。
【0083】
[00122] 次に、1110において、サービスプロキシは、データメッセージの記憶されたSMD属性セット(いくつかの実施形態では、この時点でのデータメッセージコピーであってもよい)にライブネス属性を設定する。このライブネス属性は、データメッセージを処理した後に、応答ライブネス値(同じ値または関連する値)をデータメッセージとともに提供するようにサービスノードに指示する値である。このライブネス属性を使用すると、サービスプロキシはシーケンス番号も提供する。サービスノードは、前述のように、応答性のあるライブネス値を使用して、サービスノードを戻すか、インクリメントしてから戻る必要がある。
【0084】
[00123] 1115において、サービスプロキシは、必要に応じて、データメッセージを定式化して、サービスノードによって処理可能な形式にする。例えば、サービスノードがデータメッセージの宛先MACとして設定されている現在のネクストホップMACを知らない場合、サービスプロキシはメッセージの宛先MACをサービスノードに関連付けられた宛先MACに変更する。
【0085】
[00124] サービスノードに転送するためにデータメッセージをサニタイズするように定式化した後、サービスプロキシ614は、使用するように構成できる3つのカプセル化ヘッダのうちの1つでデータメッセージを(1120において)カプセル化し、サービスノードの入口パスに沿ってカプセル化されたメッセージを(1125において)サービスノードに転送できるように通過させる。図9は、サービスプロキシからネイティブNSHカプセル化ヘッダを使用してSVM106に渡されるカプセル化されたデータメッセージ920を示す。図に示すように、カプセル化ヘッダ922は、サービスチェーン識別子、サービスインデックス、サービスチェーン方向およびライブネス信号を含む。
【0086】
[00125] 図12は、(1)NSHをサポートするサービスノードのネイティブNSHカプセル化ヘッダ1205、(2)NSHをサポートしないレガシーサービスノードのGREカプセル化ヘッダ1210、(3)NSHをサポートしないレガシーサービスノードのQinQカプセル化ヘッダ1215である、いくつかの実施形態の3つのカプセル化ヘッダを図示する。ネイティブNSHヘッダは、サービスメタデータを、図21および図22を参照して以下に記述されるフォーマットで格納する。GREヘッダフォーマットについては、図25-26を参照して以下でさらに説明する。GREとQinQの両方のフォーマットでは、サービスメタデータの一部はGREとQinQヘッダフィールドに格納されるが、サービスメタデータはネイティブNSHヘッダに格納されているほど豊富に格納することはできない。QinQヘッダは、あまりサービスメタデータを必要としない単純なレガシーサービスノードに使用される。たとえば、単にサービスチェーン識別子とサービス方向、またはサービスチェーン識別子とサービスインデックスを必要とするだけである。このサービスメタデータは、QinQヘッダのVLANヘッダフィールドに格納される。
【0087】
[00126] 図12は、カプセル化ヘッダ1205、1210、1215の3つの異なるタイプに加えて、いくつかの実施形態のSVMのvmxnet3準仮想化(paravirtualized)NIC1240も示す。図に示すように、このネットワークインタフェースカードは、カプセル化されたデータメッセージを、SVMのDPDKドライバ1204のポーリングモードドライバ1202、または割り込みモードドライバ1204に提供することができる。具体的には、vmxnet3準仮想化ネットワークインタフェースカードは、SVM内部でどのドライバが使用されているかに応じて、異なる動作モードで動作するように構成されることができる。ポーリングモードドライバ1202は、DPDK(データプレーン開発キット)ドライバ1206のバックエンドとして見ることができる。ポーリングモードドライバは、データメッセージを取得するためにVNICを定期的にポーリングし、一方、VNICは割り込みを生成して、割り込みベースドライバ1204にデータメッセージを取得させる。
【0088】
[00127] ポーリングモードドライバは、データメッセージをDPDKドライバ1206に渡し、その後、フローが最初に受信されると、それをユーザ空間内のメッセージ処理モジュールに渡す。一方、割り込みベースのドライバ1204は、カーネル内またはユーザ空間内のいずれかで、データメッセージをメッセージ処理モジュール1212に提供する。次に、SVMのメッセージ処理モジュールは、カプセル化されたデータメッセージをカプセル解除し、SVMのサービス動作を実行する。いくつかの実施形態では、異なるSVMは、データメッセージで受信するSCI、SIおよびサービス方向値に基づいて異なるサービス動作を実行する。
【0089】
[00128] 図13は、サービスプロキシから処理するデータメッセージを受信するたびにSVMがいくつかの実施形態で実行する1つの例示的なプロセス1300を示す。他の実施形態では、SVMは、SCI、SIおよびサービス方向値を異なる方法で使用して、その動作を実行することができる。示されるように、処理100は、最初に(1305において)カプセル化ヘッダを除去し、そこからSCI、SI、方向およびライブネスパラメータを取得する。次に、プロセスは、サービスマネージャから受信した(1310での)マッピングレコードを使用して、SCI、SI、および方向の値をサービスプロファイルにマッピングし、次に(1315で)このサービスプロファイルをそのルールセットの1つにマッピングし、次にそれを調べて、処理する1つ以上のサービスルールを識別する(1320で)。
【0090】
[00129] 図14は、SVMの第1のマッピングテーブル1405を示す。図に示すように、このテーブルの各レコードは、SCI、SI、および方向の値をサービスプロファイルにマップする。この図は、SVMの第2のマッピングテーブル1410も示しており、このテーブルは、サービスプロファイルを、サービスルールテーブル1415内のいくつかのルールを識別するルールセット識別子にマッピングする。図14に示すように、いくつかの実施形態のサービス挿入マネージャは、第1のテーブル1405のレコードを提供し(例えば、SIネットワークマネージャは、SVMのサービスマネージャにこれらのレコードを提供し、SVMはSVMにそれらのレコードを提供する)、一方、SVMのサービスマネージャは、第2および第3のテーブル1410および1415のレコードを提供する。いくつかの実施形態では、これら2つのサービスマネージャは、2つの異なるエンティティ、例えば、データセンタ管理者とサードパーティ管理者、またはテナント管理者とデータセンタ管理者によって管理される2つの異なる管理プレーンである。
【0091】
[00130] いくつかの実施形態では、サービスルールテーブル145内の各サービスルール1420は、データメッセージ属性(例えば、5つのタプル属性)に関して定義されるルール識別子を有する。SVMは、(1320で)ルールの識別子をデータメッセージの属性と比較して、一致するルールを識別する。1つ以上の一致ルールを識別すると、いくつかの実施形態のSVMは、最高優先度の一致ルールによって指定されたアクションを(1325において)実行する。たとえば、ファイアウォールSVMは、データメッセージの通過を許可するか、ドロップするか、またはリダイレクトするかを指定できる。
【0092】
[00131] SVMがサービス動作を完了すると、SVMはデータメッセージをカプセル化ヘッダで(1330で)カプセル化する。これは、サービス動作によってデータメッセージがドロップされないことを前提としている。このカプセル化ヘッダは、SVMが受信したデータメッセージと同じ形式(NSHヘッダ、GREヘッダ、QinQヘッダなど)である。このカプセル化ヘッダでは、いくつかの実施形態のSVMは、(1)サービスプロキシのライブネス値に応答するライブネス値と(2)ライブネス値の適切なシーケンス番号(例えば、調整されていないか、またはインクリメントされたシーケンス番号)を設定する。
【0093】
[00132] いくつかの実施形態では、一部のサービスノードは、それらが受信するSI値をデクリメントするように構成され、一方、他のサービスノードはSI値をデクリメントするように構成されない。サービスノードがSI値をデクリメントするように設定されている場合、1330でカプセル化ヘッダにデクリメントされたSI値を挿入する前に、SI値をデクリメントする。いくつかの実施形態におけるSVMはまた、カプセル化ヘッダにSMD属性(SCI、SIおよびサービス方向)を設定するが、他の実施形態では、出口パスにおけるサービスプロキシは、データメッセージをSVMに渡す前にサービスプロキシが作成した以前のレコードからこれらの値を取得する。
【0094】
[00133] いくつかの実施形態では、SVMはまた、カプセル化ヘッダにフロープログラム属性を設定して、データメッセージのフローのサービス処理を変更するようにサービスプロキシに指示することができる。この流れプログラムについては、以下にさらに説明する。データメッセージをカプセル化した後、SVMはその出口パスに沿ってデータメッセージを転送する。図15は、SVM106がカプセル化されたデータメッセージ1502を、そのカプセル化ヘッダ1504内のSMDおよびライブネス属性と共に返す例を示す。
【0095】
[00134] 図16は、サービスプロキシ614が、そのサービスノードの出口パスに沿って横断するデータメッセージを受信するたびに、いくつかの実施形態において実行する処理1600を示す。示されているように、いくつかの実施形態におけるサービスプロキシは、最初に(1605において)データメッセージからカプセル化ヘッダを除去し、このヘッダからSMD属性を除去し、データメッセージのために作成する属性セットにこれらの属性を格納する。いくつかの実施形態では、サービスプロキシは、データメッセージを入口パスに沿ってサービスノードに与える前にサービスプロキシが作成した以前のレコードから、SMD属性の一部または全部(例えば、SPI値、送信元GVMのサービスプレーンMACアドレス)を(1605において)取得する。図15は、サービスプロキシ614がカプセル解除されたデータメッセージ1507に対して作成する属性セット1506の例を示す。
【0096】
[00135] 次に、1610のプロセスは、サービスノードから受信したライブネス値を考慮して保持するライブネスタイマー(例えば、0.25秒ごとに期限切れになるタイマー)をリセットする。これは、このノードがまだ動作可能であることを意味する。このライブネス値を使用すると、サービスプロキシはサービスノードからシーケンス番号を受信する。このシーケンス番号は、受信する必要がある次のライブネス値であることを確認するためにプロセスによって検証される。
【0097】
[00136] 1615で、プロセスは、SVMが任意のフロープログラム属性を指定したかどうかを判定する。この属性は、送信元GVMがフロープログラムを実行するために、サービスプロキシがSIポストプロセッサ612にインバンドデータメッセージをポストプロセッサ612に送信することを要求する。いくつかの実施形態では、サービスプロキシは、送信元GVMに送り返すために生成する別のデータメッセージと共に帯域内フロープログラミング制御信号を送信し、そこでポストプロセッサ612によって傍受される。
【0098】
[00137] 送信元GVMがフロープログラミング制御信号と共にデータメッセージを受信すると、そのポストプロセッサは、このフローに固有のフロー識別子を使用することによって、適用先のデータメッセージフローを一意に識別することができる。以下でさらに説明するように、このフロー識別子は、送信元GVMの一意の識別子に部分的に基づいて導出される。一意のフロー識別子により、サービスノード、サービスプロキシ、STLモジュールなどの他のサービスプレーンモジュールも、各データメッセージフローを一意に識別できる。いくつかの実施形態におけるこのユニークなフロー識別子は、サービスパスのサービスホップ間で渡され、送信元GVMに戻されるSMD属性の一部である。
【0099】
[00138] しかしながら、いくつかの実施形態では、サービスプロキシは、処理中の現在のデータメッセージと共に帯域内フロープログラミング制御信号を送信する。これらの実施形態のいくつかでは、サービスプロキシは、その関連サービスノードがサービスパスの最終ホップのサービスノードである場合にのみこれを行い、一方、他の実施形態では、そのサービスノードが最終ホップのサービスノードでない場合でもこれを行う。サービスノードがサービスパスの最終ホップのサービスノードでないとき、サービスプロキシはデータメッセージのSMD属性にフロープログラムを埋め込み、これは、いくつかの実施形態では、最終ホップのサービスが実行されるとき、データメッセージカプセル化ヘッダの一部として最終的に送信元GVMのSIポストプロセッサに転送される。この状況でも、他の実施形態における最終ホップのサービスプロキシは、フロープログラミング信号を別個のメッセージとして送信する。
【0100】
[00139] フロープログラム信号については、図20を参照して以下にさらに説明する。また、以下にさらに説明するように、サービスプロキシは、送信元GVMの分類器が現在のデータメッセージフローと同様に他のデータメッセージフローのために別のサービスパスを選択できるように、サービスノードが故障したことを検出したときに、フロープログラム信号を送信元GVMに送り返す。このような状況では、サービスプロキシはホストコンピュータ上のLCP にも通知するため、LCP はCCP に通知でき、CCP は障害が発生したサービスノードを使用するサービスチェーンに指定されたサービスパスを変更できる。
【0101】
[00140] 1620において、処理1600は、そのサービスノードがデータメッセージをドロップすべきであると指定したか否かを決定する。その場合、プロセスはデータメッセージをドロップしてから終了する。さもなければ、データメッセージはドロップされるべきではなく、そのサービスパスに沿って継続すべきであると仮定すると、いくつかの実施形態では、サービスプロキシは、サービスノードがSI値をデクリメントしていない場合にSI値を(1625において)デクリメントし、次いで、(1630において)このデクリメントされた値をデータメッセージの記憶された属性セット内のSPI値と共に使用して、ネクストホップネットワークアドレスを識別する完全一致転送ルールを識別する。プロキシのサービスノードが複数のサービスパスにある場合、プロキシの転送ルール記憶装置には、異なるSPI/SI値に異なるネクストホップネットワークアドレスを指定できる複数の完全一致転送ルールが格納される。
【0102】
[00141] 減少したSI値がゼロであるとき、いくつかの実施形態では、サービスプロキシは、減少したSI値と、サービスプロキシに送信元GVMのサービスプレーンMACアドレスとしてネクストホップを識別するように指示するルールをもつ埋め込みSPI値とを照合する。いくつかの実施形態におけるこのルールは、MACアドレスを提供せず、むしろ、データメッセージのために記憶されたSMD属性セットの一部であるサービスプレーンMACアドレスを参照する。いくつかの実施形態では、SI値がゼロであるときにデータメッセージを送信元GVMのサービスプレーンMACアドレスに戻すためのこの命令は、転送テーブルの転送エントリによって指定されず、むしろサービスプロキシのロジックにハードコーディングされる。
【0103】
[00142] 1630において、サービスプロキシは、データメッセージのために格納される属性セットにネクストホップネットワークアドレス(例えば、MACアドレス)を格納する。図15は、カプセル解除されたデータメッセージ1507のアトリビュートセット1506内の次のサービスノードに関連するネクストホップMACアドレスを記憶するサービスプロキシ614の例を示す。ネクストホップネットワークアドレスを識別した後、サービスプロキシはそのサービスノードの出口パスにデータメッセージを(1635において)返し、処理1600は終了する。
【0104】
[00143] サービスプロキシがデータメッセージをサービスノードの出口パスに戻すと、STLモジュール626はこのデータメッセージを受信し、図10のプロセス1000を開始する。STLモジュール626は、サービス挿入レイヤからデータメッセージを受信するたびに、このプロセスの最初の3つの動作1005~1015を実行する。具体的には、STLモジュールは、データメッセージ内の元の送信元および宛先MACアドレスを、現在のサービスホップおよびネクストサービスホップのサービスプレーンMACアドレス(すなわち、図15に示される例ではhop1macおよびhop2macアドレス)に置き換えることによって、ネクストホップサービスノードに転送するためのデータメッセージを(1005において)定式化する。
【0105】
[00144] 1010において、STLモジュールは、同じホストコンピュータ上の他のサービストランスポートレイヤモジュール(例えば、vswitch、カプセル化プロセッサ等)によって処理されるべきデータメッセージのための属性のセットに、データメッセージの元の(original)送信元および宛先MACアドレスも追加する。再定式化されたデータメッセージ1508および拡張属性セット1510は、図15に描かれている。データメッセージを再定式化し、その属性セットを拡張した後、STLモジュール626は、出口パスに沿って定式化されたデータメッセージを(1015において)通過させ、そこで次にソフトウェアスイッチ120に到達する。
【0106】
[00145] 定式化されたデータメッセージの宛先MACアドレス(すなわち、ネクストホップMACアドレス)に基づいて、ソフトウェアスイッチは、(1020において)ネクストホップのポートがローカルでないことを決定する。したがって、ソフトウェアスイッチは、図15の例に示すように、ホスト114上のVTEP2とオーバーレイネットワークトンネルを介して通信するVTEP1に接続するアップリンクポート1550にデータメッセージを(1035で)提供し、このアップリンクポート(1040で)の出口パスに沿うSTLカプセル化プロセッサ628は、このデータメッセージを受信し(例えば、アップリンクポートに指定されたフックの1つとして呼び出される)、このデータメッセージのためのカプセル化オーバーレイヘッダ1540を定義し、このオーバーレイヘッダでデータメッセージをカプセル化する。
【0107】
[00146] いくつかの実施形態では、オーバーレイヘッダは、SMDおよびSTL属性をその1つ以上のTLVに格納するGeneveヘッダである。上述したように、いくつかの実施形態におけるSMD属性は、SCI値、SPI値、SI値、およびサービス方向を含む。また、いくつかの実施形態では、STL属性は、オリジナルのL2送信元MACアドレスとオリジナルのL2宛先MACアドレスを含む。図15は、このカプセル化ヘッダの例を示しており、これについては、図28を参照して以下でさらに説明する。
【0108】
[00147] カプセル化されたデータメッセージがネクストホップのホストコンピュータ114で受信されると、データメッセージは、オーバーレイネットワークトンネルを介して前ホップのVTEPに接続するVTEPに接続するダウンリンクポート1552のSTLカプセル化プロセッサ628によってキャプチャされる(例えば、フックとして定義される)。図17は、コンピュータ上で実行されるSVMによって処理される必要があるカプセル化されたデータメッセージを受信するネクストホップコンピュータ上のカプセル化プロセッサ628によって開始されるプロセス1700を示す。
【0109】
[00148] 図に示すように、このカプセル化プロセッサは、(1705において)カプセル化ヘッダをデータメッセージから除去し、(1705において)STLおよびSMD属性をデータメッセージの関連する属性セットとして格納する。次に、カプセル解除されたメッセージをダウンリンクポートに(1710で)渡し、それからソフトウェアスイッチに渡して(1715で)、ネクストホップSVMに接続されているポート(つまり、宛先MACアドレスに関連付けられているポート)に転送する。次に、このポートは、SVM108の図15の例に示すように、データメッセージ1508と属性セット1510をネクストホップSVMの入口パスに渡す。
【0110】
[00149] 次に、この入口パス上のSTLモジュール626は、前および現在のホップサービスプレーンMACアドレス(すなわち、hop1macおよびhop2mac)を、データメッセージ属性セットから取得するデータメッセージの元の送信元および宛先MACアドレスに置き換えることによって、データメッセージを(1720において)再定式化する。オリジナルのSMACおよびDMACアドレスを検索する際に、STLモジュール626は、データメッセージの属性セットを変更する。再定式化されたデータメッセージ1530および修正された属性セット1532は、図15に描かれている。次に、STLモジュールは、この再定式化されたデータメッセージを、それに付随するSMD属性と共に、SVMの入口パスに沿って渡し、そこで、このホップの入口サービスプロキシ614によって次に処理される。
【0111】
[00150] このサービスプロキシの動作は、図9および図11を参照して上述したようになる。図15は、カプセル化されたデータメッセージをSVMに渡すホスト114上のSVM108のサービスプロキシを示す。このデータメッセージのカプセル化ヘッダは、SVM108によってサポートされ、SCI、SI、サービス方向およびライブネス値を格納する。いくつかの実施形態では、同じサービスパスの一部であるSVMは、異なるカプセル化ヘッダをサポートする。これらの実施形態のいくつかでは、サービスパスに沿ったサービスプロキシは、データメッセージをそれらの関連SVMに渡す前に、異なるカプセル化ヘッダでデータメッセージをカプセル化することができる。たとえば、1つのケースでは、最初のホップサービスプロキシはNSHカプセル化ヘッダを含むデータメッセージをSVM106に渡し、2番目ホップサービスプロキシはQinQカプセル化ヘッダを含むデータメッセージをSVM108に渡す。
【0112】
[00151] SVM108がデータメッセージ(図13のプロセス1300など)に対してサービス動作を実行すると、SVMは、図18に示すように、処理されたデータメッセージを出口データパスに沿って送信する。次に、サービスプロキシは、次のサービスホップのMACアドレスを識別し、このMACアドレスをデータメッセージに設定されている保存済み属性に追加する。この時点で、ネクストホップは3番目のサービスホップで、SVM110に対応する。このプロキシは、SI値をデクリメントして(SVM108がSI値をデクリメントしなかった場合)、次に埋め込まれたSPI値とデクリメントしたSI値を使用して、ネクストホップのMACアドレスを提供する転送ルールを検索することによって、このMACを識別する。次に、この出口パス内のSTLモジュールは、データメッセージ内のオリジナルのSMACおよびDMACを現在のホップおよびネクストホップMACアドレス(すなわち、図18の例ではhop2macおよびhop3mac)に置き換え、オリジナルのSMACおよびDMACをデータメッセージの格納された属性セットに格納し、その後、ソフトウェアスイッチ122によって受信される出口パスに沿ってデータメッセージを渡す。
【0113】
[00152] 次に、ソフトウェアスイッチは、ネクストホップがそのアップリンクポート1552に関連付けられていると判断し、データメッセージをこのポートに渡す。図18に示すように、このポートの出口パス上のカプセル化プロセッサ628は、次いで、SMDおよびSTL属性を1つ以上のTLVに格納するGeneveヘッダと共にデータメッセージをカプセル化し、データメッセージが、ホスト116のポート1554に関連するこのポートの関連するVTEP2からVTEP3へ横断することを指定する。
【0114】
[00153] 次に、ポート1554の入口パス内のSTLカプセル化プロセッサ628は、データメッセージからカプセル化ヘッダを除去し、STLおよびSMD属性をデータメッセージの関連する属性セットとして格納する。次に、カプセル解除されたメッセージをポート1554に渡し、その後、それをソフトウェアスイッチ124に渡して、ネクストホップSVM 110に接続されているそのポート(すなわち、サービスプレーンDMACに関連付けられているそのポート)に転送する。次に、このポートは、図18に示すように、このSVMの入口パスに設定されたデータメッセージと属性を渡す。
【0115】
[00154] この入口パスのSTLモジュール626は、前および現在のホップサービスプレーンMACアドレス(すなわち、hop2macおよびhop3mac)を、データメッセージ属性セットから取得するデータメッセージの元の送信元および宛先MACアドレスに置き換える。STLモジュール626はまた、元のSMACおよびDMACアドレスを除去することによってデータメッセージの属性セットを修正し、次いで、このホップの入口サービスプロキシ614が処理するために、SVMの入口パスに沿って、その付随するSMD属性と共に再定式化されたデータメッセージを渡す。このサービスプロキシは、SVM110によってサポートされるカプセル化ヘッダを持ち、SCI、SI、サービス方向、およびライブネス値を格納したカプセル化されたデータメッセージをSVM110に渡す。
【0116】
[00155] SVM110がこのデータメッセージに対してサービス動作を実行すると(例:図13のプロセス1300ごと)、SVMは、図19に示すように、その出口データパスに沿って処理されたデータメッセージを送信する。サービスプロキシは、SVM110がまだ実行していないと仮定した場合、SI値をデクリメントする。この例では、デクリメントされたSI値はゼロになる。いくつかの実施形態では、サービスプロキシは、次いで、このSI値とSPI値とを、送信元GVMのサービスプレーンMAC (spmac)をネクストホップMACアドレスとして選択すべきであることを指定する転送ルールのルール識別子と照合する。他の実施形態では、サービスプロキシのハードコードされたロジックは、送信元GVMのサービスプレーンMACをネクストホップMACとして識別するようにそれに向ける。いずれの場合も、サービスプロキシは送信元GVM のサービスプレーンMAC をデータメッセージの属性セットに追加する。
【0117】
[00156] STLモジュールは、次に、データメッセージ内のオリジナルのSMACおよびDMACを、第3ホップMACアドレスおよび送信元GVMのサービスプレーンMACで置き換え、オリジナルのSMACおよびDMACをデータメッセージの格納された属性セットに格納し、その後、そのデータメッセージをそのソフトウェアスイッチ124に渡す。次に、ソフトウェアスイッチは、ネクストホップがそのポート1554に関連付けられていると判断し、データメッセージをこのポートに渡す。図19に示すように、このポートの出口パス上のカプセル化プロセッサ628は、次に、SMDおよびSTL属性を1つ以上のTLVに格納するGeneveヘッダでデータメッセージをカプセル化し、データメッセージが、ホスト112のポート1550に関連付けられているこのポートの関連するVTEP3からVTEP1に通過することを指定する。
【0118】
[00157] 次に、ポート1550の入口パス内のSTLカプセル化プロセッサ628は、データメッセージからカプセル化ヘッダを除去し、STLおよびSMD属性をデータメッセージの関連する属性セットとして格納する。次に、カプセル解除されたメッセージをポート1550に渡し、その後、それをソフトウェアスイッチ120に渡して、ポートプロキシ620に接続されたそのポートに転送する。次に、このポートは、図19に示すように、データメッセージと属性セットをポートプロキシ620に渡す。
【0119】
[00158] 次に、ポートプロキシ620は、前および現在のホップサービスプレーンMACアドレス(すなわち、hop3macおよびspmac)を、データメッセージの元の送信元および宛先MACアドレスに置き換え、これは、データメッセージ属性セットから取得する。また、ポートプロキシ620は、データメッセージの属性セットを修正して、オリジナルのSMACおよびDMACを除去し、その後、この再定式化されたデータメッセージを、それに付随するSMD属性と共に、最初にそれを呼び出したSTL呼出元624に戻す。いくつかの実施形態では、ポートプロキシは、STL呼出元が最初にそれを呼び出したときに作成した接続レコードを使用して、コールバックするSTL呼出元を識別する。他の実施形態では、ポートプロキシは、各サービスプレーンMACをGVMのSTL呼出元とマップするマッピングテーブルを使用する。いくつかの実施形態におけるマッピングテーブルは、サービスプレーンMACおよびサービス方向を、GVMに関連するゲスト転送プレーンポート識別子に関連付けるレコードを有する。
【0120】
[00159] 一旦呼び出されると、STL呼出元はデータメッセージをGVM 102の出口パスに沿って渡し、そこで次にSIポストプロセッサ612に転送される。図20は、いくつかの実施形態においてSIポストプロセッサ612が実行する処理2000を示す。ポストプロセッサは、GVMのIOチェーンに沿って渡されるデータメッセージを受信するたびに、この処理2000を実行する。図示のように、いくつかの実施形態におけるポストプロセッサ612は、最初に、SIポスト処理のために受信データメッセージを検査する必要があるかどうかを(2005で)判定する。これは、GVMのIOチェーンに沿ったモジュールとして、ポストプロセッサがこのIOチェーンを通過するすべてのデータメッセージフローに対して呼び出され、これらのデータメッセージの一部が、それらに対してサービス挿入操作を実行する必要があるSIルールと一致しない可能性があるためである。いくつかの実施形態では、プロセス2000は、データメッセージが関連するサービスメタデータを有するか否かを決定することによって、データメッセージを処理する必要があるか否かを(2005で)決定する。そうでない場合、プロセスは2020に遷移し、以下で説明する。
【0121】
[00160] SIポストプロセッサ612がデータメッセージを処理する必要があると判断すると、プロセスは、データメッセージに関連するSMDメタデータがフロープログラミング動作を実行することをポストプロセッサに要求するフロープログラムタグを指定するかどうかを(2010で)判定する。いくつかの実施形態では、このようなフロープログラムタグは、送信元GVMでのサービスパス処理を変更するためにサービスノードによって、またはサービスノードの障害を検出したときと同じ理由のためにサービスプロキシによって、データメッセージのSMD属性で指定されるであろう。フロープログラムタグがフロープログラムを指定しない場合、プロセスは以下で説明する2020に遷移する。
【0122】
[00161] そうでない場合、フロープログラムタグがフロープログラミング動作を指定すると、処理2000はこの動作を実行した後、2020に遷移する。フロープログラミング動作は、いくつかの実施形態において、コネクション追跡記憶装置804内のコネクションレコードを修正して、データメッセージのフローに対する所望の動作および/またはSMD属性(例えば、許可、ドロップなど)を指定することを伴う。接続トラッカー804へのポストプロセッサの書き込みは、図19に示されている。上述し、さらに後述するように、処理されたデータメッセージのためのSMDメタデータは、送信元GVMの一意のサービスプレーン識別子から少なくとも部分的に導出されることによってデータメッセージのフローを一意に識別するフロー識別子を含む。ポストプロセッサ612は、このフロー識別子を使用して、いくつかの実施形態における接続トラッカーにおけるデータメッセージのフローを照合する。
【0123】
[00162] いくつかの実施形態では、フロープログラムタグは、次の動作、(1)アクションが不要な場合(フロープログラム操作が実行されない)に何もしない(NONE)、(2)このフローのそれ以上のデータメッセージがサービスチェーンに沿って転送されず、代わりに送信元GVMでドロップされる必要がある場合にドロップする(DROP)、(3)このフローのそれ以上のデータメッセージがサービスチェーンに沿って転送されず、代わりにフローが送信元GVMで受け入れられる必要がある場合、アクセプトする(ACCEPT)ことを指定することができる。いくつかの実施形態では、フロープログラムはDROP_MESSAGEを指定することもできる。DROP_MESSAGEは、サービスノードがプロキシと通信する必要があり(ping 要求に応答する場合など)、送信元でのフロープログラムが必要ないにもかかわらず、ユーザーデータメッセージ(存在する場合)をドロップする必要がある場合に使用される。
【0124】
[00163] いくつかの実施形態では、サービスプロキシがSVMの障害を内部的に通信するために、追加のアクションが利用可能である。この動作は、いくつかの実施形態では、SIポストプロセッサに、データメッセージのフローのための別のサービスパス(例えば、別のSPI)を選択するように指示する。いくつかの実施形態におけるこのアクションは、いくつかの実施形態における適切なメタデータフィールドを設定することによって、ユーザデータメッセージと共にバンド内で運ばれる。たとえば、以下でさらに説明するように、サービスプロキシは、データプレーンを介した帯域内データメッセージトラフィックを介して、NSH属性のOAM(Operation, Administration, and Maintenance)メタデータを介して送信元GVMのポストプロセッサと通信する。設計フロープログラムアクションが信号遅延の影響を受け、損失の対象となることを考慮すると、SVMまたはサービスプロキシは、フロープログラムアクションをプロキシに通信した後、しばらくの間、送信元でドロップ、アクセプト、またはリダイレクトされると予測されるフローに属するデータメッセージを引き続き表示する場合がある。この場合、サービスプレーンは、送信元でドロップ、許可、またはリダイレクトするアクションを引き続き設定する必要がある。
【0125】
[00164] 処理2000は、フロープログラミング動作完了後、2020に遷移する。また、(2005で)データメッセージに対してSIポスト処理を実行する必要がないと判断するか、このデータメッセージに対してフロープログラムを実行する必要がないと判断すると、2020に移行する。2020では、処理2000は、データメッセージをGVM102の出口パスを通過させてから、終了する。
【0126】
[00165] 図8、9、15、18、および19を参照して前述した例は、送信元GVMの出口パスに沿って識別されるデータメッセージ上で実行されるサービスプレーン動作を示す。これらのサービスプレーン動作(図7、10-14、16、17、および20を参照して説明)は、送信元GVMの入口パスに沿って通過すると識別されるデータメッセージにも同様に適用可能である。これらの入口側動作を実行するために、入口パス上のSIプリプロセッサおよびポストプロセッサ610および612は、出口パス上のこれら2つのプロセッサの位置と比較して反転される。具体的には、図6に示すように、プリプロセッサ610は、このGVMのVNICに関連するソフトウェアスイッチポートからGVMの入口パスに入るデータメッセージを受信する一方、ポストプロセッサ612は、入口IOチェーンに沿って処理されたデータメッセージをGVMのVNICに渡す。
【0127】
[00166] しかしながら、入口側処理のためのサービス挿入とサービス転送動作は、特定のGVMとの間のデータメッセージの出口側処理に類似している。場合によっては、このGVMは別のGVMとデータメッセージを交換する。図4および5を参照して上述したように、サービスプレーンは、各方向のデータメッセージ上で同じサービスチェーンを実行するように向けることができるが、逆の順序で行うことができる。このような場合、入口側のサービスパスのサービスノードは、他のGVMが特定のGVM に送信するデータメッセージのサービスチェーンの第1の方向に対して一連のサービス動作を実行する。一方、出口側のサービスパスのサービスノードは、同じ一連のサービス動作を実行するが、サービスチェーンを介して反対の第2の方向に実行する。また、上述したように、順方向および逆方向のためのサービスノードの2つのセットは、いくつかの実施形態において同じサービスノードを含む。
【0128】
[00167] いくつかの実施形態で使用されるヘッダフォーマットは、次に、図21、22、および25~28を参照して説明される。図21は、いくつかの実施形態におけるサービスプロキシのいくつかが、データメッセージをそれらの関連するサービスノードに提供する前にデータメッセージをカプセル化するために使用するNSHヘッダ2100を示す。これらの実施形態のいくつかでは、サービスノードは、このようなNSHヘッダでカプセル化された処理されたデータメッセージを返す。いくつかの実施形態では、NSHヘッダは、ホストコンピュータのサービスプレーンモジュールによって、二重にカプセル化されたデータメッセージを他のホストコンピュータに転送するためにも使用され、第1のカプセル化ヘッダはNSHヘッダであり、第2のカプセル化ヘッダはサービストランスポートヘッダである。しかしながら、他の実施形態では、サービス挿入およびサービストランスポート属性は、後述するように、1つのカプセル化ヘッダに配置される。また、上記および以下にさらに説明するように、いくつかの実施形態におけるサービスプロキシおよびサービスノードは、それらが交換するデータメッセージをカプセル化するためにNSHヘッダを使用しない。
【0129】
[00168] 示されているように、NSHヘッダの最初の8バイトのすべてのフィールドは、RFC 8300に準拠して使用される。このヘッダは、いくつかの実施形態では、固定長メタデータコンテンツヘッダ2110を含む。また、いくつかの実施形態では、(1)1にセットされるMDタイプ、(2)イーサネット通信を示すために3である次のプロトコル値、および(3)MDコンテンツヘッダ2110が固定長であるために6であるレングス値を含む。また、いくつかの実施形態では、SPIおよびSIフィールド2122および2124は、送信元GVMのプリプロセッサ610がそれを定義するときの初期SI値(すなわち、サービスホップの初期数)である、選択されたパスのサービスパス識別子および現在のサービスインデックス値で埋められる。
【0130】
[00169] いくつかの実施形態では、サービス挿入モジュールは、データメッセージと共に運ばれるNSHヘッダを除き、メタデータを記憶またはキャッシュメモリしない。このモデルでは、サービスノードは変更する予定のないメタデータフィールドを保持する。いくつかの実施形態では、特定のメタデータフィールドは、サービスプロキシ/ノードと送信元GVMのサービスモジュールとの間のデータプレーン仲介シグナリングのための通信メカニズムとして使用される。いくつかの実施形態では、データメッセージメタデータは、NSH固定長コンテキストヘッダ2110において、線上で符号化される。いくつかの実施形態では、この固定サイズのヘッダは、合計16バイトの情報を提供する。いくつかの実施形態では、各サービス挿入配置は、独自のMDコンテンツフォーマットを自由に定義することができる。
【0131】
[00170] 図22は、サービスホップ、サービスノード、および/またはサービスプロキシにサービスメタデータを送信するために、いくつかの実施形態においてMDコンテンツヘッダ2110に格納されるメタデータコンテンツの例を示す。示されているように、このヘッダには、多数のフィールドを含む16バイトがある。1つのフィールド2202は、Fビットを含み、これは、MDコンテンツヘッダ内のコンテンツのタイプ、例えば、サービスメタデータコンテンツ、フロープログラムコンテンツなどを区別するために使用される。いくつかの実施形態では、サービスメタデータコンテンツのFビットはb00である。別のフィールド2204は、Pビットを格納し、これを1にセットして、サービスノードによるデータメッセージへの応答を強制することができる。いくつかの実施形態では、応答は、Pビットも1にセットされた要求と同じシーケンス番号を含むNSHヘッダを伴わなければならない。
【0132】
[00171] 送信元ノード識別子(ID)フィールド2206は、サービスプレーンについて、データメッセージの送信元またはシンクであるデータ計算ノード(例えば、GVM)を明確に識別する。いくつかの実施形態では、送信元ノードIDは、データメッセージがサービスプレーンに挿入されたこの送信元データ計算ノード(DCN)のサービスプレーンMACアドレスを含む。MDコンテンツヘッダはまた、ライブネス検出の目的のためにデータメッセージを識別する不透明な6ビット値であるシーケンス番号2208を含む。この値は、サービスプロキシが、そのライブネス検出の一部としてそのサービスノードにデータメッセージを転送する前にいっぱいになった場合を除き、通常ゼロである。
【0133】
[00172] MD コンテンツヘッダには、マルチテナントデータセンタのテナントを一意に識別するテナントID2212も含まれている。いくつかの実施形態におけるテナントIDは、テナントに関連するVNIである。MDコンテンツヘッダ2200は、さらに、フローID2215およびフローID有効ビット2222を含む。いくつかの実施形態では、フローIDの残りの部分(フロータグとも呼ばれる)が存在するとき、フローID有効性ビットは1に設定される。フローID2215は、フローおよび送信元DCN毎に(すなわち、フローおよび送信元ノードID 2206毎に)固有の識別子である。いくつかの実施形態では、フローIDは、送信元DCNの分類器(例えば、分類動作を実行するSIプリプロセッサ610)によって設定される。
【0134】
[00173] いくつかの実施形態では、フローIDは、データメッセージがネイティブモードでない(すなわち、サービスがサービスプレーンを認識していない)サービスを横断するときに破棄されてもよい。この場合、以下で説明する互換モードヘッダでフローID を運ぶのに十分なビットがない場合、フローID は破棄される。また、フローIDは、ネイティブサービス(すなわち、サービスプレーン認識サービスノード)がフローIDを無意味にする方法でデータメッセージを修正するとき、例えば、サービスが複数のフローから単一のIPsecトンネルへのトラフィックを暗号化するとき、に破棄される可能性がある。この場合、内部データメッセージのフロータグを保持しても意味がない。いくつかの実施形態では、サービスノードは、この場合、Aビットをゼロに設定する。
【0135】
[00174] MDコンテンツヘッダ2200はまた、サービスプロキシによるフロープログラムに使用されるアクションフィールド2230を含む。いくつかの実施形態では、アクションは、送信元DCNのポストプロセッサ612がフロー上で実行すべきアクションを指定する。フロープログラムの場合、いくつかの実施形態では、アクションフィールドは非ゼロでなければならない。さらに、フロープログラムのために、Fビット2202も10にセットされ、Pビット2204はプロキシで0にセットされ、分類器によって無視され、フロー有効性ビット2222およびフロータグ2215が有効でなければならない。
【0136】
[00175] 以下は、アクションフィールド2230の値の1つの例示的なセットであるが、当業者は、他の実施形態では他の値が指定されていることを認識するであろう。アクションビットの値0は、フロープログラミングアクションが指定されないことを指定する。値1 は、データメッセージのフローのすべてのメッセージが送信元でドロップされる必要があり、このフローのそれ以上のデータメッセージはサービスプレーンに転送されないことを示す。代わりに、データメッセージは分類後に送信元でドロップする必要がある。
【0137】
[00176] アクションフィールドの値2は、データメッセージが送信元で受け入れられ、いくつかの実施形態では、同じフローのそれ以上のデータメッセージはサービス機能に転送されないことを指定する。代わりに、サービス関数をスキップし、チェーン内の次のサービスを直接呼び出す必要がある。アクションフィールドの値3は、このデータメッセージのみをドロップすることを指定し、同じフローの他のデータメッセージに対して実行する必要があるアクションを示すものではない。いくつかの実施形態では、このアクションは、サービスノードがサービスプロキシと通信し(例えば、ping要求に応答するため)、フロープログラムが起こるべきではないにもかかわらず、データメッセージがドロップされることを望むときに使用される。
【0138】
[00177] MDコンテンツヘッダ2200はまた、送信元DCNからネットワークの観点へのデータメッセージの方向を指定する方向フィールド2214を含む(例えば、DCNからネットワークへの方向は出口方向であり、ネットワークからDCNへの方向は入口方向である)。方向フィールドの値0は、方向が不明でない場合に方向または不明な方向を示す。いくつかの実施形態では、値1は、データメッセージが入口方向に移動している(すなわち、データメッセージは、データメッセージの宛先である送信元DCNのために処理されている)ことを示し、例えば、データメッセージは、VTEPからその対応するDCNへのその途中にある。いくつかの実施形態における値2は、出口方向を示す(例えば、データメッセージは、データメッセージの送信元である送信元DCNに対して処理されている)。
【0139】
[00178] いくつかの実施形態では、値3は、データメッセージが単に転送中であり、入口と出口の両方に適用されることを示す。ルールを定義するために使用される場合、これは、いくつかの実施形態において、ルールが一方向または任意の方向のデータメッセージに一致する必要があることを示す。サービスの観点から、方向フィールドの値3は、このトラフィックが、いくつかの実施形態において、このトラフィックを供給することも同期することもない中継装置によってサービスプレーンに転送されたことを示す。いくつかの実施形態では、通過指示は、ルータを通過しているトラフィックに使用される。
【0140】
[00179] MDコンテンツヘッダ2200は、さらに、データメッセージが流れるべきサービスチェーンを指定するサービスチェーンID2216を含む。いくつかの実施形態は、SCIをNSHヘッダに埋め込まず、代わりにSPI値を格納するだけである。しかしながら、多くのSPIは同じサービスチェーンに対応することができ、SPIも永続的ではないので、他の実施形態は、SCIをファイル2216に格納する。言い換えると、いくつかの実施形態は、サービスチェーンIDを埋め込むが、これは、SCIが、サービスノードが、それらが処理するデータメッセージに一致するサービスルールを識別するために使用する、より安定した識別子をサービスノードに提供するためである。
【0141】
[00180] いくつかの実施形態では、サービスプロキシと送信元DCNのサービスポストプロセッサとの間でデータプレーンシグナリングを実行するために、サービスノードにさらされることなく、サービスプレーンによって内部的に他のメタデータコンテンツフォーマットが使用される。これらの実施形態のいくつかでは、他のメタデータコンテンツフォーマットが使用されるとき、NSHヘッダのOAMビット(図21のOビット2170)がセットされ、ユーザペイロードは運ばれない(または、NSHによって必要とされるものがあれば、宛先では無視される)。いくつかの実施形態では、NSH次のプロトコルフィールドは、この場合0に設定される。
【0142】
[00181] いくつかの実施形態では、サービスプレーン非認識サービスノードは、サービスノードと通信するためにサービスプロキシによって使用される非NSHヘッダのタイプに依存して、メタデータのサブセットのみを受信する。前述したように、いくつかの実施形態のサービスノードは、サービスノードがNSHヘッダを処理できない場合に、GREヘッダまたはQinQヘッダでサービスメタデータを受信できる。GREおよびQinQヘッダは、一部の既存のサービスノードがサポートするヘッダであるため、以下では互換モードヘッダと呼ぶ。このような互換モードカプセル化ヘッダは、異なるサービス処理の対象となるデータメッセージフローを区別し、競合するL3アドレスを持つフローを分離するために(単一のサービスノードが複数のテナントネットワークのような複数のネットワークのデータメッセージ上でサービスを実行する場合)、いくつかの実施形態で必要とされる。
【0143】
[00182] いくつかの実施形態では、GRE互換モードのサービスノードは、2つのVNICを介してそのサービスプロキシに接続し、bump-in-the-wireモードで設定される。また、いくつかの実施形態では、VNICはvmxnet3デバイスであり、それらのMACアドレスは変化せず、それらのために使用されるMTUサイズは固定サイズ(例えば、2048バイト)に設定される。サービスノードの1つのVNICは、送信側トラフィックを受信し、送信元DCNの入口側トラフィックを供給するための保護されていない側として定義され、もう1つのVNICは、入口側トラフィックを受信し、送信元DCNの出口側トラフィックを供給するための保護されている側として定義される。いくつかの実施形態では、この情報は、OVF(Open Virtual Format)パラメータを介してサービスマネージャまたはサービスノードに伝えられ、ここでOVFは、製品およびプラットフォーム間での仮想アプライアンスの交換をサポートするファイルフォーマットである。
【0144】
[00183] bump-in-the-wireモードをサポートするために2つのVNICが存在する場合でも、いくつかの実施形態では、互換モードVNICのペアごとに1つのサービスプロキシインスタンスのみを使用し、インターフェースのペアを参照するためにサービスプレーンで1つのエンドポイントのみを使用する。図23および24は、GREヘッダをカプセル化したGVM2315のSVM2310出口側および入口側データメッセージに転送するサービスプロキシ2305の例を示す。これを行うために、サービスプロキシはSVM 2310の保護および非保護VNIC用にいくつかの仮想GREトンネルエンドポイント2320を作成する。
【0145】
[00184] 保護された各仮想トンネルエンドポイントには、対応する保護されていない仮想トンネルエンドポイントがある。各仮想トンネルエンドポイントは、仮想IPアドレス、仮想MACアドレス、およびGREパラメータに関連付けられる。サービスプロキシは、GREヘッダを持つデータメッセージをカプセル化して、サービスノードを介してエンドポイントの対応するペア間を移動する。このノードは、GREヘッダを変更しないbump-in-the-wireモードで動作する。以下でさらに説明するように、サービスプロキシはGREヘッダにサービスメタデータを埋め込み、サービスノードにデータメッセージを処理するために必要なサービスメタデータを提供する。また、いくつかの実施形態では、異なるトンネル端点の対が異なるフローに対して使用される。
【0146】
[00185] いくつかの実施形態では、サービス挿入プラットフォームは、RFC2784で定義されているGREカプセル化を、RFC2890で定義されている鍵拡張と共にサポートする。いくつかの実施形態では、GREトンネルはIPv4アドレスを使用し、GREプロトコルタイプはRFC1701に従ってトランスペアレントイーサネットブリッジングに設定される。GRE互換モードでは、サービス挿入レイヤ(例えば、サービスプロキシ)はフローごとにタプル(例えば、送信元IP、宛先IP、GRE鍵)を生成する。いくつかの実施形態では、このプロセスは決定論的であり、SMDヘッダの内容に基づいており、SMDヘッダは、次いで、除去され、IPおよびGREスタックに置き換えられてもよい。いくつかの実施形態では、このプロセスによって生成されるIPアドレスは仮想であり、サービスプロキシとその関連SVM以外のいかなるネットワークエンティティにも設定されず、その結果、それらの範囲はサービスプロキシとそのサービスノードとの間のローカルリンクに制限される。
【0147】
[00186] サービスノードがGREをサポートしていない場合でも、データメッセージとともにメタデータを伝送するために、IPアドレスとGRE鍵が生成される。いくつかの実施形態では、サービスノードとサービスプロキシの両方が、そのメタデータを消費する。さらに、サービスノードは、いくつかの実施形態において、変更なしに、外部ヘッダをそのまま保持することが期待される。いくつかの実施形態では、各フローは、同一のGREトンネル内に一貫してカプセル化され、トンネル内にIPアドレスの競合がない可能性がある。また、方向(入口と出口)だけが異なるデータメッセージは、スワップされた送信元IPと宛先IPを持つ同じGRE鍵でカプセル化され、適切な(保護されていない、または保護されていない)方向でGREトンネルエンドポイントを通過する。
【0148】
[00187] いくつかの実施形態では、送信元/宛先IPアドレス、およびGRE鍵は、適切なデータメッセージ処理を実行するために、必要に応じてサービスノードによって検査することができる。図25と26は、送信元と宛先のIPアドレスとGRE鍵フィールドの代わりに、サービスメタデータがGREカプセル化ヘッダでどのようにエンコードされるかを示す。図25は、出口方向(例えば、GVMからスイッチへ)のサービスデータを記憶するためにいくつかの実施形態で使用されるGREヘッダフォーマットを示し、一方、図26は、入口方向(例えば、ソフトウェアスイッチから送信元GVMへ)のサービスデータを記憶するためにいくつかの実施形態で使用されるGREヘッダフォーマットを示す。
【0149】
[00188] これらの図では、すべてのフィールドがネットワークバイト順である。パスIDは、いくつかの実施形態において、サービスパスと共に生成され、サービス毎のグローバル値を有する。図25および26に示すように、IPアドレスフィールドは、いくつかの実施形態において、出口側および入口側データメッセージに対して逆転される。ネイティブモードと同様に、GRE互換モードのサービスプレーンは、サービスプロキシに到達したときに有効なカプセル化がある限り、任意のトラフィックを変更または生成できる。いくつかの実施形態では、これは、サービスノードが関連するフローのために受信したIPおよびGREスタックのうちの1つを再利用することを意味する。
【0150】
[00189] いくつかの実施形態では、サービスチェーンに沿ったフロータグ情報は、最初のGRE互換モードサービスに入るときに破棄され、下流に復元されない。これにより、後続のサービスがフローアクションを宣言できなくなる可能性がある。したがって、フロープログラムは、いくつかの実施形態のGRE互換モードのサービスノードには提供されない。更に、ライブネス検出は、信頼されたインターフェースと信頼されていないインターフェースとの間でBFD(双方向転送検出)メッセージを通過させることによって、いくつかの実施形態においてサポートされる。いくつかの実施形態では、これらのデータメッセージは、サービスプロキシによって信頼された側と信頼されない側から注入される。サービスノードは、GREにカプセル化されていないため、このトラフィックを認識できる。いくつかの実施形態では、サービスノードは、このトラフィック(および実際にはGREではないカプセル化トラフィック)を仮想ワイヤの反対側にブリッジすることによって変更されずに転送することが期待される。また、いくつかの実施形態では、BFDの実インスタンスが利用できない場合、データメッセージをハードコーディングすることができる。
【0151】
[00190] いくつかの実施形態におけるスペース制約のために、特定のヘッダフィールドは要約されたバージョンで符号化される。いくつかの実施形態では、サービスチェーンタグ、SPIおよびSIは、単一の4ビットフィールドに要約される。したがって、いくつかの実施形態では、各互換モードのサービスノードは、最大16のサービスチェーンホップ上に存在することができる。サービスチェーン内にサービスが存在するたびに、1つのサービスパスID が消費される。サービスが複数のチェーンに存在する場合、複数のサービスパスIDが消費される。さらに、サービスチェーンの2 つの方向にサービスが存在するたびに、2 つのサービスパスID が消費される。
【0152】
[00191] いくつかの実施形態では、関連する外部ヘッダスタック(GREまで、およびそれを含む)が使用される限り、ローカルに生成されたトラフィックは、互換モードでサポートされる。いくつかの実施形態では、(1)オプションで外側のイーサネット宛先アドレスをブロードキャストに置き換えること、(2)IP合計サイズフィールドとIPチェックサムを更新すること、(3)GREチェックサムは無視されるが、GRE鍵が存在しなければならないこと、を除いて外部ヘッダスタックに対する修正は許されない。
【0153】
[00192] 図27および28は、少なくとも1つのサービスノード(例えば、あるホストコンピュータから)に関連する1つのVTEPから別のサービスノード(例えば、別のホストコンピュータ)に関連する別のVTEPにデータメッセージを送信するために、いくつかの実施形態で使用されるカプセル化ヘッダの例を示す。これらの例はどちらもGeneveカプセル化ヘッダで、1つ以上のGeneve TLVでサービスメタデータ(SMD メタデータなど)を伝送する。Geneve ヘッダは論理L2オーバーレイトランスポートをサポートし、サービスメタデータを伝送するための可変TLV空間を備えている。従って、異なるサービス挿入プラットフォームは、連続ホップ間で運ばれる異なる量のサービスメタデータを指定することができる。
【0154】
[00193] 図27は、2つのGeneveカプセル化ヘッダ、サービストランスポートレイヤデータを運ぶための外側のGeneveヘッダ2705、およびサービス挿入レイヤメタデータを運ぶための内側のGeneveヘッダ2710の使用を示す。図に示すように、サービスメタデータはSMD TLV2715に保存される。いくつかの実施形態では、このTLV 2715は、図21のNSHヘッダフォーマットを有する。したがって、このTLVは、サービスメタデータを上述のように固定長ヘッダ2110に格納し、SPIおよびSI値をヘッダ2100のSPIおよびSIフィールド2122および2124に格納する。
【0155】
[00194] 効率のために、いくつかの実施形態は、これらの2つのヘッダを図28の単一のGeneveヘッダ2805に結合する。これを行うために、これらの実施形態は、データメッセージのオリジナルの送信元および宛先MACアドレスを、現在および次のホップのサービスプレーンMACに置き換え、オリジナルの送信元および宛先MACを、サービス方向、送信元GVMのサービスプレーンMAC、および他のSMDメタデータ(サービスチェーン識別子、SPI値、SI値、フロープログラミング値、テナントタグ、フロータグなど)と共に、新しいGeneve TLVに格納する。いくつかの実施形態におけるこの新しいGeneve TLVは、24バイトのSMDメタデータフィールドと、オリジナルの送信元および宛先MACアドレスのようなSTLデータを格納するための12バイトとを有する。いくつかの実施形態において、12バイトのSTLデータは、24バイトのSMDメタデータに先行し、これは、いくつかの実施形態において図21および22に示されるメタデータを含む。
【0156】
[00195] 図27図28の両方の実装において、Geneveカプセル化ヘッダは、サービスプレーンのSVNIを格納し、これは、複数のサービスプレーンを定義することを可能にする。例えば、上述のように、いくつかの実施形態は、異なるSVNIを使用して、マルチエンティティまたはマルチテナントデータセンタ内の異なるエンティティまたはテナントに対して異なるサービスプレーンを定義する。異なるエンティティまたはテナントの異なるサービスプレーンを、エンティティまたはテナントのデータメッセージタイプの同じまたは異なるQoS および/またはSLA保証に関連付けることができる。他の実施形態は、同一のエンティティまたはテナントのための異なるサービスプレーン、例えば、同一のエンティティまたはテナントのための異なるデータメッセージタイプのための異なるQoSおよび/またはSLA保証に関連する異なるサービスプレーンに対して、複数のSVNIを使用する。また、両方のヘッダには、送信元および宛先VTEPのMACアドレスと、UDPおよびIPの送信元および宛先アドレスが格納される。
【0157】
[00196] 図29は、いくつかの実施形態のオブジェクトデータモデル2900を示す。このモデルでは、実線で表示されるオブジェクトはユーザによって提供され、破線で表示されるオブジェクトはサービスプレーンマネージャとコントローラによって生成される。示されるように、これらのオブジェクトは、サービスマネージャ2902、サービス2904、サービスプロファイル2906、ベンダーテンプレート2907、サービスアタッチメント2908、サービスインスタンス2910、サービス配置2913、サービスインスタンスランタイム(SIR)2912、インスタンスエンドポイント2914、インスタンスランタイムポート2916、サービスチェーン2918、サービス挿入ルール2920、サービスパス2922、およびサービスパスホップ2924を含む。
【0158】
[00197] いくつかの実施形態では、サービスマネージャオブジェクト2902は、サービスオブジェクト2904の作成の前または後に作成することができる。管理者またはサービス管理システムは、サービスマネージャAPIを呼び出してサービスマネージャを作成できる。サービスマネージャ2902は、任意の時点でサービスに関連付けることができる。いくつかの実施形態では、サービスマネージャ2902は、ベンダ名、ベンダ識別子、restUrl(コールバック用)および認証/証明書情報などのサービスマネージャ情報を含む。
【0159】
[00198] 上述したように、サービスプレーンは、サービスノードがゼロ認識モードで動作できる(すなわち、サービスプレーンをゼロ認識する)ため、サービスマネージャの存在または使用を必要としない。いくつかの実施形態では、ゼロ認識モードは、基本的な操作(例えば、サービスのSVMに向けてトラフィックをリダイレクトすること)のみを可能にする。このようないくつかの実施形態では、オブジェクト情報(サービスチェーン情報、サービスプロファイルなど)をサービスマネージャサーバに配布するための統合は提供されない。代わりに、これらのサーバーは、ネットワークマネージャーに関心のあるオブジェクトをポーリングすることができる。
【0160】
[00199] サービスオブジェクト2904は、サービスノードによって提供されるサービスのタイプを表す。サービスオブジェクトには、サービスメタデータを受信するための機構(NSH、GRE、QinQなど)を指定するトランスポートタイプ属性がある。また、各サービスオブジェクトには、サービスマネージャから返される状態属性(有効または無効にできる)と、イベントを通信してAPI コールを実行するためにREST APIエンドポイントを公開するために使用できるサービスマネージャへの参照がある。また、サービスのインスタンスのデプロイに使用されるOVA/OVF属性への参照も含まれる。
【0161】
[00200]ベンダテンプレートオブジェクト2907は、1つ以上のサービスプロファイルオブジェクト2906を含む。いくつかの実施形態では、サービスマネージャはベンダーテンプレートを登録することができ、サービスプロファイルは、サービスごとに、および潜在的に特殊化されたパラメータをもつベンダーテンプレートに基づいて定義することができる。サービスチェーンは、1つ以上のサービスプロファイルへの参照によって定義できる。いくつかの実施形態では、サービスプロファイルはタグを割り当てられず、回線上で明示的に識別されない。トラフィックに適用する機能を決定するために、サービスノードは、適用可能なサービスプロファイルを識別するためにルックアップを実行する(例えば、上記のように、サービスチェーン識別子、サービスインデックス、およびサービス方向に基づく)。このルックアップのマッピングは、サービスチェーンが変更されて作成されるたびに、管理プレーンによってサービスマネージャに提供される。
【0162】
[00201] いくつかの実施形態におけるサービスプロファイルオブジェクト2906は、(1)その関連するベンダーテンプレートを識別するためのベンダーテンプレート属性、(2)テンプレートがサービスプロファイルを通じて構成可能な値を公開するときに1つ以上のカスタム属性、および(3)サービスノードが最終ホップであるときに受信データメッセージを次のサービスホップに転送する間、または元の送信元GVMに戻すために、受信データメッセージのコピーをサービスノードに転送するか、またはサービスノードに転送するようにサービスプロキシに指示する、順方向アクションまたはコピーアンドリダイレクトなどのアクション属性、を含む。
【0163】
[00202] サービスアタッチメントオブジェクト2908は、サービスプレーンを表す(すなわち、マルチテナントデータセンタにおけるテナントのネットワーク管理者、またはプライベートデータセンタにおけるネットワーク管理者など、ユーザの視点のサービスプレーンの表現である)。このサービス接続オブジェクトは、サービスプレーンの任意の数の異なる実装(例えば、論理L2オーバーレイ、論理L3オーバーレイ、論理ネットワークオーバーレイなど)をサポートする抽象概念である。いくつかの実施形態では、サービスプレーンを介して通信する(SIRまたはGVM上の)各エンドポイントは、サービスアタッチメントを指定する。サービスアタッチメントは通信ドメインである。そのため、サービス添付外のサービスまたはGVM は、互いに通信できない場合がある。
【0164】
[00203] いくつかの実施形態では、サービスアタッチメントを使用して、それらの間にハードアイソレーションを有する複数のサービスプレーンを作成することができる。サービスアタッチメントは、以下の属性、(1)サービスアタッチメントのためのトラフィックを運ぶ論理ネットワークまたは論理転送要素を識別する論理識別子(例えば、論理スイッチのSVNI)、(2)サービスアタッチメントのタイプ(例えば、L2アタッチメント、L3アタッチメントなど)、および(3)サービスアタッチメントの範囲を指定するapplied_To識別子(例えば、ノース-サウス動作のためのトランスポートノード0とトランスポートノード1、およびイースト-ウェスト動作のためのクラスタまたはホストのセット)を有する。いくつかの実施形態では、制御プレーン(例えば、中央制御プレーン)は、管理プレーンから受信したサービスアタッチメント表現を、ネットワーク管理者(例えば、プライベートまたはパブリッククラウドのデータセンタ管理者、またはパブリッククラウドのネットワーク仮想化プロバイダ)によって指定されたパラメータに基づいて、特定のLFEまたは論理ネットワーク配置に変換する。
【0165】
[00204] サービスインスタンスオブジェクト2910は、サービスの実際にデプロイされたインスタンスを表す。したがって、このような各オブジェクトは、サービスオブジェクト2904とサービスインスタンスオブジェクト2910との間の関係を指定するサービス配置オブジェクト2913を介して、1つのサービスオブジェクト2904に関連付けられる。配置されたサービスインスタンスは、スタンドアロンサービスノード(スタンドアロンSVMなど)でも、高可用性(HA)サービスノードクラスタでもかまわない。いくつかの実施形態では、サービス配置オブジェクト2913は、サービスインスタンスタイプ、例えば、スタンドアロンまたはHAを記述する。以下に説明するように、サービス配置オブジェクトのAPIをいくつかの実施形態で使用して、サービスのいくつかのサービスインスタンスを配置することができる。
【0166】
[00205] サービスインスタンスランタイム(SIR)オブジェクト2912は、スタンドアロンモードで動作する実際のランタイムサービスノード、またはHAクラスタの実際のランタイムサービスノードを表す。いくつかの実施形態におけるサービスインスタンスオブジェクトは、以下の属性、(1)サービスインスタンスがスタンドアロンモード、アクティブ/スタンバイモード、またはアクティブ/アクティブモデルのいずれで動作しているかを指定する配置モード属性、(2)インスタンスが有効か無効かを指定する状態属性、および(3)ノース-サウス動作の場合にサービス添付識別子への参照を含むdeployed_to属性を含む。
【0167】
[00206] いくつかの実施形態では、SVMのプロビジョニングは手動で開始される。この目的のために、管理プレーンは、いくつかの実施形態において、(1)既存のサービスのサービスインスタンスを作成する、(2)サービスインスタンスを削除する、(3)SIRを追加することによってすでに高可用性クラスタとして構成されているサービスインスタンスを増やす、および(4)そのSIRの1つを削除することによってサービスインスタンスを縮小する、ためのAPIを提供する。既存のサービスのサービスインスタンスを作成するとき、サービスインスタンスは、いくつかの実施形態において、サービスに含まれるテンプレートに基づいて作成されてもよい。呼出元は、スタンドアロンインスタンスまたはHAクラスタの間で選択できる。この場合、HAクラスタ内のすべてのVMがプロビジョニングされる。ここでも、いくつかの実施形態では、サービスインスタンス配置のためのAPIは、複数のサービスインスタンス(例えば、HAクラスタのため)がただ1つのAPIコールを通して配置されることを可能にする。
【0168】
[00207] いくつかの実施形態では、1つ以上のSVMを作成するAPIは、SVMが配置されるべき1つ以上の論理的な位置(例えば、クラスタ、ホスト、リソースプール)を指定する。いくつかの実施形態では、管理プレーンは、可能な限り、同じサービスインスタンスに属するSVMを異なるホスト上に配置しようとする。非アフィニティルールは、移行イベント(VMware、Inc.の動的リソーススケジューラでサポートされるVMotionイベントなど)間でのSVMの分散を維持するために、適切に構成されることもできる。同様に、管理プレーンは、利用可能な場合は特定のホスト(またはホストのグループ)とのアフィニティルールを設定したり、サービスインスタンスをプロビジョニングするユーザがホストまたはクラスタを明示的に選択したりすることがある。
【0169】
[00208] 上述したように、サービスインスタンスランタイムオブジェクト2912は、サービスを実装するためにホスト上で実行される実際のSVMを表す。SIRはサービスインスタンスの一部である。各SIR には、サービスプレーントラフィック専用の1つ以上のトラフィックインターフェイスを含めることができる。いくつかの実施形態では、少なくとも1つのサービスプロキシインスタンスがSIR毎に実行され、SIRのためのデータプレーンシグナリングおよびデータメッセージフォーマット変換を必要に応じて処理する。サービスインスタンスが配置されると、いくつかの実施形態では、サービスインスタンスに関連付けられたすべてのSVMに対してSIRが作成される。ネットワークマネージャは、イースト-ウェストサービス挿入におけるすべてのサービスインスタンスのインスタンスエンドポイントも作成する。各SIRオブジェクト2912は、いくつかの実施形態において、以下の属性、(1)理由にかかわらず、トラフィックを処理することができるSVMに対してアクティブであり、他のすべてに対して非アクティブである状態属性、および(2)データプレーンのライブネス検出がSIRがアップまたはダウンしていることを検出するかどうかを指定するランタイム状態、を含む。
【0170】
[00209] インスタンスランタイムインターフェース2916は、サービスインスタンスエンドポイント2914のエンドポイントごとのバージョンである。いくつかの実施形態では、インスタンスランタイムインターフェース2916は、送信元またはシンクサービスプレーントラフィックであり得るSIRまたはGVMのためのインターフェースを識別するために使用される。イースト-ウェストサービス挿入では、いくつかの実施形態におけるインスタンスランタイムインタフェースのライフサイクルは、サービスインスタンス実行時のライフサイクルにリンクされる。いくつかの実施形態では、インスタンスランタイムインターフェースを構成するためにユーザアクションは必要ない。
【0171】
[00210] いくつかの実施形態において、インスタンス実行時インターフェース2916は、以下の属性、エンドポイント識別子、タイプ、サービスアタッチメントへの基準、および位置を有する。エンドポイント識別子は、SIR VNICのデータプレーン識別子である。エンドポイント識別子は、SIRまたはGVM がサービストランスポートレイヤに登録されるときに生成され、MACアドレスまたはMACアドレスの一部である場合がある。タイプ(type)属性は、共有または専用にすることができる。SIR VNICは専用であり、すなわち、サービスプレーントラフィックに到達できるのはサービスプレーントラフィックのみであるが、GVM VNICは共有される。つまり、サービスプレーントラフィックと通常のトラフィックの両方を送受信する。サービスアタッチメント基準は、サービスプレーントラフィックの送受信に使用されるサービスプレーンを実装するサービスアタッチメントへの基準である。いくつかの実施形態におけるこの基準は、サービスプレーンのSVNIに関するものである。いくつかの実施形態における位置(location)属性は、インスタンスランタイムインターフェースの位置を指定する。これは、インスタンスランタイムインターフェースが現在位置しているホストのUUIDである。
【0172】
[00211] いくつかの実施形態では、ユーザは、サービスプロファイル2906の順序付けられたリストに関して、サービスチェーンオブジェクト2918を定義する。いくつかの実施形態では、各サービスチェーンは、順方向および逆方向のトラフィック方向に対して、概念的に別々のパスを提供するが、作成時に一方向のみが提供される場合、もう一方は、サービスプロファイル順序を逆にすることによって自動的に生成される。サービスチェーンのどちらの方向(および両方向)も空にすることができる。つまり、どのサービスもその方向のトラフィックを処理しない。いくつかの実施形態では、データプレーンは、空のサービスチェーンに対してもルックアップを実行する。
【0173】
[00212] サービスチェーンは、抽象的な概念である。これらは、特定のサービスノードのセットを指していない。むしろ、サービスプレーンプラットフォームの一部であるネットワークコントローラは、サービスチェーンのサービスノードのシーケンスを指すサービスパスを自動的に生成し、生成されたサービスパスに沿ってメッセージ/フローを指示する。いくつかの実施形態では、サービスチェーンは、サービスチェーンの一意の識別子であるUUIDによって、管理プレーンまたは制御プレーンで識別される。サービスノードには、サービスマネージャを介して受信した管理プレーンAPIを介して、サービスチェーンIDの意味が提供される。この一例は、図14を参照して上述した。
【0174】
[00213] いくつかの実施形態におけるサービスチェーンタグは、UUIDが長すぎてカプセル化ヘッダにおいて運ばれないので、データプレーンにおけるサービスチェーンを識別するために使用されてもよい。いくつかの実施形態におけるサービスチェーンIDは、ルールIDのような符号なし整数である。サービスにリダイレクトされる各データメッセージは、トラバースしているサービスチェーンのサービスチェーンタグを伝送する。管理プレーンは、サービスチェーンが作成または変更されると、UUID をサービスチェーンタグマッピングにアドバタイズする。サービスチェーンタグには、サービスチェーンUUIDとの1対1のマッピングがあるが、1つのサービスチェーンには0から多数のサービスパスインデックスを含めることができる。
【0175】
[00214] サービスチェーンIDに加えて、いくつかの実施形態におけるサービスチェーンは、(1)すべての計算されたサービスパスへの基準、(2)障害ポリシー、および(3)サービスプロファイルへの基準、の属性を有する。計算されたサービスパスへの参照は、上述した。障害ポリシーは、サービスチェーンに対して選択されたサービスパスをトラバースできない場合に適用される。いくつかの実施形態では、障害ポリシーは、PASS(フォワードトラフィック)およびFAIL(ドロップトラフィック)であってもよい。サービスチェーンのサービスプロファイルへの参照は、出口トラフィック(例えば、GVMからスイッチに移動するデータメッセージ)が横断しなければならないサービスプロファイルの出口リストと、入口トラフィック(例えば、スイッチからGVMに移動するデータメッセージ)が横断しなければならないサービスプロファイルの入口リストを含んでもよい。いくつかの実施形態では、入口リストは、デフォルトで、出口リストの逆として初期化される。
【0176】
[00215] サービスチェーンのサービスパスを定義するために、いくつかの実施形態において異なる技法を使用することができる。例えば、いくつかの実施形態では、サービスチェーンは、関連する負荷分散戦略を有することができ、これは、以下の戦略のうちの1つであり得る。ロードバランシング戦略は、サービスチェーンの異なるサービスパス間でトラフィックをロードバランシングする役割を果たす。ANY戦略によると、サービスフレームワークは、負荷分散の考慮やフローのピンニングに関係なく、任意のサービスパスにトラフィックを自由にリダイレクトでくる。別の戦略は、ローカルサービスインスタンス(例えば、送信元GVMと同じホストコンピュータ上で実行されるSVM)がリモートサービスインスタンス(例えば、他のホストコンピュータや外部サービス装置上で実行されるSVM)よりも優先されることを規定するLOCAL戦略である。
【0177】
[00216] いくつかの実施形態は、ローカルであるSIRの数に基づいてサービスパスのスコアを生成し、負荷に関係なく最高スコアが選択される。別の戦略は、クラスタ戦略である。クラスタ戦略は、同じホスト上に共存するVMによって実装されるサービスインスタンスが優先されることを指定する。そのホストがローカルインスタンスであるか、別のホストであるかは関係ない。ROUND_ROBIN戦略は、すべてのアクティブなサービスパスが、同じ確率で、または一連の重み値で指定された確率に基づいてヒットするように指示する。
【0178】
[00217] SIルールオブジェクト2920は、データメッセージ属性のセットを、サービスチェーンオブジェクト2918によって表されるサービスチェーンに関連付ける。サービスチェーンは、1つ以上のサービスパスによって実装され、各サービスパスは、サービスパスオブジェクト2922によって定義される。各サービスパスは、1つ以上のサービスホップを有し、各ホップが1つのインスタンスランタイムインターフェース2916に関連付けられている1つ以上のサービスパスホップオブジェクト2924によって表される。また、各サービスホップは、いくつかの実施形態において、関連するサービスプロファイル、関連するサービスパス、およびネクストホップSIRエンドポイント識別子を参照する。
【0179】
[00218] いくつかの実施形態では、サービスパスオブジェクトは、いくつかの属性を有し、そのいくつかは、基礎となる条件が変化したときに、管理または制御プレーンによって更新されてもよい。これらのプロパティには、サービスパスインデックス、状態(例えば、有効または無効)、サービスパスを手動で無効にしなければならないときに使用される管理モード(例えば、デバッグの理由で)、ホストクロスカウント(サービスパスを通過するデータメッセージがホストを通過する回数を示す)、ローカルカウント(このパスに沿っているSIRの数を示す)、バックアップサービスパスのリスト、サービスパスの長さ、リバースパス(リバースパスの同じSIRのセットを逆順にリストする)、メンテナンスモードインジケータ(いくつかの実施形態では、サービスパスのいずれかのホップがメンテナンスモードにある場合に真を示すビット)が含まれる。
【0180】
[00219] ホストクロスカウントは整数で、サービスパスを通過するデータメッセージをPNICから送信する必要がある回数を示す。いくつかの実施形態では、ローカルまたは中央制御プレーンは、複数の利用可能な代替が存在する場合に、この指標を使用して、好ましいパスを決定する。この値は、管理プレーンまたは制御プレーンによって入口され、サービスパスを使用する各ホストで同じである。いくつかの実施形態におけるローカルカウントは、管理プレーンまたは制御プレーンによって初期化されず、サービスパスが作成または更新されるときにローカル制御プレーンによって計算される。各LCPは、異なる数値を計算する可能性がある。この値は、複数の利用可能な代替が存在する場合に好ましいパスを識別するために、ローカル制御プレーンによって使用される。サービスパスの長さは、サービスプレーンが初期サービスインデックスを設定するために使用する1つのパラメータである。
【0181】
[00220] いくつかの実施形態では、バックアップサービスパスのリストは、同じサービスチェーンに対するすべてのサービスパスのソートされたリストへのポインタである。パスに沿った特定のSIRがダウンしたときに試行される可能性のあるすべての選択肢が一覧表示される。このリストには、サービスパスによってトラバースされる各HAクラスタ内のSVMのすべての可能な順列のサービスパスが含まれている場合がある。いくつかの実施形態では、リストは、異なるHAクラスタに属するSIRを含まない。
【0182】
[00221] いくつかの実施形態では、サービスパスは、少なくとも1つのサービスホップが非アクティブであるとき、無効にされる。このような状態は一時的なものであり、サービスライブネス検出障害によってトリガーされる。サービスパスは、この方法でいつでも無効にできる。いくつかの実施形態では、サービスパスは、少なくとも1つのサービスホップが一致するSIRを持たない場合にも無効化される。参照しているSIR が消えても、オブジェクトモデルにサービスパスがまだ存在する場合、サービスホップはこの状態になる。
【0183】
[00222] サービスプレーンは、各SPIを一意に識別できる必要がある。いくつかの実施形態では、生成された制御プレーンUUIDは、サービスパスごとに送信される。サービスプレーンにおけるデータメッセージヘッダの制限のために、いくつかの実施形態では、大きなIDは各データメッセージと共に送信されない。いくつかの実施形態では、制御プレーンが各サービスパスに対してUUIDを生成すると、それに対して小さな固有IDも生成し、このIDは、これらの実施形態では各データメッセージと共に送信される。
【0184】
[00223] 図30は、サービス挿入、ネクストサービスホップ転送、およびサービス処理のためのルールを定義するために、ネットワークマネージャおよびコントローラがいくつかの実施形態において実行するいくつかの動作を概念的に示す。図示されているように、これらの動作は、サービス登録者3004、サービスチェーン生成器3006、サービスルール生成器3008、サービスパス生成器3010、サービスプレーンルール生成器3012、およびルール分配器3014によって実行される。いくつかの実施形態では、これらのオペレータのそれぞれは、ネットワークマネージャまたはコントローラの1つ以上のモジュールによって実現することができ、および/または1つ以上のスタンドアロンサーバによって実現することができる。
【0185】
[00224] サービスパートナーインターフェース3002(例えば、一組のAPIまたはパートナーユーザーインターフェース(UI)ポータル)を介して、サービス登録者3004は、異なるサービスパートナーが実行するサービスを指定するベンダーテンプレート3005を受信する。これらのテンプレートは、サービスプロファイルを含む1つ以上のサービス記述子でパートナーサービスを定義する。登録者3004は、サービスチェーンを定義するために使用するサービスチェーン生成器3006のために、サービスプロファイルをプロファイル記憶3007に格納する。
【0186】
[00225] 具体的には、ユーザインターフェース3018(例えば、一組のAPIまたはUIポータル)を介して、サービスチェーン生成器3006は、ネットワーク管理者(例えば、データセンタ管理者、テナント管理者など)から1つ以上のサービスチェーン定義を受信する。いくつかの実施形態では、各サービスチェーン定義は、サービスチェーンを識別したサービスチェーン識別子を、1つ以上のサービスプロファイルの順序付けられたシーケンスに関連付ける。定義されたサービスチェーン内の各サービスプロファイルは、サービスノードによって実行される必要があるサービス動作に関連付けられる。サービスチェーン生成器3006は、各サービスチェーンの定義をサービスチェーン記憶装置3020に格納する。
【0187】
[00226] ユーザインターフェース3018(例えば、一組のAPIまたはUIポータル)を通して、サービスルール生成器3008は、ネットワーク管理者(例えば、データセンタ管理者、テナント管理者等)から1つ以上のサービス挿入ルールを受信する。いくつかの実施形態では、各サービス挿入ルールは、データメッセージフロー属性のセットをサービスチェーン識別子に関連付ける。いくつかの実施形態におけるフロー属性は、L2属性またはL3/L4属性(例えば、5つのタプル属性)のようなフローヘッダ属性である。これらまたは他の実施形態では、フロー属性はコンテキスト属性(例えば、AppID、プロセスID、アクティブディレクトリIDなど)である。転送およびサービス動作を実行するためのコンテキスト属性を捕捉および使用するための多くの技術は、本明細書に組み込まれる米国特許出願第15/650,251号に記載されている。これらの技術のいずれも、本明細書に記載する実施形態と共に使用することができる。
【0188】
[00227] サービスルール生成器3008は、1つ以上のサービス挿入ルールを生成し、これらのルールをSIルール記憶装置3022に記憶する。いくつかの実施形態では、各サービス挿入ルールは、ルール識別子およびサービスチェーン識別子を有する。いくつかの実施形態におけるルール識別子は、SIルールが適用可能なデータメッセージフローを識別するフロー識別子(例えば、ヘッダ属性、コンテキスト属性など)に関して定義することができる。一方、各SIルールのサービスチェーン識別子は、SIルールのルール識別子に一致する任意のデータメッセージフローに対してサービスプレーンによって実行される必要があるサービスチェーンを識別する。
【0189】
[00228] サービスルールの一部であるサービスチェーンごとに、サービスパス生成器3012は、1つ以上のサービスパスを生成し、各パスは、チェーンのサービスプロファイルのシーケンスによって指定されたサービス動作を実行するために、1つ以上のサービスノードの1つ以上のサービスインスタンスエンドポイントを識別する。いくつかの実施形態では、サービスチェーンのためのサービスパスを生成するプロセスは、(1)サービスパスの候補となるサービスノード(例えば、SVM)上のデータメッセージ処理負荷、(2)各候補サービスパスを横断するフローのデータメッセージによって横断されるホストコンピュータの数など、1つ以上の基準を説明する。
【0190】
[00229] これらのサービスパスの生成は、基準によって本明細書に組み込まれる米国特許出願第16/282,802号にさらに記載されている。この特許出願に記載されているように、いくつかの実施形態は、ホストクロスカウント(サービスパスを横断するデータメッセージがホストを何回横断するかを示す)、ローカルカウント(このパスに沿ったSIRの何個がローカルホスト上に位置するかを示す)などの1つ以上の指標に基づいて、特定のホスト上の特定のGVMに対して使用するサービスパスを識別する。他の実施形態は、ファイナンシャルおよびライセンス指標などの他の指標に基づいて、サービスパスを識別する(すなわち、サービスパスのためのサービスノードを選択する)。
【0191】
[00230] サービスパス生成器3012は、生成されたサービスパスのアイデンティティをサービスパス記憶装置3024に記憶する。いくつかの実施形態では、この記憶装置は、各サービスチェーン識別子を1つ以上のサービスパス識別子に関連付け、各サービスパス(すなわち、各SPI)に対して、サービスパスを定義するサービスインスタンスエンドポイントのリストを提供する。いくつかの実施形態は、サービスパス定義を1つのデータ記憶装置に記憶する一方で、サービスチェーンとそのサービスパスとの間の関連を別のデータ記憶装置に記憶する。
【0192】
[00231] 次に、サービスルール生成器3010は、記憶装置3020、3022および3024に記憶されたルールから、サービス挿入、ネクストホップ転送、およびサービス処理のためのルールを生成し、これらのルールをルール記憶装置3026、3028および3030に記憶し、そこからルール分配機3014がこれらのルールを検索し、SIプリプロセッサ、サービスプロキシおよびサービスノードに配布することができる。分配器3014はまた、いくつかの実施形態において、サービスパス記憶装置3024からのパス定義を分配する。いくつかの実施形態におけるパス定義は、各パスに沿った第1ホップの第1ホップネットワークアドレス(例えば、MACアドレス)を含む。いくつかの実施形態では、サービスルール生成器3010および/またはルール分配器3014は、異なるサービスパスのセットが異なるホストコンピュータにとって最適であるまたは好ましいため、異なるホストコンピュータに、同じサービスチェーンに対する異なるサービスパスのセットを指定して分配する。
【0193】
[00232] いくつかの実施形態では、ルール記憶装置3026に記憶されるSI分類ルールは、フロー識別子をサービスチェーン識別子に関連付ける。したがって、いくつかの実施形態では、ルール生成器3010は、記憶装置3022からこれらのルールを取得し、分類ルール記憶装置3026に格納する。いくつかの実施形態では、ルール分配器3014は、SIルール記憶装置3022から分類ルールを直接取り出す。これらの実施形態について、SI分類ルール記憶装置3026の説明は、ネクストホップ転送ルールおよびサービスノードルールと共に、分散ルールの3つのタイプを強調するためのより概念的な説明である。
【0194】
[00233] いくつかの実施形態では、サービスルール生成器3010は、各サービスチェーンの各サービスパスの各ホップのサービスプロキシのネクストホップ転送ルールを生成する。上述したように、いくつかの実施形態における各サービスプロキシの転送テーブルは、プロキシの関連するサービスノードが存在する各サービスパスのネクストホップネットワークアドレスを識別する転送ルールを有する。このような各転送ルールは、現在SPI/SI値をネクストホップネットワークアドレスにマッピングする。サービスルール生成器3010は、これらのルールを生成する。SIプリプロセッサがファーストホップネットワークアドレスを検索しなければならない実施形態について、サービスルール生成器は、SIプリプロセッサのファーストホップルックアップルールも生成する。
【0195】
[00234] また、いくつかの実施形態では、サービスルール生成器3010は、サービスノードに対して、サービスチェーン識別子、サービスインデックス値およびサービス方向をサービスノードのサービスプロファイルにマップするサービスルールを生成する。これを行うために、サービスルール生成器は、サービスプロファイル記憶装置3007からのサービスプロファイル定義と同様に、記憶装置3020および3024からのサービスチェーンおよびサービスパス定義を使用する。いくつかの実施形態では、ルール分配器は、このようなサービスマネージャが存在する場合、サービスノードのサービスマネージャを介してサービスノードルールをサービスノードに転送する。サービスプロファイル定義はまた、いくつかの実施形態では、分配器3014によってホストコンピュータ(例えば、LCP)に分配され、それにより、これらのホストコンピュータ(例えば、LCP)は、これらのサービスプロファイルを使用して、サービスプロキシを構成することができ、例えば、受信したデータメッセージをサービスノードに転送するようにサービスプロキシを構成したり、受信したデータメッセージをコピーしたり、コピーをサービスノードに転送したりし、オリジナルの受信したデータメッセージを次のサービスノードホップに転送したり、最終ホップであるときに送信元のGVMに戻したりするようにサービスプロキシを構成したりすることができる。
【0196】
[00235] いくつかの実施形態では、管理および制御プレーンは、サービスパスのサービスノードのステータスおよびこれらのサービスノード上のデータメッセージ処理負荷に基づいて、サービスチェーンのサービスパスを動的に変更する。図31は、いくつかの実施形態において、サービスパスがどのように動的に修正されるかを示す。これらの実施形態では、中央制御プレーン3100は、ホストコンピュータ3120上のローカル制御プレーン3110と動作して、サービスチェーンのサービスパスを定義し、これらのサービスパスを修正する。いくつかの実施形態におけるCCP3100は、管理動作を提供する管理サーバのクラスタを介して、ネットワーク管理者によって指定されたサービスルールに基づいて構成を定義するための制御プレーン動作を提供するサーバのクラスタ(例えば、3つのサーバ)である。
【0197】
[00236] 図に示すように、CCPは、ホストコンピュータ3120上のステータスパブリッシャ3103からサービスノードステータスデータを受信するステータスアップデータ3102を有する。上述したように、サービスプロキシは、その関連するサービスノードが故障したと判断するたびに(例えば、サービスノードがサービスプロキシのライブネス信号に連続して2回応答することに失敗するたびに)、そのホストをLCP3110に通知する。そして、LCPは、そのステータスパブリッシャ3103が、サービスノードの障害をCCPのステータスアップデータ3102に通知する。
【0198】
[00237] ステータスアップデータ3102は、サービスノードの障害をサービスパス生成器3012に中継する。サービスパス生成器は、いくつかの実施形態では、SPルール生成器3010および統計コレクタ3104と共にCCPの一部である。サービスノードに障害が発生するたびに、サービスパス生成器は、このサービスノードを使用する以前に定義されたサービスパスをサービスパス記憶装置3024から除去する。除去された各サービスパスに対して、サービスパス生成器3012は、対応するサービスチェーンのサービスチェーン識別子に対する除去されたパスのSPI値を削除または非活性化する。
【0199】
[00238] いくつかの実施形態では、除去された各サービスパスは、このサービスパスのためであった転送ルールまたはパス定義を以前に受信したすべてのホストのレコードから除去される(例えば、削除または非活性化される)。いくつかの実施形態では、CCP(例えば、サービスパス生成器3010またはルール分配器3014)は、これらのホストに、それらの転送ルール記憶装置3128およびパス定義記憶装置808の転送およびパス定義ルールからサービスパスを除去するように指示する。いくつかの実施形態では、故障したサービスノードのLCPは、その転送およびパス定義規則からサービスパスを除去し、一方、他の実施形態では、このLCPは、CCPからの命令を待つ。
【0200】
[00239] 各ホスト3120はまた、いくつかの実施形態において、サービスプロキシがサービスノードのために生成するデータメッセージ負荷統計を発行する統計パブリッシャ3105を有する。サービスプロキシがそのサービスノードによって処理されたデータメッセージを受信するたびに、いくつかの実施形態におけるサービスプロキシは、そのサービスノードの統計記憶装置3107に記憶する統計(例えば、データメッセージカウント、バイトカウントなど)をインクリメントする。いくつかの実施形態では、統計パブリッシャ3105は、周期的またはオンデマンドで、記憶装置3107から収集された統計を検索し、これらの統計をCCPの統計コレクタ3104に転送する。いくつかの実施形態では、統計コレクタ3104は、サービスノードのサービスマネージャがサービスノードから受信する統計を(管理プレーンを通して)受信する。
【0201】
[00240] 統計コレクタ3104は、収集された統計をサービスパス生成器3012に中継する。上述したように、いくつかの実施形態におけるサービスパス生成器は、サービスノード上のデータメッセージ負荷に部分的に基づいて、サービスノードを介したサービスパスを定義する。例えば、サービスノード上のデータメッセージ負荷が閾値を超えると、サービスパス生成器は、いくつかの実施形態において1つ以上のアクションを実行して、このサービスノード上の負荷を軽減する。例えば、いくつかの実施形態では、それは、それが定義することができる任意の新しいサービスパスへのサービスノードの追加を停止する。これらまたは他の実施形態では、ディストリビュータ3014に、このサービスノードを使用するサービスパスをホストの一部またはすべてから除去するように指示する。
【0202】
[00241] 連結的に、または代替的に、サービスパス生成器は、CCPモジュール(例えば、分配器3014)に1つ以上のホストコンピュータのLCPに指示させ、1つ以上のホストコンピュータのLCPは、SIプリプロセッサがそのパス選択をどのように実行するかを制御するため、LCPが生成するサービスパスを選択するために使用される選択基準820を調整する。他の実施形態では、サービスパス生成器または別のCCPモジュールは、各サービスノードの負荷統計を集約し、集約された負荷をそれらの関連するSPI値と共にホストLCPに分散して、LCPがこれらの統計を分析し、それらが生成するパス選択基準を調整できるようにする。いくつかの実施形態では、各LCPは、サービスノード統計に基づいて、および/または各サービスパスによって横断されるホストの数のような他の基準に基づいて、パスを評価および選択するためのパス選択基準を生成するために、パス評価器3115を使用するか、または有する。
【0203】
[00242] いくつかの実施形態では、管理プレーン、制御プレーン、サービスマネージャを実装するサーバは、ゲストおよびサービスマシンおよびモジュール(例えば、GVM、SVM、サービスプロキシ、ポートプロキシ、STLモジュール、SFEなど)が実行されるホストコンピュータと同じデータセンタにある。これらの実施形態では、管理プレーンサーバ、制御プレーンサーバ、サービスマネージャおよびホストコンピュータモジュール(例えば、LCP、SVM、GVM、ハイパーバイザモジュールなど)は、データセンタの共有ネットワークインフラストラクチャ(例えば、スイッチ、ルータ、有線および無線リンクなど)を介して互いに通信する。
【0204】
[00243] 他の実施形態では、管理プレーンサーバ、制御プレーンサーバ、サービスマネージャおよび/またはホストコンピュータは、異なるデータセンタ(例えば、企業プライベートデータセンタおよびパブリッククラウドデータセンタ)で動作する。一部のこのような実施形態では、管理プレーンサーバ、制御プレーンサーバ、サービスマネージャおよび/またはホストコンピュータモジュール(例えば、LCP、SVM、GVM、ハイパーバイザモジュールなど)は、それぞれのデータセンタの外部のネットワークインフラストラクチャを介して互いに通信する。また、いくつかのそのような実施形態は、サービストランスポートレイヤを、複数のデータセンタ(例えば、複数のプライベートデータセンタ、複数のパブリックデータセンタ、複数のプライベート/パブリックデータセンタ)にまたがる分散論理L3ルーターおよび/またはネットワークとして実装する。
【0205】
[00244] 図32は、いくつかの実施形態が、マルチテナントデータセンタ内のテナントのためのサービスプレーンおよびその関連サービスノードを定義するために実行する処理3200を示す。このプロセスは、ただ1つの例示的な一連の動作を提示するだけであり、動作に求められる順序を示すことを意図していない。図に示すように、このプロセスは、サービスプレーンを確立するためのサービスアタッチメントを最初に(3205において)指定する。サービス接続構造は、サービスプレーンの実装に依存しない。いくつかの実施形態では、サービスアタッチメントは論理スイッチとして実装されるが、上述のように、サービスアタッチメントは、他の実施形態では異なる方法(例えば、論理ルーター、論理ネットワークなど)で実装される。
【0206】
[00245] サービスプレーンは、いくつかの実施形態において、あるテナントのデータトラフィックに対するサービス処理を、他のテナントのデータトラフィックに対するサービス処理から分離するために使用される。これらまたは他の実施形態では、異なるサービスプレーンが、異なるタイプのトラフィックに対して異なるQoSまたはSLA保証を提供するために使用される。例えば、いくつかの実施形態は、異なるサービスプレーンを使用して、異なるテナントの異なるデータ計算エンドポイント間のトラフィックに対して異なるQoSまたはSLA保証を提供するか、または同じテナントまたは異なるテナントの異なるデータメッセージフローによって運ばれる異なるタイプのコンテンツに対して異なるQoSまたはSLA保証を提供する。
【0207】
[00246] サービスアタッチメントを作成した後、プロセスは、サービスプレーンによって提供されるサービスのサービスインスタンスを(3210で)作成する。配置されたサービスインスタンスごとに、プロセスは、サービスインスタンスを高可用性クラスタによって提供するか、スタンドアロンサービスノードによって提供するかを指定する。また、サービスインスタンスに関連付けられたサービスアタッチメントを識別するサービスアタッチメント識別子も提供する。また、配置仕様書とインスタンスの配置構成も提供する。
【0208】
[00247] 次に、3215で、プロセスは、3210で作成されたサービスインスタンスごとに各サービスインスタンスランタイムを配置する。サービスインスタンスランタイムごとに、サービスアタッチメントにインスタンスエンドポイントを作成する必要がある。サービス接続が論理スイッチの場合、作成されるインスタンスエンドポイントは論理スイッチの論理ポートである。いくつかの実施形態では、論理スイッチポートは、SVM(サービスインスタンスランタイムとして機能する)が論理スイッチにアタッチされると自動作成される。いくつかの実施形態では、サービスインスタンスエンドポイントは、サービスインスタンスが配置されるたびに管理プレーンによって作成される。また、いくつかの実施形態では、サービスのサービスインスタンスおよびサービスインスタンスランタイムは、1つのサービス配置オブジェクトAPIを呼び出すことによって配置されることができる。前述のように、この単一のAPIを使用すると、複数のサービスインスタンスとサービスインスタンスランタイムをデプロイするために1つのAPIを複数回繰り返し呼び出す必要性が大幅に軽減される。
【0209】
[00248] 3220で、プロセスは1つ以上のサービスチェーンを作成する。各サービスチェーンは、サービスプロファイルの順序付きリストとして作成される。各サービスチェーンには、順処理方向と逆処理方向がある。サービスチェーンごとに、前述のように障害ポリシーが定義される。また、上述したように、いくつかの実施形態における負荷分散基準は、各サービスチェーンに対して、任意、ローカル、サービスクラスタまたはラウンドロビンのタイプの1つとして定義される。最後に、3225で、サービスルールのセクションがテナントに対して定義され、1つ以上のサービスルールがこれらのセクションで定義される。各サービスルールは、指定されたフロー属性セットに一致するデータメッセージに対して実行する必要があるサービスチェーンを指定するために、一連のデータメッセージフロー属性をサービスチェーン識別子と相関させる。
【0210】
[00249] いくつかの実施形態は、1つ以上のデータセンタで動作するホスト間で、サービスプレーンに関連するマシンを移行するための新しい方法を提供する。例えば、いくつかの実施形態は、(1)送信元ホストのマシンに関するサービスプレーンデータを収集する、(2)データを宛先ホストに送信する、(3)宛先ホストにマシンを配置する、および(4)送信元ホストからマシンを削除する、ことによって、サービスプレーンに関連付けられたサービスマシン(例えば、SVM)またはゲストマシン(例えば、GVM)のいずれかを移行(migrate)する。
【0211】
[00250] マシンに新しいサービスプレーンネットワークアドレスを新しい位置に割り当てる代わりに、マシンは送信元ホストと同じ宛先ホストの同じサービスプレーンネットワークアドレスでアドレス指定できる。例えば、いくつかの実施形態では、サービスプレーンMAC(SPMAC)アドレスによってアドレス指定可能なゲストマシンは、異なるホストへの移行後に同じSPMACによってアドレス指定可能である。同様に、いくつかの実施形態において、特定のネクストホップMACアドレスに関連するサービスマシンが移行されるとき、サービスマシンは、移行の前後の両方で、同じネクストホップMACアドレスによってアドレス指定可能である。このようないくつかの実施形態では、移行されたサービスマシンを参照するネクストホップ転送ルールは、マシン移行後のサービスマシン位置の変化に基づいて更新される必要はない。したがって、ネクストホップ転送は移行に依存しない。
【0212】
[00251] 代わりに、いくつかの実施形態では、サービスプレーンそれ自体が、移行されたマシンの位置を追跡する責任を負う。いくつかの実施形態では、サービスプレーン(例えば、サービスプレーンを構成する一組のコントローラ)は、サービスプレーンMACアドレスのVTEPへのマッピングを維持および更新して、マシン位置を追跡し、MACアドレス宛てのメッセージが、マシンへの配信のために正しいトンネルエンドポイントに転送されることを保証する。
【0213】
[00252] いくつかの実施形態では、移行されたマシンは、そのマシンと共に移行されなければならないローカルに維持されたデータと関連づけられる。例えば、いくつかの実施形態におけるゲストマシンのIOチェーンのプリプロセッサは、フローを識別し、ゲストマシンのホストで維持される動的状態(例えば、コネクション追跡)に基づいてサービスプレーン転送のためのサービスメタデータ(SMD)を提供する。また、いくつかの実施形態では、ホストは、ゲストマシンに適用可能なSIルールや、SIルールで識別されるサービスチェーンのサービスパスなど、ゲストマシンに固有の静的データを格納する。いくつかの実施形態では、この情報の一部または全部は、サービス挿入プラットフォームの他の位置で維持されない。
【0214】
[00253] ゲストマシン移行の動作のより詳細な例を、図33図35を参照して説明する。図33は、移行されるGVMの送信元ホスト(source host)によって実行される処理3300と、移行されたGVMの宛先ホスト(destination host)によって実行される処理3305を示す。このプロセスは、図34A~34Cに示されるGVM移行の例を参照することによって、以下に記述される。図34A~34Cは、GVM VNICごとに1つのIOチェーンのみを示すが、GVM VNICは、一般に、2つのIOチェーンを有し、1つは、スイッチからVNICへの入口用であり、もう1つは、VNICからスイッチへの出口用であることに留意されたい。いくつかの実施形態では、出口IOチェーンは、入口IOチェーンと同じモジュールを含むが、VNICとスイッチとの間に逆の順序で配置される。図34Aは、GVM3402を移行する前の送信元ホスト112および宛先ホスト114を示す。処理3300は、送信元ホスト112が、GVM3402を宛先ホスト114に移行する必要があると判断したときに開始される。
【0215】
[00254] 図に示すように、プロセス3300は、最初に(3310において)、GVM3402の移行に関するGVMデータを収集し、保存する。いくつかの実施形態では、GVMデータは、宛先ホスト114上にGVM3402のインスタンスを配置またはインスタンス化するためのGVM配置データを含む。また、いくつかの実施形態では、GVMデータは、サービス挿入モジュールによって、サービスメタデータをGVMに関連するデータメッセージに割り当てるために使用される動的状態データおよび静的ルールデータを含む。ホスト112は、収集されたGVMデータ3490を(3320において)送信する。GVMデータは、GVM3402を配置するためのGVM配置データのセットを含む。この例では、GVMデータ3490はまた、コネクション追跡記憶装置804から収集されたコネクション追跡データ(サービスメタデータ(SMD)のフロー識別子へのマッピングのような動的状態データを含む)、SIルール記憶装置806からGVM3042に関連するサービス挿入ルール、およびパステーブル808からのSIルールによって識別されるサービスチェーンのためのGVM3402に関連するサービスパスを含む。いくつかの実施形態では、GVMデータは、仮想マシンモビリティ管理サービス、例えばVMware Inc.のエンタープライズモビリティ管理を介して送られる。また、いくつかの実施形態では、TLVヘッダは、GVMデータを送信するときに、GVM配置データ、接続データ、SIルール、およびサービスパスのそれぞれに対して定義される。
【0216】
[00255] いくつかの実施形態では、サービスパス選択指標とネクストホップアドレスの両方がパステーブルから収集され、GVMデータと共に送信される。他の実施形態では、サービスパスの第1ホップMACアドレスは、別個の転送テーブル(例えば、図8の転送テーブル810)に格納され、そこから収集される。いくつかの実施形態では、サービスパスおよびサービスパス選択指標は、GVMデータと共に収集されず、送信されない。そのようないくつかの実施形態は、代わりに、CCPから分配されたすべてのサービスパスを各ホストに格納するか、またはCCPによって特定のホストに分配された各特定のホストサービスパスにのみ格納する。
【0217】
[00256] GVMデータが送信元ホスト112から送信された後、処理3305は、宛先ホスト114におけるGVMデータを開始し、(3325において)受信する。いくつかの実施形態では、GVMデータは、マシン移行の宛先ホストに警告する。このプロセスでは、GVMデータを使用して、宛先ホスト114でGVM3402を(3335で)移行する。図34Bは、GVM3402がホスト114上に配置された後の送信元ホスト112および宛先ホスト114を示す。3335において、プロセスはまた、新たに配置されたGVM3402のために、ポート3452および入口および出口IOチェーンを配置する。GVM3402は、IOチェーンに接続し、これらを介して、ホスト114上のスイッチ122のポート3452に接続する。この例では、配置された入口IOチェーンは、SIプリプロセッサ3411、STL呼出元3425、およびSIポストプロセッサ3413を含む。いくつかの実施形態では、ポートプロキシ3420は、GVM3402の新しい位置へのマッピングを格納する。いくつかの実施形態では、ポートプロキシ3420は、GVM SPMACアドレスをSTL呼出元3425にマッピングする。また、いくつかの実施形態では、GVM3402は、送信元ホスト112と宛先ホスト114の両方で同じSPMACを有する。
【0218】
[00257] GVM3402およびそのIOチェーンが配置されると、処理3305は、受信したGVMデータ3490からGVM3402の動的状態および静的ルールデータの復元を開始する。いくつかの実施形態において、SIプリプロセッサ3411は、GVM3402の状態およびルールデータの少なくとも一部が宛先ホスト114上に復元され、SIプリプロセッサにアクセス可能になるまで、移行されたGVM3402のためのフローを処理することができない。3345において、プロセスは、GVM3402のためのコネクションデータを復元し、受信したコネクションデータをコネクション追跡記憶装置3404に記憶する。いくつかの実施形態において、SIプリプロセッサ3411は、接続追跡記憶装置がサービスプレーン転送に十分なサービスメタデータ(例えば、SPI、SI、Direction、第1のネクストホップアドレスなど)を含む既存のデータフローの処理をすぐに開始してもよい。この場合、プリプロセッサ3411は、サービス挿入ルールおよびGVM3402のパスが復元される前に、フロー処理を再開することができる。いくつかの実施形態では、新しいデータフローは、サービス挿入ルールおよびサービスパスデータが復元されるまで保持される(例えば、SIプリプロセッサで)。他の実施形態では、サービス挿入ルールに一致しない新しいフローは、それらの宛先に転送される。
【0219】
[00258] 3355において、処理3305は、受信したGVMデータ3490に基づいて、GVM3402のSIルールを復元する。SIルールは、SIルール記憶装置3406に記憶される。この例では、SIルール記憶装置は、GVM3402とGVM3402のSIルールを異なるセクションに記憶する。他の実施形態では、各GVMは、独自のルール記憶装置を有する。全てのGVMに対するルールは、いくつかの実施形態において、単一記憶装置の単一セクションに格納される。GVM3402のSIルールの復元に続いて、プロセスは、パステーブル3408内の受信されたパスおよびパスデータ(例えば、選択基準、ファーストホップMACアドレスなど)を(3365において)復元する。この例では、GVM104およびGVM3402は、パステーブル3408を共有するが、同じホスト上のゲストマシンは、いくつかの実施形態において、単一のセクションを共有するか、または独自の記憶装置を有することも可能である。いくつかの実施形態では、プリプロセッサ3411は、パステーブルが復元されると、新しいフローの処理を開始する。しかしながら、他の実施形態では、プリプロセッサは、パステーブルが制御プレーンによって更新されるまで、新しいフローの処理を開始しない。このような場合には、プリプロセッサは新しいデータフローに属するデータメッセージを保持し続ける。いったんパステーブルが復元されると、処理3305は、(3365において)制御位置(例えば、CCP)に、GVMの配置およびデータ復元が完了し、終了することを通知する。
【0220】
[00259] ホスト112が、GVM 3402がホスト114上に配置され、GVM3402の状態およびルールが復元されたという確認通知を受信すると、処理3300は、3330において、ホスト112からのGVM3402の破棄を開始する。いくつかの実施形態では、送信元ホスト112はCCPから確認応答を受信するが、他の実施形態では、確認応答は宛先ホスト114それ自体から受信される。いくつかの実施形態では、GVM3402は、まずホスト114でそのIOチェーンから切断され、次に除去される。
【0221】
[00260] 3330において、ホスト112はまた、SIプリプロセッサ3410、STL呼出元3424、およびSIポストプロセッサ3412を含む、GVM3402がvswitch120に接続するGVM IOチェーンおよびポート3450を破棄する。いくつかの実施形態では、IOチェーンは、ホスト112から取り外される前に、ポート3450から切断される。いくつかの実施形態では、処理3300は、ホスト112から、移行されたGVM3402の固有のデータを除去する。この場合、ホスト112は、接続追跡保管804、S.I.ルール記憶装置806、およびパステーブル808からGVM3402データを除去する。ポートプロキシ620は、GVM3402のSPMACへのマッピングも除去する。GVM3402、GVM3402IOチェーン、およびその関連データがホスト112から除去されると、処理3300は、GVM3402が送信元ホスト112から切断されて終了したことを制御プレーン(例えばCCP)に(3340において)通知する。図34Cは、GVM3402の移行が完了した後のホスト112およびホスト114を示す。
【0222】
[00261] いくつかの実施形態では、制御プレーンは、マシンの移行を検出し、それに応じてサービスプレーンを更新する責任を負う。GVM移行後に実行される制御プレーン動作は、いくつかの実施形態において制御プレーンによって実行される処理3500を示す図35を参照してさらに説明される。このプロセスは、図34A~34Cを参照して、以下に説明される。
【0223】
[00262] 図に示すように、処理3500は、GVM3402が送信元ホスト112から宛先ホスト114に移行したことを制御ペインが(3510において)判定すると、開始される。いくつかの実施形態では、制御プレーンは、CCPで受信された1つ以上の通知に基づいて、ゲストマシンがホストを移行したと決定する。いくつかの実施形態では、制御プレーンは、宛先ホストからのゲストマシンが配置されたことの第1の通知と、送信元ホストからのゲストマシンが切断されたことの第2の通知とを受信する。いくつかの実施形態では、第1の通知は宛先ホストのLCPによって送信され、第2の通知は送信元ホストのLCPによって送信される。
【0224】
[00263] 制御プレーンが、GVM3402が移行されたことを決定すると、プロセスは(3520において)、移行されたGVMの新しい位置を公開する。いくつかの実施形態では、制御プレーンは、GVMに到達可能なVTEPへのGVM SPMAC(これは、以前と同じである)のマッピングを公開する。いくつかの実施形態では、VTEPは、データフローがサービスパスを完了した後、データフローをその送信元GVM IOチェーンに戻すために使用される。いくつかの実施形態では、VTEPは、サービスプレーン(例えば、ポートプロキシ3420)との間でGVMに関連するデータフローを挿入する、新しいホスト上のポートプロキシのためのVTEPである。
【0225】
[00264] いくつかの実施形態では、VTEPからSPMACへのマッピングは、サービスプレーンによって維持されるグローバル転送テーブルに公開され、そこでは、SPMACから送信元ホストのVTEPへのマッピングを置き換える。いくつかの実施形態では、マッピングは、サービスプレーンの各転送要素のホストにおいて、CCPからLCPに公開される。
【0226】
[00265] いくつかの実施形態では、移行されたGVMの新しい位置は、GVM IOチェーンからサービスプレーンに挿入されたデータフローに基づく送信元学習によって、サービスプレーンによっても学習される。このようないくつかの実施形態では、挿入されたトラフィックには、トラフィックがGVMから転送される送信元VTEPを識別するVTEP送信元ラベルが付加される。VTEP送信元ラベルは、サービスプレーンを通過する各ホップに沿って伝送される。いくつかの実施形態では、VTEP送信元ラベルは、データフローのデータメッセージのサービスメタデータに追加される。いくつかのこのような実施形態では、データメッセージは、SPMACおよびVTEPラベルの各ホップで検査される。送信元ラベルのSPMACとVTEPは、データメッセージのサービスメタデータから取得され、SPMACとVTEPのマッピングが学習される。いくつかの実施形態では、マッピングは、サービスパスのエンドにあるデータメッセージを、データメッセージがサービスプレーンに挿入された送信元GVM IOチェーンに戻すために使用することができる。
【0227】
[00266] 必要に応じて、制御プレーンは、移行されたGVMの宛先ホスト114の新しいサービスパスを(3530において)生成する。いくつかの実施形態では、サービスパスは、サービスパスが選択されるホストに相対的な(例えば、サービスパスが実行されるためにデータメッセージがサービスプレーンに挿入される)サービスパスのSVMの位置に少なくとも部分的に基づいて、サービスチェーンに対して選択される。そのため、GVM移行の送信元ホスト112に対して生成されたサービスパスは、宛先ホスト114にとって最適ではない可能性がある。いくつかの実施形態では、新しいサービスパスは、サービスパスのSVMに相対的な宛先ホストの位置に基づいて選択された最適なサービスパスである。新しいサービスパスは、GVMの宛先ホストに配信され、パステーブルに保存される。いくつかの実施形態では、新しいサービスパスがCCPで生成され、宛先ホストのLCPを介して宛先ホストに分配される。いくつかの実施形態は、各サービスチェーンに対して単一のサービスパスのみを各ホストに配信する。他の実施形態は、ホスト毎にサービスチェーン毎に複数のサービスパスを分配する。いくつかのそのような実施形態では、各ホストのLCPは、選択基準に基づいて、複数の受信されたサービスパスから記憶するために、サービスチェーンごとに1つのサービスパスを選択する。他のこのような実施形態では、受信されたサービスパスはそれぞれ記憶され、LCPは受信されたサービスパスのための選択指標を生成する。サービスパスは、例えば、重み付きラウンドロビン選択に基づいて、いくつかのそのような実施形態におけるサービスパス選択指標を使用するフローベースによるサービスチェーンに対して選択される。
【0228】
[00267] いくつかの実施形態では、サービスパス選択は、サービスパスのGVMホスト相対SVMの位置に依存しない。たとえば、サービスパスの選択は、SVMの相対的な位置に依存する場合があるが、GVMのホストとの相対的な関係には依存しない場合がある。このような場合、GVMの移行はサービスパスの選択に影響しない。このような場合、新しいサービスパスの生成は、GVMの移行後は不要であり、スキップすることができる。いくつかの実施形態では、サービスルールおよび/またはサービスパスは、マシンの移行中には移行されず、GVMのための古いサービスルールおよび/またはサービスパスは、代わりにCCPによって宛先ホスト(例えば、ホスト114)に分配される。
【0229】
[00268] 3540において、必要であれば、制御プレーンは、宛先ホスト114におけるパステーブル3408のサービスパスのための新しいサービスパス選択指標を計算する。いくつかの実施形態では、サービスパス選択指標は、中央制御プレーンから受信された新しいサービスパスに対して常に計算される。また、いくつかの実施形態では、サービスパスは、サービスパス選択指標なしに移行され、サービスパス選択指標は、受信されたサービスパスについて計算される。サービスパス選択指標が、少なくとも部分的に、GVMホストに相対的なサービスパスSVMの位置に基づいている場合、移行されたサービスパス選択指標は、もはや正確ではなく、新しいサービスパス選択指標が、移行されたサービスパス選択指標に代わるいくつかの実施形態において計算される。いくつかの実施形態では、移行されたGVMがホスト上の最初のGVMであるとき、ホストは移行前に記憶されたサービスパスを持たない。このようないくつかの実施形態では、移行後に宛先ホストに記憶されたすべてのサービスパスは、送信元ホストから移行されたサービスパスである。他の実施形態では、サービスパスは、GVMと共にまったく移行されない。
【0230】
[00269] いくつかの実施形態では、サービスパス選択指標は、GVM自体の位置に依存せず、むしろ選択指標を生成するホストの位置に依存する。このような場合、宛先ホストのパステーブルにすでに保存されているサービスパスについて、サービスパス選択指標を計算する必要がないことがある。このような実施形態では、サービスパス選択指標は、サービスプレーンにおける他の変更に起因して、依然として計算されてもよい。他の実施形態では、サービスパス選択指標がGVMホストの位置に依存しない場合、すでに選択指標を有する任意のサービスパスに対するサービスパス選択指標を計算することは不要であり、スキップすることができる。必要なサービスパス選択指標が計算されると、処理3500は終了する。
【0231】
[00270] いくつかの実施形態はまた、1つ以上のデータセンタで動作するホスト間でサービスマシン(例えば、SVM)を移行するための新しい方法を提供する。たとえば、1台以上のサービスマシンをホストする第1のホストコンピュータをメンテナンスのために停止する必要がある場合、第1のホストコンピュータで動作しているサービスマシンを第2のホストコンピュータに移行できる。場合によっては、サービスマシンをホストマシン間で移行して、ワークロードのバランスを取ったり、権限やファイアウォールの実装を簡素化したり、改善されたサービスパスを提供したりすることがある。
【0232】
[00271] このようないくつかの実施形態では、SVMは、ホストコンピュータの共有メモリ(例えば、VMware ESXホストの共有メモリ)内で実行される。一部のこのような実施形態では、ファイルに対してサービス動作を実行するために、SVMは、サービス動作を実行する前に、共有メモリ内のファイルの保存場所を探し、カーネル空間内のファイルを開く。このようないくつかの実施形態では、SVMは、同じESXに格納されたファイルに対してのみサービス動作を実行することができる。このようないくつかの実施形態では、ホスト間でSVMを移行するには、VMに関連付けられたフィルタモジュール(例えば、dvFilter)の移行が必要である。他のこのような実施形態では、SVMは、代わりに、共有メモリ内で動作しないMACアドレス指定可能エンティティである。MACアドレス指定可能なサービスマシン移行の動作のより詳細な例を、図36~39を参照して説明する。
【0233】
[00272] 図36は、移行元のSVM3706の移行元ホスト112で実行される処理3600と、移行先のSVMの宛先ホスト114で実行される処理3605を示す。このプロセスは、図37A-37Cに示されているSVM移行の例を参照して、以下で説明されている。図37Aは、SVM3706の移行前のホスト112とホスト114を示す。処理3600は、送信元ホスト112が、SVM3706を宛先ホスト114に移行する必要があると判断したときに開始される。
【0234】
[00273] 図に示すように、プロセス3600は、最初に、SVM3706に関するSVMデータを(3610において)保存する。いくつかの実施形態では、SVMデータは、ホスト114上にSVM3706を配置するためのデータを含む。いくつかの実施形態では、SVMデータは、データメッセージフロー上でサービスを識別し実行するためにSVM3706によって使用される動的状態SVMデータおよび静的ルールSVMデータも含む。
【0235】
[00274] いくつかの実施形態では、SVMルールデータは、データメッセージフロー上でサービスを実行するためのサービスルールセットへのサービスメタデータ(例えば、SCI、SI、および宛先)のマッピングを含む。また、いくつかの実施形態では、SVM状態データは、データメッセージフロー上で実行するためのサービス動作へのフロー識別子のマッピングを含む。いくつかの実施形態では、状態データは、サービスルールセット内のデータフロー識別子に対するルックアップに基づくデータフロー識別子への決定のマッピングを含む。また、SVMデータは、いくつかの実施形態では、SVM IOチェーンのためのSIプロキシ(例えば、SIプロキシ3715)およびSIプロキシによって使用される任意の状態データを構成するためのデータを含む。いくつかの実施形態では、SIプロキシデータは、移行されたSVMが属するサービスパスのネクストホップ転送ルールのセットを含む。また、いくつかの実施形態では、SIプロキシ状態データは、SIプロキシで維持される指標および統計、例えば、トラフィック量レコードを含む。
【0236】
[00275] 送信元ホスト1112は、保存されたSVMデータ3790を宛先ホスト114に(3620で)送信する。いくつかの実施形態では、SVMデータ3790は、仮想マシンモビリティ管理サービス、例えばVMware Inc.のエンタープライズモビリティ管理を介して送られる。いくつかの実施形態では、任意のSVMルールデータ、SVM状態データ、およびSIプロキシデータを含むすべてのSVMデータは、移行されたSVM3706と共に移動される。他の実施形態では、SVMルールデータ、SVM状態データ、およびSIプロキシデータの一部またはすべてが、仮想マシン移行フレームワークを介して個別に移行される。
【0237】
[00276] SVMデータ3790が送信元ホスト112から送信された後、処理3605は、宛先ホスト114のSVMデータを開始し、(3625で)受信する。いくつかの実施形態では、SVMデータは、マシン移行の宛先ホストに警告する。このプロセスでは、SVMデータ3790を使用して、宛先ホスト114にSVM3706を(3635に)配置する。図37Bは、ホスト2にSVM3706が配置された後のホスト112とホスト114を示す。いくつかの実施形態では、移行されたSVM3706は、移行されたSVMデータ3790を使用して、移行されたSVM状態およびSVMルールの一部または全部と共に配置される。他の実施形態では、SVM状態およびルールデータの一部または全部は、例えば、別々に移行されたSVMデータ(例えば、SIプロキシ状態)を復元する、導入後に復元される。
【0238】
[00277] 3635において、処理3605はまた、ポート3755および入口及び出口IOチェーンを配置する。このプロセスでは、SVM3706をIOチェーンに接続し、それらを介して宛先ホスト114のスイッチ122のポート3755に接続する。この例では、配置されたIOチェーンは、SIプロキシ3715およびSTLモジュール3727を含む。いくつかの実施形態では、移行されたネクストホップ転送ルールは、SIプロキシ3715の配置中に消費され、SIプロキシは、すでに構成されたネクストホップ転送ルールと共に配置される。他の実施形態では、ネクストホップ転送ルールはグローバルに記憶され、サービスプレーンによってSIプロキシ3715に提供される。さらに別の実施形態では、ネクストホップ転送ルールは、配置後にCCPによって提供される。いくつかの実施形態では、IOチェーンの配置中に、移行されたSVM3706のネクストホップアドレスがサービスプレーンによって保存される。また、いくつかの実施形態では、移行されたSVMは、送信元ホストと同じ宛先ホストの同じネクストホップアドレスによってアドレス指定可能である。この例では、サービスプレーンは、ホスト112のSVM3706に割り当てられたのと同じホスト114のネクストホップMACアドレスである宛先ホスト114のポート3755を介して、SVM3706に到達できるVTEPへのSVM3706のマッピングを格納する。
【0239】
[00278] いくつかの実施形態では、SVM3706およびそのIOチェーンが一旦配置されると、プロセス3605は、受信されたSVMデータ3790からSVM3706の動的状態および静的ルールデータを復元する(3645で)。一部のこのような実施形態では、静的ルールが復元される前に、復元された状態を使用して、以前に処理されたフローのデータメッセージを処理することができる。移行されたSVMが移行先ホストの最初のSVMである場合、いくつかの実施形態では、移行先ホストにネクストホップ転送ルールもVTEPからMACアドレスへのマッピングもない。いくつかのこのような実施形態では、処理3605は、移行されたSVMデータ3790からのMACマッピングにネクストホップ転送ルールおよび/またはVTEPを復元する。また、処理3605は、CCPが非アクティブであるか、またはサービスプレーン情報を分配することができない場合に、ネクストホップ転送ルールおよび/またはVTEPからMACアドレスマッピングをいくつかの実施形態で復元する。他の実施形態では、移行されたすべてのSVMデータは、代わりに、移行されたSVMの配置時に消費される。このような場合、配置後のSVM状態の復元は不要であり、スキップされる可能性がある。必要な状態および/またはルールが回復されると、処理3605は終了する。
【0240】
[00279] ホスト112が、SVM3706がホスト114上に配置され、設定されたという確認通知を受信すると、プロセス3600は、ホスト112から(3630で)SVM3706の破棄を開始する。いくつかの実施形態では、送信元ホストはCCPから確認応答を受信するが、他の実施形態では、確認応答は宛先ホスト自体から受信される。いくつかの実施形態では、SVM3706は、まず、そのIOチェーンから切断され、次に、除去される。
【0241】
[00280] 3630で、プロセスはまた、SVM3706のIOチェーンと、SIプロキシ3714およびSTLモジュール3726を含むSVM3706がvswitch120に接続するポート3754を破棄する。いくつかの実施形態では、IOチェーンは、ホスト112から除去される前に、ポート3754から切断される。いくつかの実施形態では、送信元ホストは、移行されたSVMに固有のデータを除去する。いくつかの実施形態におけるサービスプレーンはまた、ホスト112におけるその位置への移行されたSVM3706のマッピングを除去する。SVM3705、SVM3706のIOチェーン、およびそれらに関連するデータが送信元ホスト112から除去されると、処理3600は終了する。図37Cは、SVM3706の移行が完了した後のホスト112とホスト114を示す。
【0242】
[00281] いくつかの実施形態では、制御プレーンは、SVMの移行を検出し、それに応じてサービスおよび転送プレーンを更新する責任を負う。SVM移行後に実行される制御プレーン動作は、いくつかの実施形態において制御プレーンによって実行される処理3800を示す図38を参照してさらに説明される。このプロセスは、図37A~37Cを参照して、以下に記述される。
【0243】
[00282] 図に示すように、処理3800は、制御ペインが、SVM3706が送信元ホスト112から宛先ホスト114に移行したことを(3810において)決定したときに開始する。いくつかの実施形態では、制御プレーンは、CCPで受信した1つ以上の通知に基づいて、SVMがホストを移行したと判断する。いくつかの実施形態では、制御プレーンは、SVM3706が配置されたことの宛先ホスト114から第1の通知と、SVM3706が切断されたことの送信元ホスト112から第2の通知とを受信する。いくつかの実施形態では、第1の通知は宛先ホストのLCPによって送信され、第2の通知は送信元ホストのLCPによって送信される。
【0244】
[00283] 制御プレーンがSVM3706の移行を決定すると、プロセスは(3820で)移行されたSVM3706の新しい位置を公開し、SVM3706宛てのメッセージを送信元ホスト112ではなく宛先ホスト114に転送するようにサービスプレーンを構成する。いくつかの実施形態では、制御プレーンは、SVMネクストホップMACアドレス(これは、以前と同じである)のVTEPへのマッピングを公開し、これによりSVMに到達できる。いくつかの実施形態では、マッピングは、サービスプレーンで維持されるグローバル転送テーブルに公開され、そこでは、送信元ホストに関連するVTEPへのSVMの以前のマッピング(例えば、112)を置き換える。このようないくつかの実施形態では、マッピングは、サービスプレーンを実装する各転送要素のホストにおいて、CCPからLCPに公開される。この例では、カプセル化モジュール628および3428は、ホスト112のVTEPの代わりにホスト114のVTEPでSVM3706のMACアドレス宛てのパケットをカプセル化するように構成される。
【0245】
[00284] 必要に応じて、制御プレーンは、SVM3706の移行に基づいて(3830で)新しいサービスパスを生成する。いくつかの実施形態では、サービスパス選択指標は、サービスパス内のサービスノードの相対的な位置に、少なくとも部分的に、互いに比較して依存する。このようないくつかの実施形態では、SVMが別のホストに移行されると、SVMを構成するサービスパスは最適化されなくなる。いくつかの実施形態では、移行されたSVM3706を含むサービスパスを置き換えるために、新しいサービスパスが生成され、その中で、SVM3706は、同じサービスを実行する異なるSVMによって置き換えられる。いくつかの実施形態では、SVMの移行により、サービスチェーンの以前のサービスパスよりも最適な、移行されたSVMを構成する新しいサービスパスが生成されることが可能になる。
【0246】
[00285] 3840で、プロセスはサービスパスを分配する。いくつかの実施形態では、サービスパスは、ネクストホップ転送ルールの形成において送信される。いくつかの実施形態では、制御プレーン(例えば、CCP)は、移行されたSVM3706を構成する任意のサービスパスを宛先ホスト114に分配する。他の実施形態では、ネクストホップ転送ルールはサービスプレーン内でグローバルに維持され、宛先ホスト114は、移行されたSVM3706を含むサービスパスに対するネクストホップ転送ルールをすでに有するであろう。いくつかの実施形態では、受信されたサービスパスは、サービスパス(例えば、SIプロキシ3715)のサービスノードのサービスプロキシによって記憶される。
【0247】
[00286] いくつかの実施形態では、サービスパスはCCPで生成され、各ホストのLCPを介してホストに分配される。いくつかの実施形態では、CCPは、サービスプレーンのSVMをホストする各ホストに新しいサービスパスのネクストホップ転送ルールを分配し、一方、他の実施形態では、各特定のサービスパスのネクストホップ転送ルールは、特定のサービスパスによってスパンされるホストに分配される。
【0248】
[00287] いくつかの実施形態では、新しく生成されたサービスパスは、サービスパスが生成されるサービスチェーンに関連するGVMを実行するホストの少なくともサブセットに分散される。いくつかの実施形態では、各ホストは、各サービスチェーンに対して1つのサービスパスを受信するが、他の実施形態では、各ホストは、各サービスチェーンに対して複数のサービスパスを受信する。いくつかの実施形態では、ホストは、それらのGVMが関連付けられているサービスチェーンのためのサービスパスを受信するが、他の実施形態では、各ホストは、すべての分散サービスパスを受信する。いくつかの実施形態では、受信されたサービスパスは、それぞれのホストのサービスパステーブルに格納される。また、いくつかの実施形態では、各GVMホストのLCPは、各サービスチェーンに対して記憶する1つのサービスパスを選択する。
【0249】
[00288] 3850で、制御プレーンは、特定のパステーブルのサービスパスのための新しいサービスパス選択指標を計算する。いくつかの実施形態では、新しいサービスパス選択指標は、移行されたSVM3706を含む各サービスパスに対して計算される。新しいサービスパスが生成されるとき、いくつかの実施形態において、サービスパス選択指標は、各新しいサービスパスに対して生成される。いくつかの実施形態では、サービスパス選択指標は、ホストのLCPによって各ホストのパステーブルに対して計算される。サービスパス選択指標が計算されると、処理3800は終了する。サービスチェーンごとに1つのサービスパスのみが格納される場合、いくつかの実施形態では、サービスパス選択指標は、サービスパスと共に格納されない。
【0250】
[00289] いくつかの実施形態は、同じホストコンピュータのディスク割り当ての間でサービスマシンを移行するための新しい方法も提供する。たとえば、ユーザまたは管理者は、SVMをプライベートディスク割り当てから共有ディスク割り当てに、またはその逆に移行することを望む場合がある。いくつかの実施形態では、第1および第2のディスク割り当ては、同じホストコンピュータ上の別々のデータストア(例えば、2つのVMware NFSデータストア)に関連付けられる。いくつかの実施形態では、ディスク割り当ては、同じディスク記憶装置の第1および第2の割り当てである。他の実施形態では、ディスク割り当ては、別個の第1および第2のディスク記憶装置である。このようないくつかの実施形態では、同じホストコンピュータのハードウェアディスク記憶装置間でSVMを移行して、ワークロードのバランスを取ることができる。ディスク割り当ての間でSVMを移行するプロセスは、図36に示す同じ一連の動作に従う。ただし、ホスト内SVM移行の場合、プロセス3600は移行元のディスク割り当てによって実行され、プロセス3605は移行先のディスク割り当てによって実行される。このプロセスは、図39に示されているホスト内SVM移行例を参照することによって以下に説明される。プロセス3600は、ホスト112の第1のディスク割り当て上のNFSデータストア3910上のSVM3906を、ホスト112上の第2のディスク割り当て上のNFSデータストア3920にも移行する必要があると判断されたときに開始される。3901は、移行前のホスト112を示す。
【0251】
[00290] 図に示すように、処理3600は、最初に、SVM3906に関するSVMデータを(3610で)保存する。送信元NFS3910は、(3620で)保存されたSVMデータ3990を宛先NFS3920に送信する。いくつかの実施形態では、SVMデータ3990は、ホストコンピュータ間のSVM移行中に収集されるSVMデータ(例えば、SVMデータ3790)の少なくともサブセットを含む。いくつかの実施形態では、SVMデータ3990は、ホスト112上の仮想マシンモビリティ管理サービス(例えば、VMware Inc.のエンタープライズモビリティ管理)を介して送信される。SVMデータ3990が送信元NFS3910から送信された後、プロセス3605は、宛先NFS3920でSVMデータ3990を開始し、(3625で)受信する。いくつかの実施形態では、SVMデータ3990は、マシン移行のNFS3920に警告する。
【0252】
[00291] 処理3605は、SVMデータ3990を使用して、宛先NFS3920上に(3635で)SVM3906を配置する。いくつかの実施形態では、SVM3906は、移行されたSVMデータ3990を使用して、移行されたSVM状態およびルールの一部または全部と共に配置される。他の実施形態では、SVM状態およびルールデータの一部または全部が、代わりに配置後に復元される。3635では、プロセスはポート3955と入口および出口IOチェーンも配置する。SVM3906 は、IOチェーンと接続され、それらを通じて、スイッチ120のポート3955に接続される。この例では、配置されたIOチェーンは、SIプロキシ3915およびSTLモジュール3927を含む。
【0253】
[00292] 3902で、SVM IOチェーンの2つのインスタンスがホスト112で実行される。いくつかの実施形態では、SVM3906の2つのインスタンスのIOチェーンは、同じVNIC MACアドレスによって宛先指定可能である。また、いくつかの実施形態では、ポート3954およびポート3955は、異なるポートIDを有する。いくつかの実施形態では、配置の一部として(3635において)、プロセスは、NFS3920上に配置されたSIプロキシ3915に対するハンドルのマッピングを、MACアドレスおよびポート3955ポートID(例えば、ポートテーブルまたはハンドルテーブル内)に保存する。
【0254】
[00293] いくつかの実施形態では、一旦SVM3906とそのIOチェーンがNFS3920上に配置されると、処理3605は、受信したSVMデータ3990からNFS3920でSVM3906の動的状態と静的ルールデータを復元する(3645で)。他の実施形態では、代わりに、配置が不要になりスキップされ得る後に、移行されたすべてのSVMデータは、SVM3906の配置中およびSVM状態とルールの復元で消費される。必要な状態および/またはルールが回復されると、処理3605は終了する。
【0255】
[00294] NFS3910が、SVM3906がNFS3920に配置され、設定されたという確認通知を受信すると、処理3600は、NFS3920からSVM3906の破棄を開始する(3630で)。いくつかの実施形態では、送信元NFSはCCPから確認応答を受信するが、他の実施形態では、確認応答はLCPまたは宛先NFSそれ自体から受信される。いくつかの実施形態では、SVM3906は、まずそのIOチェーンから切断され、次にNFS 3920から除去される。
【0256】
[00295] 3630において、このプロセスは、NFS3910およびSVM3906がNFS3910(SIプロキシ3914およびSTLモジュール3926を含む)からvSwitch120に接続するポート3954のSVM3906IOチェーンも破棄する。いくつかの実施形態では、IOチェーンは、NFS3910から除去される前に、ポート3954から切断される。いくつかの実施形態では、送信元NFS3910は、移行されたSVM3906に固有のデータを除去する。いくつかの実施形態におけるサービスプレーンは、SVM3906のポート3954へのマッピングも除去する。SVM3906、SVM IOチェーン、およびその関連データがNFS3910から除去されると、処理3600は終了する。3903は、SVM3906のホスト内移行が完了した後のNFS3910とNFS3920を示す。
【0257】
[00296] 上述したように、いくつかの実施形態では、ホスト内移行中に、SVM IOチェーンが同じMACアドレスを持つ同じホスト上の第1および第2のディスク割り当ての両方で実行される間隔がある。いくつかの実施形態では、これは、SVM IOチェーンが第2のディスク割り当て(3635)に配置された後、SVM IOチェーンが第1のディスク割り当て(3630)から除去される前に発生する。例えば、3902において、NFS 3910におけるSIプロキシ3914およびNFS3920におけるSIプロキシ3915は、両方ともホスト112上で実行される。いくつかの実施形態では、これにより、制御プレーンとSIプロキシとの間の通信に問題が生じる可能性がある。例えば、いくつかの実施形態では、LCP 3930がSIプロキシ3915にメッセージを送信する必要があるとき、LCPは、SVM3906のMACアドレスに基づいてSIプロキシ3915のハンドルを検索する。ただし、同じMACアドレスを持つ2つのSIプロキシが同じホストで動作する場合、MACアドレスのみに基づくルックアップで2つのSIプロキシハンドルが識別される。したがって、MACアドレスルックアップは、SIプロキシ3914とSIプロキシ3915の両方のハンドルを返す。
【0258】
[00297] いくつかの実施形態では、正しいハンドルを選択するために、所望のSIプロキシのポートIDを使用して、第2のルックアップが実行される。この例では、SIプロキシ3915のハンドルを識別するために、LCP3930は、ポート3955のポートIDを使用して第2のルックアップを実行する。この2回目のルックアップでは、SIプロキシ3915 のハンドルが返される。他の実施形態では、最初のルックアップは、代わりに、SIプロキシのMACアドレスとポートIDの両方を使用して実行され、単一の検索で正しいハンドルを識別する。いくつかの実施形態では、LCPは、ハンドルを使用して、SIプロキシを構成するための構成メッセージを送信する。
【0259】
[0001] いくつかの実施形態では、ライブネススレッド3940は、SVM 3906のライブネス時間タイマーが経過したと判断すると、SVM3906プロキシにメッセージを送信して、SVM3906にメッセージを送信する。ライブネスタイマーメッセージが3914の代わりにSIプロキシ3915に送信されることを保証するために、ライブネススレッド3940は、MACアドレスを使用する第1のルックアップと、ポートIDを使用する第2のルックアップ、またはMACアドレスとポートIDの両方を使用する単一のルックアップを実行して、SIプロキシ3915の処理を識別する。また、いくつかの実施形態では、サービスプレーンは、ポートIDとMACアドレスとの関連付けを自動的に保存し、データプレーン転送中に宛先マシンの関連するポートIDとMACアドレスの両方を使用してSVM IOチェーンを識別する。
【0260】
[00298] 上述の特徴およびアプリケーションの多くは、コンピュータ可読記憶媒体(コンピュータ可読媒体とも呼ばれる)に記録された命令のセットとして規定されるソフトウェアプロセスとして実施される。これらの命令が、1つ以上の処理ユニット(例えば、1つ以上のプロセッサ、プロセッサのコア、または他の処理ユニット)によって実行されるとき、それらは、処理ユニットに、命令に示されたアクションを実行させる。コンピュータ可読媒体の例としては、CD-ROM、フラッシュドライブ、RAMチップ、ハードドライブ、EPROM等があるが、これらに限定されない。コンピュータ可読媒体は、有線で又は有線接続を介して通過する搬送波及び電気信号を含まない。
【0261】
[00299] この明細書において、「ソフトウェア」という用語は、プロセッサによって処理するためにメモリに読み込むことができる、読み取り専用メモリに存在するファームウェア、または磁気記憶装置に記憶されたアプリケーションを含むことを意味する。また、いくつかの実施形態において、複数のソフトウェア発明は、別個ソフトウェア発明を残しつつ、より大きなプログラムのサブパートとして実施することができる。いくつかの実施形態において、複数のソフトウェア発明は、別個のプログラムとして実施することもできる。最後に、ここに記載されるソフトウェア発明を共に実施する別個のプログラムの任意の組合せは、本発明の範囲内である。いくつかの実施形態では、ソフトウェアプログラムは、1つ以上の電子システム上で動作するようにインストールされると、ソフトウェアプログラムの動作を実行し実行する1つ以上の特定のマシン実装を定義する。
【0262】
[00300] 図40は、本発明のいくつかの実施形態が実施されるコンピュータシステム4000を概念的に示す。コンピュータシステム4000は、上述のホスト、コントローラ、およびマネージャのいずれかを実装するために使用することができる。したがって、上記のプロセスのいずれかを実行するために使用することができる。このコンピュータシステムは、様々なタイプの一時的でない機械可読媒体と、様々な他のタイプの機械可読媒体のためのインタフェースとを含む。コンピュータシステム4000は、バス4005、処理部4010、システムメモリ4025、読み出し専用メモリ4030、永続的記憶装置4035、入力装置4040、および出力装置4045を含む。
【0263】
[00301] バス4005は、コンピュータシステム4000の多数の内部装置を通信的に接続するすべてのシステム、周辺装置、およびチップセットバスを総称して表す。例えば、バス4005は、処理部4010を読み出し専用メモリ4030、システムメモリ4025、および永続的記憶装置4035と通信可能に接続する。
【0264】
[00302] これらの様々なメモリユニットから、処理部4010は、本発明のプロセスを実行するために、実行する命令と処理するデータを検索する。処理部は、様々な実施形態において、単一プロセッサまたはマルチコアプロセッサであってもよい。読み出し専用メモリ(ROM)4030は、処理部4010およびコンピュータシステムの他のモジュールによって必要とされる静的データおよび命令を格納する。一方、永続的記憶装置4035は、読み書き可能な記憶デバイスである。この装置は、コンピュータシステム4000がオフであっても命令及びデータを記憶する不揮発性メモリユニットである。本発明のいくつかの実施形態は、永続的記憶装置4035として大容量記憶装置(磁気または光ディスクおよびその対応するディスクドライブなど)を使用する。
【0265】
[00303] 他の実施形態は、永続的記憶装置としてリムーバブル記憶装置(フラッシュドライブ等)を使用する。永続的記憶装置4035と同様に、システムメモリ4025は、読み書き可能な記憶デバイスである。しかしながら、記憶デバイス4035とは異なり、システムメモリは、ランダムアクセスメモリのような揮発性の読み出し/書き込みメモリである。システムメモリには、プロセッサが実行時に必要とする命令とデータの一部が格納される。いくつかの実施形態では、本発明のプロセスは、システムメモリ4025、永続的記憶装置4035、および/または読み出し専用メモリ4030に記憶される。これらの様々なメモリユニットから、処理部4010は、いくつかの実施形態のプロセスを実行するために、実行する命令および処理するデータを検索する。
【0266】
[00304] バス4005は、入出力装置4040および4045にも接続する。入力装置は、ユーザが情報を伝達し、コンピュータシステムにコマンドを選択することを可能にする。入力装置4040は、英数字キーボード及びポインティングデバイス(「カーソル制御デバイス」とも呼ばれる)を含む。出力装置4045は、コンピュータシステムによって生成された画像を表示する。出力装置には、陰極線管(CRT)または液晶ディスプレイ(LCD)などのプリンタおよび表示装置が含まれる。いくつかの実施形態は、入力装置および出力装置の両方として機能するタッチスクリーンなどの装置を含む。
【0267】
[00305] 最後に、図40に示すように、バス4005は、ネットワークアダプタ(図示せず)を介して、コンピュータシステム4000をネットワーク4065に結合する。このようにして、コンピュータは、コンピュータのネットワーク(ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)、またはイントラネットの一部、あるいはインターネットのようなネットワークのネットワークであってもよい。コンピュータシステム4000の任意のまたはすべての構成要素を、本発明と併せて使用することができる。
【0268】
[00306] いくつかの実施形態は、コンピュータプログラム命令を、機械可読又はコンピュータ可読媒体(代替的には、コンピュータ可読記憶媒体、機械可読媒体、又は機械可読記憶媒体と称される)に記憶するマイクロプロセッサ、記憶装置及びメモリ等の電子コンポーネントを含む。このようなコンピュータ可読媒体のいくつかの例としては、RAM、ROM、読取り専用コンパクトディスク(CD-ROM)、記録可能コンパクトディスク(CD-R)、書き換え可能コンパクトディスク(CD-RW)、読取り専用デジタル汎用ディスク(例えば、DVD-ROM、デュアルレイヤDVD-ROM)、様々な記録可能/書き換え可能DVD(例えば、DVD-RAM、DVD-RW、DVD+RW等)、フラッシュメモリ(例えば、SDカード、mini-SDカード、マイクロSDカード等)、磁気および/またはソリッドステートハードドライブ、読取り専用および記録可能なBlu-Ray(登録商標)ディスク、超密度光ディスク、および他の任意の光または磁気媒体がある。コンピュータ可読媒体は、少なくとも1つの処理ユニットによって実行可能であり、様々な動作を実行するための命令のセットを含むコンピュータプログラムを記憶することができる。コンピュータプログラムまたはコンピュータコードの例としては、コンパイラによって生成されるようなマシンコードと、インタープリタを使用してコンピュータ、電子コンポーネント、またはマイクロプロセッサによって実行される上位レベルのコードを含むファイルがある。
【0269】
[00307] 上記の議論は、主に、ソフトウェアを実行するマイクロプロセッサまたはマルチコアプロセッサを指すが、いくつかの実施形態は、特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)のような、1つ以上の集積回路によって実行される。いくつかの実施形態では、このような集積回路は、回路自体に記憶された命令を実行する。
【0270】
[00308] 本明細書で使用される「コンピュータ」、「サーバ」、「プロセッサ」、「メモリ」という用語は、すべて電子的またはその他の技術的デバイスを指す。これらの用語は、人または人のグループを除く。明細書の目的上、表示または表示手段の用語は、電子デバイス上に表示することを意味する。本明細書で使用されるように、「コンピュータ可読媒体」(複数)、「コンピュータ可読媒体」、および「マシン読み取り可能媒体」という用語は、コンピュータが読み取り可能な形式で情報を格納する有形の物理オブジェクトに全体として限定される。これらの用語は、ワイヤレス信号、有線ダウンロード信号、およびその他の一時的または一時的な信号を除外する。
【0271】
[00309] 本発明は、多くの特定の詳細を参照して説明されてきたが、当業者は、本発明の意図から離れることなく、本発明が他の特定の形態で実施可能であることを認識するであろう。例えば、いくつかの図は、プロセスを概念的に示している。これらのプロセスの特定の操作は、示され、説明されている正確な順序では実行されない場合がある。特定の動作は、1つの連続した一連の動作で実行されなくてもよく、異なる特定の動作が様々な実施形態で実行されてもよい。さらに、プロセスは、いくつかのサブプロセスを使用して、またはより大きなマクロプロセスの一部として実装することができる。
【0272】
[00310] 上述のいくつかの例におけるサービス挿入ルールはサービスチェーン識別子を提供するが、本明細書に記載する発明のいくつかは、サービス挿入ルールがサービス挿入ルールによって指定される異なるサービスのサービス識別子(例えば、SPI)を提供することによって実施することができる。同様に、上述の実施形態のいくつかは、SPI/SI値に基づいて完全一致を実行することによって、次のサービスホップを識別する各サービスホップに依存する分散サービスルーティングを実行する。しかしながら、本明細書に記載する発明のいくつかは、サービス挿入プリプロセッサに、すべてのサービスホップ識別子(例えば、サービスホップMACアドレス)をデータメッセージのサービス属性セットおよび/またはデータメッセージのカプセル化サービスヘッダに埋め込むことによって実施することができる。
【0273】
[00311] さらに、いくつかの実施形態は、上記のアプローチとは異なるように(例えば、異なる時間に)SI値をデクリメントする。また、SPI値とSI値だけに基づいてネクストホップルックアップを実行する代わりに、いくつかの実施形態は、SPI、SIおよびサービス方向値に基づいてこのルックアップを実行し、これらの実施形態は、2つのマシン間を流れるデータメッセージの順方向と逆方向の両方に共通のSPI値を使用する。
【0274】
[00312] 上記の方法論は、単一テナント環境におけるパス情報を表現するために、いくつかの実施形態において使用される。したがって、本発明のいくつかの実施形態は、単一テナントのデータセンタに等しく適用可能であることを、当業者は理解するであろう。逆に、いくつかの実施形態では、上述の方法論は、1つのエンティティ(例えば、1つの企業)が異なるプロバイダの複数の異なるデータセンタ内のテナントであるとき、異なるデータセンタプロバイダの異なるデータセンタ間でパス情報を運ぶために使用される。これらの実施形態では、トンネルヘッダに埋め込まれるテナント識別子は、データセンタ全体で一意であるか、またはデータセンタ間を横断するときに置き換えらればならない。したがって、当業者であれば、本発明は、上述の例示的な詳細によって限定されるものではなく、むしろ、添付のクレームによって定義されるものであることが理解されるであろう。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34A
図34B
図34C
図35
図36
図37A
図37B
図37C
図38
図39
図40