クラりド むンフラストラクチャのネットワヌク郚分の抂芁

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

クラりドコンピュヌティングは私たちの生掻にたすたす浞透しおおり、クラりドサヌビスを䞀床も利甚したこずがない人はいないでしょう。 しかし、クラりドずは正確に䜕なのか、そしおそれがどのように機胜するのかを、アむデアのレベルであっおも知っおいる人はほずんどいたせん。 5G はすでに珟実になり぀぀あり、通信むンフラが完党なハヌドりェア ゜リュヌションから仮想化された「柱」に移行したずきず同じように、柱゜リュヌションからクラりド ゜リュヌションに移行し始めおいたす。

今日はクラりド むンフラストラクチャの内郚䞖界に぀いお、特にネットワヌク郚分の基本に぀いお説明したす。

クラりドずは䜕ですか? 同じ仮想化 - プロファむルビュヌ?

論理的な質問以䞊のものです。 いいえ、これは仮想化ではありたせんが、仮想化なしでは実珟できたせん。 XNUMX ぀の定矩を芋おみたしょう。

クラりドコンピュヌティング以䞋、クラりド 分散コンピュヌティング リ゜ヌスぞのナヌザヌ フレンドリヌなアクセスを提䟛するためのモデルです。分散コンピュヌティング リ゜ヌスは、可胜な限り埅ち時間を最小限に抑え、サヌビス プロバむダヌのコストを最小限に抑えお、オンデマンドで展開および起動する必芁がありたす。

仮想化 - これは、3 ぀の物理゚ンティティ (サヌバヌなど) を耇数の仮想゚ンティティに分割する機胜で、これによりリ゜ヌスの䜿甚率が向䞊したす (たずえば、25 台のサヌバヌが 30  1 パヌセントで負荷されおいたしたが、仮想化埌は 80 台のサヌバヌが負荷されるようになりたす) 90〜XNUMXパヌセント。 圓然のこずながら、仮想化はリ゜ヌスの䞀郚を消費したす。ハむパヌバむザヌに䟛絊する必芁がありたすが、実践が瀺しおいるように、このゲヌムにはろうそくの䟡倀がありたす。 仮想化の理想的な䟋ずしおは、仮想マシンを完党に準備する VMWare や、たずえば私が奜む KVM がありたすが、これは奜みの問題です。

私たちは無意識に仮想化を䜿甚しおおり、鉄のルヌタヌでさえもすでに仮想化を䜿甚しおいたす。たずえば、最新バヌゞョンの JunOS では、オペレヌティング システムはリアルタむム Linux ディストリビュヌション (Wind River 9) 䞊の仮想マシンずしおむンストヌルされたす。 ただし、仮想化はクラりドではありたせん。仮想化なしではクラりドは存圚できたせん。

仮想化は、クラりドを構築するための構成芁玠の XNUMX ぀です。

耇数のハむパヌバむザヌを 2 ぀の LXNUMX ドメむンに集めおクラりドを䜜成し、ある皮の Ansible を介しお VLAN を自動的に登録するための yaml プレむブックをいく぀か远加し、仮想マシンを自動的に䜜成するためにオヌケストレヌション システムのようなものをそこに詰め蟌むだけでは、機胜したせん。 それはより正確になりたすが、結果ずしお埗られるフランケンシュタむンは、他の人にずっおは究極の倢かもしれたせんが、私たちが必芁ずする雲ではありたせん。 さらに、同じ Openstack を䜿甚したずしおも、本質的にはフランケンシュタむンのたたですが、たあ、それに぀いおは今は話さないでおこうず思いたす。

しかし、䞊蚘の定矩からは、実際に䜕をクラりドず呌べるのかは完党には明らかではないこずは理解しおいたす。

したがっお、NIST (囜立暙準技術研究所) の文曞では、クラりド むンフラストラクチャが持぀べき 5 ぀の䞻な特性が瀺されおいたす。

リク゚ストに応じおサヌビスを提䟛したす。 ナヌザヌには、自分に割り圓おられたコンピュヌタヌ リ゜ヌス (ネットワヌク、仮想ディスク、メモリ、プロセッサ コアなど) ぞの自由なアクセスが䞎えられなければなりたせん。たた、これらのリ゜ヌスは、サヌビス プロバむダヌの介入なしに自動的に提䟛される必芁がありたす。

幅広いサヌビスが利甚可胜。 暙準の PC、シン クラむアント、およびモバむル デバむスの䞡方を䜿甚できるようにするには、リ゜ヌスぞのアクセスを暙準のメカニズムによっお提䟛する必芁がありたす。

リ゜ヌスをプヌルに結合したす。 リ゜ヌス プヌルは、耇数のクラむアントに同時にリ゜ヌスを提䟛でき、クラむアントが分離され、盞互圱響やリ゜ヌスの競合が発生しないようにする必芁がありたす。 ネットワヌクもプヌルに含たれおおり、重耇したアドレス指定が䜿甚される可胜性があるこずがわかりたす。 プヌルはオンデマンドで拡匵できる必芁がありたす。 プヌルを䜿甚するず、必芁なレベルのリ゜ヌス フォヌルト トレランスず、物理リ゜ヌスず仮想リ゜ヌスの抜象化を提䟛できたす。サヌビスの受信者には、芁求したリ゜ヌスのセットが提䟛されるだけです (これらのリ゜ヌスは物理的にどこに配眮され、いく぀あるのか)。サヌバヌずスむッチ - クラむアントにずっおは関係ありたせん)。 ただし、プロバむダヌはこれらのリ゜ヌスの透過的な予玄を保蚌する必芁があるずいう事実を考慮する必芁がありたす。

さたざたな条件ぞの玠早い適応。 サヌビスは柔軟である必芁がありたす。リ゜ヌスの迅速な提䟛、再配垃、クラむアントの芁求に応じたリ゜ヌスの远加たたは削枛など、クラむアント偎ではクラりド リ゜ヌスが無限であるず感じる必芁がありたす。 たずえば、理解を容易にするために、サヌバヌ䞊のハヌド ドラむブが故障したために Apple iCloud のディスク領域の䞀郚が消倱したずいう譊告は衚瀺されたせんが、ドラむブは実際に故障したす。 さらに、あなた偎では、このサヌビスの可胜性はほが無限です - 2 TB が必芁です - 問題ありたせん、あなたは支払い、受け取りたした。 同様の䟋は、Google.Drive たたは Yandex.Disk にも圓おはたりたす。

提䟛されたサヌビスを枬定する可胜性。 クラりド システムは、消費されるリ゜ヌスを自動的に制埡および最適化する必芁があり、これらのメカニズムはナヌザヌずサヌビス プロバむダヌの䞡方に察しお透過的である必芁がありたす。 ぀たり、あなたずあなたのクラむアントが消費しおいるリ゜ヌスの数をい぀でも確認できたす。

これらの芁件は䞻にパブリック クラりドの芁件であるため、プラむベヌト クラりド (぀たり、䌁業の内郚ニヌズのために立ち䞊げられたクラりド) の堎合は、これらの芁件を若干調敎できるずいう事実を考慮する䟡倀がありたす。 しかし、それでも実珟する必芁がありたす。そうしないず、クラりド コンピュヌティングのメリットをすべお享受できなくなりたす。

なぜクラりドが必芁なのでしょうか?

ただし、新芏たたは既存のテクノロゞ、新しいプロトコルは、䜕かのために䜜成されたす (もちろん、RIP-ng は陀きたす)。 プロトコルのためにプロトコルを必芁ずする人はいたせん (もちろん、RIP-ng を陀いお)。 クラりドがナヌザヌ/クラむアントに䜕らかのサヌビスを提䟛するために䜜成されるのは論理的です。 私たちは皆、Dropbox や Google.Docs など、少なくずも XNUMX ぀のクラりド サヌビスに粟通しおおり、ほずんどの人がそれらをうたく掻甚しおいるず思いたす。たずえば、この蚘事は Google.Docs クラりド サヌビスを䜿甚しお曞かれおいたす。 しかし、私たちが知っおいるクラりド サヌビスは、クラりドの機胜の䞀郚にすぎたせん。より正確には、それらは SaaS タむプのサヌビスにすぎたせん。 クラりドサヌビスはSaaS、PaaS、IaaSのXNUMX぀の方法で提䟛できたす。 どのようなサヌビスが必芁かは、あなたの垌望ず胜力によっお異なりたす。

それぞれを順番に芋おみたしょう。

サヌビスずしおの゜フトりェアSaaS Yandex.Mail や Gmail などの電子メヌル サヌビスなど、本栌的なサヌビスをクラむアントに提䟛するためのモデルです。 このサヌビス配信モデルでは、クラむアントずしおは、実際にはサヌビスを䜿甚するこず以倖は䜕もしたせん。぀たり、サヌビスの蚭定、そのフォヌルト トレランス、たたは冗長性に぀いお考える必芁はありたせん。 重芁なのはパスワヌドを危険にさらさないこずです。残りの䜜業はこのサヌビスのプロバむダヌが行いたす。 サヌビス プロバむダヌの芳点から芋るず、サヌバヌ ハヌドりェアやホスト オペレヌティング システムからデヌタベヌスや゜フトりェアの蚭定に至るたで、サヌビス党䜓に察しお党責任を負いたす。

サヌビスずしおのプラットフォヌムPaaSの — このモデルを䜿甚する堎合、サヌビスプロバむダヌはクラむアントにサヌビス甚のワヌクピヌスを提䟛したす。たずえば、Web サヌバヌを考えおみたしょう。 サヌビスプロバむダヌは、クラむアントに仮想サヌバヌ (実際には、RAM/CPU/ストレヌゞ/ネットなどのリ゜ヌスのセット) を提䟛し、このサヌバヌに OS ず必芁な゜フトりェアをむンストヌルしたす。これらすべおはクラむアント自身によっお行われ、クラむアントが応答するサヌビスのパフォヌマンスのために行われたす。 前のケヌスず同様に、サヌビス プロバむダヌは、物理機噚、ハむパヌバむザヌ、仮想マシン自䜓のパフォヌマンス、ネットワヌクの可甚性などに察しお責任を負いたすが、サヌビス自䜓はもはやその責任範囲ではありたせん。

サヌビスずしおのむンフラストラクチャIaaSの - このアプロヌチはすでにさらに興味深いものであり、実際、サヌビス プロバむダヌはクラむアントに完党な仮想化むンフラストラクチャ、぀たり CPU コア、RAM、ネットワヌクなどのリ゜ヌスのセット (プヌル) を提䟛したす。その他はすべお次第です。クラむアント - クラむアントが割り圓おられたプヌル (クォヌタ) 内でこれらのリ゜ヌスを䜿甚しお䜕をしたいか - サプラむダヌにずっおは特に重芁ではありたせん。 クラむアントが独自の vEPC を䜜成したい堎合でも、ミニ オペレヌタヌを䜜成しお通信サヌビスを提䟛したい堎合でも、疑いなく、それを実行しおください。 このようなシナリオでは、サヌビス プロバむダヌは、リ゜ヌス、そのフォヌルト トレランスず可甚性、およびこれらのリ゜ヌスをプヌルし、い぀でもリ゜ヌスを増枛できるようにクラむアントが利甚できるようにする OS のプロビゞョニングを担圓したす。クラむアントのリク゚ストに応じお。 クラむアントは、セルフサヌビス ポヌタルずコン゜ヌルを通じお、ネットワヌク (倖郚ネットワヌクを陀く) のセットアップを含め、すべおの仮想マシンずその他の芋掛け倒しを自分で構成したす。

オヌプンスタックずは䜕ですか?

XNUMX ぀のオプションすべおにおいお、サヌビス プロバむダヌにはクラりド むンフラストラクチャの䜜成を可胜にする OS が必芁です。 実際、SaaS では、耇数の郚門がテクノロゞヌのスタック党䜓を担圓したす。むンフラストラクチャを担圓する郚門がありたす。぀たり、別の郚門に IaaS を提䟛し、この郚門がクラむアントに SaaS を提䟛したす。 OpenStack は、倚数のスむッチ、サヌバヌ、ストレヌゞ システムを XNUMX ぀のリ゜ヌス プヌルに収集し、この共通プヌルをサブプヌル (テナント) に分割し、これらのリ゜ヌスをネットワヌク経由でクラむアントに提䟛できるクラりド オペレヌティング システムの XNUMX ぀です。

OpenStackは は、暙準の認蚌メカニズムを䜿甚する API を通じおプロビゞョニングおよび管理される、コンピュヌティング リ゜ヌス、デヌタ ストレヌゞ、およびネットワヌク リ゜ヌスの倧芏暡なプヌルを制埡できるクラりド オペレヌティング システムです。

蚀い換えれば、これはクラりド サヌビス (パブリックずプラむベヌトの䞡方) を䜜成するように蚭蚈された䞀連のフリヌ ゜フトりェア プロゞェクトです。぀たり、サヌバヌずスむッチング機噚を単䞀のリ゜ヌス プヌルに結合し、管理を可胜にするツヌルのセットです。これらのリ゜ヌスにより、必芁なレベルのフォヌルト トレランスが提䟛されたす。

この資料の執筆時点では、OpenStack の構造は次のようになりたす。
クラりド むンフラストラクチャのネットワヌク郚分の抂芁
からの写真 openstack.org

OpenStack に含たれる各コンポヌネントは、特定の機胜を実行したす。 この分散アヌキテクチャにより、必芁な機胜コンポヌネントのセットを゜リュヌションに含めるこずができたす。 ただし、䞀郚のコンポヌネントはルヌト コンポヌネントであり、それらを削陀するず、゜リュヌション党䜓が完党たたは郚分的に動䜜䞍胜になりたす。 これらのコンポヌネントは通垞、次のように分類されたす。

  • ダッシュボヌド — OpenStack サヌビスを管理するための Web ベヌスの GUI
  • キヌストヌン は、他のサヌビスの認蚌および認可機胜を提䟛し、ナヌザヌの資栌情報ずその圹割を管理する集䞭型の ID サヌビスです。
  • 䞭性子 - さたざたな OpenStack サヌビスのむンタヌフェむス間の接続を提䟛するネットワヌク サヌビス (VM 間の接続および倖郚䞖界ぞのアクセスを含む)
  • シンダヌ — 仮想マシンのブロック ストレヌゞぞのアクセスを提䟛したす
  • ノノァ — 仮想マシンのラむフサむクル管理
  • ひず目 — 仮想マシンのむメヌゞずスナップショットのリポゞトリ
  • スりィフト — ストレヌゞ オブゞェクトぞのアクセスを提䟛したす
  • シヌロメヌタヌ — テレメトリを収集し、利甚可胜なリ゜ヌスず消費されたリ゜ヌスを枬定する機胜を提䟛するサヌビス
  • ヒヌト — リ゜ヌスの自動䜜成ずプロビゞョニングのためのテンプレヌトに基づくオヌケストレヌション

すべおのプロゞェクトずその目的の完党なリストを衚瀺できたす。 ここで.

OpenStack の各コンポヌネントは、特定の機胜を実行し、その機胜を管理し、他のクラりド オペレヌティング システム サヌビスず察話しお統合むンフラストラクチャを䜜成するための API を提䟛するサヌビスです。 たずえば、Nova はコンピュヌティング リ゜ヌス管理ずこれらのリ゜ヌスの構成にアクセスするための API を提䟛し、Glance はむメヌゞ管理ずそれらを管理するための API を提䟛し、Cinder はブロック ストレヌゞずそれを管理するための API を提䟛したす。 すべおの機胜は非垞に密接に盞互接続されおいたす。

しかし、よく芋おみるず、OpenStack で実行されおいるすべおのサヌビスは、最終的にはネットワヌクに接続されたある皮の仮想マシン (たたはコンテナ) です。 なぜこれほど倚くの芁玠が必芁なのかずいう疑問が生じたす。

仮想マシンを䜜成し、それを Openstack のネットワヌクず氞続ストレヌゞに接続するためのアルゎリズムを芋おみたしょう。

  1. マシンを䜜成するリク゚ストを䜜成するずき、それが Horizo​​n (ダッシュボヌド) を介したリク゚ストであっおも、CLI を介したリク゚ストであっおも、最初に行われるのは Keystone でのリク゚ストの承認です。マシンを䜜成できたすか?このネットワヌクを䜿甚する暩利、ドラフトクォヌタなど。
  2. Keystone はリク゚ストを認蚌し、応答メッセヌゞ内に認蚌トヌクンを生成したす。このトヌクンはさらに䜿甚されたす。 Keystone から応答を受信するず、リク゚ストは Nova (nova API) に送信されたす。
  3. Nova-api は、以前に生成された認蚌トヌクンを䜿甚しお Keystone に接続し、リク゚ストの有効性をチェックしたす。
  4. Keystone は認蚌を実行し、この認蚌トヌクンに基づいお暩限ず制限に関する情報を提䟛したす。
  5. nova-api は、nova-database に新しい VM の゚ントリを䜜成し、マシンを䜜成するリク゚ストを nova-scheduler に枡したす。
  6. Nova スケゞュヌラは、指定されたパラメヌタ、重み、ゟヌンに基づいお VM が展開されるホスト (コンピュヌタ ノヌド) を遞択したす。 この蚘録ず VM ID が nova-database に曞き蟌たれたす。
  7. 次に、nova-scheduler は nova-compute に接続しお、むンスタンスのデプロむを芁求したす。 Nova-compute は、nova-conductor に接続しおマシンパラメヌタヌに関する情報を取埗したす (nova-conductor は、nova-database ず nova-compute の間のプロキシサヌバヌずしお機胜する nova 芁玠であり、デヌタベヌスの問題を回避するために nova-database ぞのリク゚ストの数を制限したす)䞀貫性負荷の軜枛)。
  8. Nova-conductor は、nova-database から芁求された情報を受け取り、それを nova-compute に枡したす。
  9. 次に、nova-compute は、glance を呌び出しおむメヌゞ ID を取埗したす。 Glace は Keystone でリク゚ストを怜蚌し、リク゚ストされた情報を返したす。
  10. Nova-compute は neutron に接続しお、ネットワヌク パラメヌタヌに関する情報を取埗したす。 グランスず同様に、neutron は Keystone でリク゚ストを怜蚌し、その埌デヌタベヌスに゚ントリ (ポヌト識別子など) を䜜成し、ポヌトを䜜成するリク゚ストを䜜成し、リク゚ストされた情報を nova-compute に返したす。
  11. Nova-compute は cinder に接続しお、仮想マシンにボリュヌムを割り圓おるリク゚ストを送信したす。 グランスず同様に、cider は Keystone でリク゚ストを怜蚌し、ボリュヌム䜜成リク゚ストを䜜成し、リク゚ストされた情報を返したす。
  12. Nova-compute は、指定されたパラメヌタヌを䜿甚しお仮想マシンをデプロむするリク゚ストを libvirt に送信したす。

実際、単玔な仮想マシンを䜜成するずいう䞀芋単玔な操䜜が、クラりド プラットフォヌムの芁玠間での API 呌び出しの枊に倉わりたす。 さらに、ご芧のずおり、以前に指定されたサヌビスも、盞互䜜甚が発生する小さなコンポヌネントで構成されおいたす。 マシンの䜜成は、クラりド プラットフォヌムで実行できるこずのほんの䞀郚にすぎたせん。トラフィックのバランスを担圓するサヌビス、ブロック ストレヌゞを担圓するサヌビス、DNS を担圓するサヌビス、ベア メタル サヌバヌのプロビゞョニングを担圓するサヌビスなどがありたす。クラりドを䜿甚するず、仮想マシンを (仮想化ではなく) 矊の矀れのように扱うこずができたす。 仮想環境でマシンに問題が発生した堎合 - バックアップなどから埩元したすが、クラりド アプリケヌションは仮想マシンがそれほど重芁な圹割を果たさないように構築されおいたす - 仮想マシンが「死亡」したした - 問題ありたせん- 新しい車䞡が䜜成されるだけで、車䞡はテンプレヌトに基づいおおり、圌らが蚀うように、分隊は戊闘機の損倱に気づきたせんでした。 圓然のこずながら、これによりオヌケストレヌション メカニズムが提䟛されたす。Heat テンプレヌトを䜿甚するず、数十のネットワヌクず仮想マシンで構成される耇雑な機胜を簡単にデプロむできたす。

ネットワヌクのないクラりド むンフラストラクチャは存圚しないこずを垞に念頭に眮く䟡倀がありたす。各芁玠はネットワヌクを通じお䜕らかの方法で他の芁玠ず察話したす。 さらに、クラりドには完党に非静的なネットワヌクがありたす。 圓然のこずながら、アンダヌレむ ネットワヌクは倚かれ少なかれ静的です。新しいノヌドやスむッチは毎日远加されるわけではありたせんが、オヌバヌレむ コンポヌネントは垞に倉化する可胜性があり、必然的に倉化したす。新しいネットワヌクが远加たたは削陀され、新しい仮想マシンが珟れたり、叀い仮想マシンが珟れたりしたす。死ぬ。 そしお、この蚘事の最初に瀺したクラりドの定矩から芚えおいるように、リ゜ヌスは自動的に、サヌビス プロバむダヌの介入を最小限に (たたはできれば、介入なしで) ナヌザヌに割り圓おられる必芁がありたす。 ぀たり、http/https 経由でアクセスできる個人アカりントの圢でフロント゚ンドの圢で存圚し、バック゚ンドずしお勀務䞭のネットワヌク ゚ンゞニアである Vasily が提䟛するネットワヌク リ゜ヌスの提䟛のタむプは、クラりドではありたせん。ノァシリヌがXNUMX本の手を持っおいたら。

Neutron は、ネットワヌク サヌビスずしお、クラりド むンフラストラクチャのネットワヌク郚分を管理するための API を提䟛したす。 このサヌビスは、Network-as-a-Service (NaaS) ず呌ばれる抜象化レむダヌを提䟛するこずで、Openstack のネットワヌク郚分を匷化および管理したす。 ぀たり、ネットワヌクは、仮想 CPU コアや RAM の量などず同じ仮想的な枬定可胜な単䜍です。

ただし、OpenStack のネットワヌク郚分のアヌキテクチャに進む前に、このネットワヌクが OpenStack でどのように機胜するのか、たたネットワヌクがクラ​​りドの重芁か぀䞍可欠な郚分である理由を考えおみたしょう。

したがっお、XNUMX ぀の RED クラむアント VM ず XNUMX ぀の GREEN クラむアント VM がありたす。 これらのマシンが次のように XNUMX ぀のハむパヌバむザヌ䞊に配眮されおいるず仮定したす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

珟時点では、これは 4 台のサヌバヌを仮想化するだけであり、それ以䞊のこずはありたせん。これたでに行ったのは 4 台のサヌバヌを仮想化し、XNUMX 台の物理サヌバヌに配眮するこずだけです。 そしお今のずころ、ネットワヌクにも接続されおいたせん。

クラりドを䜜成するには、いく぀かのコンポヌネントを远加する必芁がありたす。 たず、ネットワヌク郚分を仮想化したす。これら 4 台のマシンをペアで接続する必芁があり、クラむアントは L2 接続を必芁ずしたす。 スむッチを䜿甚しおその方向にトランクを構成し、Linux ブリッゞを䜿甚しおすべおを解決するか、より䞊玚ナヌザヌの堎合は openvswitch (これに぀いおは埌で説明したす) を䜿甚しおすべおを解決できたす。 しかし、ネットワヌクは倚数存圚する可胜性があり、垞にスむッチを介しお L2 をプッシュするこずは最良のアむデアではありたせん。さたざたな郚門があり、サヌビス デスクがあり、アプリケヌションが完了するたで数か月埅ち、トラブルシュヌティングに数週間かかりたす。珟代の䞖界では、これはアプロヌチはもう機胜したせん。 そしお、䌁業がこれを理解するのが早ければ早いほど、前進するこずが容易になりたす。 したがっお、ハむパヌバむザヌ間で、仮想マシンが通信する L3​​ ネットワヌクを遞択し、この L3 ネットワヌク䞊に、仮想マシンのトラフィックが実行される仮想 L2 オヌバヌレむ ネットワヌクを構築したす。 カプセル化ずしお GRE、Geneve、たたは VxLAN を䜿甚できたす。 特に重芁ではありたせんが、今は埌者に焊点を圓おたしょう。

VTEP をどこかに芋぀ける必芁がありたす (皆さんが VxLAN の甚語に粟通しおいるこずを願っおいたす)。 サヌバヌから盎接 L3 ネットワヌクが接続されおいるため、サヌバヌ自䜓に VTEP を配眮するこずを劚げるものは䜕もありたせん。OVS (OpenvSwitch) はこれを行うのに優れおいたす。 その結果、次のようなデザむンが埗られたした。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

VM 間のトラフィックは分割する必芁があるため、仮想マシンぞのポヌトには異なる VLAN 番号が割り圓おられたす。 タグ番号は XNUMX ぀の仮想スむッチ内でのみ圹割を果たしたす。これは、VxLAN にカプセル化されおいる堎合、VNI があるため簡単に削陀できるためです。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

これで、問題なくマシンずその仮想ネットワヌクを䜜成できるようになりたした。

しかし、クラむアントに別のマシンがあり、別のネットワヌク䞊にある堎合はどうなるでしょうか? ネットワヌク間で root 化が必芁です。 集䞭ルヌティングが䜿甚される堎合の単玔なオプションを芋おいきたす。぀たり、トラフィックは特別な専甚ネットワヌク ノヌドを介しおルヌティングされたす (通垞、それらは制埡ノヌドず結合されるため、同じこずになりたす)。

耇雑なこずは䜕もないようです。制埡ノヌド䞊にブリッゞ むンタヌフェむスを䜜成し、そこにトラフィックを送り、そこから必芁な堎所にルヌティングしたす。 しかし、問題は、RED クラむアントが 10.0.0.0/24 ネットワヌクの䜿甚を垌望し、GREEN クラむアントが 10.0.0.0/24 ネットワヌクの䜿甚を垌望しおいるこずです。 ぀たり、アドレス空間が亀差し始めたす。 さらに、クラむアントは他のクラむアントが内郚ネットワヌクにルヌティングできるこずを望んでいたせんが、これは圓然のこずです。 ネットワヌクずクラむアント デヌタ トラフィックを分離するために、それぞれに個別の名前空間を割り圓おたす。 名前空間は、実際には、Linux ネットワヌク スタックのコピヌです。぀たり、名前空間 RED のクラむアントは、名前空間 GREEN のクラむアントから完党に分離されおいたす (これらのクラむアント ネットワヌク間のルヌティングは、デフォルトの名前空間たたは䞊流のトランスポヌト機噚を介しお蚱可されたす)。

぀たり、次の図が埗られたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

L2 トンネルは、すべおのコンピュヌティング ノヌドから制埡ノヌドに集䞭したす。 これらのネットワヌクの L3 むンタヌフェむスが配眮されるノヌド。それぞれが分離のための専甚の名前空間にありたす。

しかし、私たちは最も重芁なこずを忘れおいたした。 仮想マシンはクラむアントにサヌビスを提䟛する必芁がありたす。぀たり、仮想マシンにアクセスできる倖郚むンタヌフェむスが少なくずも XNUMX ぀必芁です。 ぀たり、倖の䞖界ぞ出おいく必芁があるのです。 ここにはさたざたなオプションがありたす。 最も単玔なオプションを実行したしょう。 各クラむアントに XNUMX ぀のネットワヌクを远加したす。このネットワヌクはプロバむダヌのネットワヌク内で有効であり、他のネットワヌクず重耇したせん。 ネットワヌクは亀差しお、プロバむダヌ ネットワヌク偎の異なる VRF を確認するこずもできたす。 ネットワヌク デヌタも各クラむアントの名前空間に存圚したす。 ただし、それらは䟝然ずしお XNUMX ぀の物理 (たたは結合、より論理的な) むンタヌフェむスを介しお倖の䞖界に出たす。 クラむアント トラフィックを分離するために、倖郚に送信されるトラフィックには、クラむアントに割り圓おられた VLAN タグが付けられたす。

その結果、次の図が埗られたした。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

圓然の疑問は、なぜ蚈算ノヌド自䜓にゲヌトりェむを䜜成しないのかずいうこずです。 これは倧きな問題ではありたせん。さらに、分散ルヌタヌ (DVR) をオンにするず、これが機胜したす。 このシナリオでは、Openstack でデフォルトで䜿甚される集䞭型ゲヌトりェむを䜿甚した最も単玔なオプションを怜蚎したす。 高負荷機胜の堎合、分散ルヌタヌず SR-IOV やパススルヌなどの高速化テクノロゞヌの䞡方を䜿甚したすが、圌らが蚀うように、それはたったく別の話です。 たず基本的な郚分に぀いお説明し、次に詳现を説明したす。

実際、私たちのスキヌムはすでに実行可胜ですが、いく぀かのニュアンスがありたす。

  • 䜕らかの方法でマシンを保護する必芁がありたす。぀たり、クラむアントぞのスむッチ むンタヌフェむスにフィルタヌを蚭定する必芁がありたす。
  • 仮想マシンが自動的に IP アドレスを取埗できるようにするず、毎回コン゜ヌルからログむンしおアドレスを登録する必芁がなくなりたす。

たずはマシンを保護するこずから始めたしょう。 このためには、平凡な iptables を䜿甚できたす。

぀たり、トポロゞはもう少し耇雑になっおいたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

次ぞ移りたしょう。 DHCP サヌバヌを远加する必芁がありたす。 各クラむアントの DHCP サヌバヌを配眮する最も理想的な堎所は、ネヌムスペヌスが配眮されおいる前述の制埡ノヌドです。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

ただし、小さな問題がありたす。 すべおが再起動され、DHCP 䞊のアドレスのレンタルに関する情報がすべお消えおしたったらどうなるでしょうか。 マシンに新しいアドレスが䞎えられるのは圓然ですが、これはあたり䟿利ではありたせん。 ここには 8 ぀の方法がありたす - ドメむン名を䜿甚するか、クラむアントごずに DNS サヌバヌを远加したす。そうすれば、アドレスは私たちにずっお特に重芁ではなくなりたす (kXNUMXs のネットワヌク郚分ず同様) - しかし、倖郚ネットワヌクには問題がありたす。アドレスは DHCP 経由で発行するこずもできたす。クラりド プラットフォヌム内の DNS サヌバヌおよび倖郚 DNS サヌバヌずの同期が必芁です。私の意芋では、これはあたり柔軟性がありたせんが、十分に可胜です。 たたは、XNUMX 番目のオプションは、メタデヌタを䜿甚するこずです。぀たり、マシンに発行されたアドレスに関する情報を保存しお、マシンがすでにアドレスを受信しお​​いる堎合に、DHCP サヌバヌがそのマシンにどのアドレスを発行するかを認識できるようにしたす。 XNUMX 番目のオプションは、車に関する远加情報を保存できるため、よりシンプルで柔軟です。 次に、゚ヌゞェントのメタデヌタを図に远加したしょう。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

議論する䟡倀のあるもう XNUMX ぀の問題は、すべおのクラむアントが XNUMX ぀の倖郚ネットワヌクを䜿甚できるこずです。倖郚ネットワヌクがネットワヌク党䜓で有効である必芁がある堎合、倖郚ネットワヌクは困難になるため、これらのネットワヌクの割り圓おを垞に割り圓おお制埡する必芁がありたす。 すべおのクラむアントに察しお単䞀の事前構成枈み倖郚ネットワヌクを䜿甚できる機胜は、パブリック クラりドを䜜成するずきに非垞に圹立ちたす。 これにより、アドレス デヌタベヌスを参照しお各クラむアントの倖郚ネットワヌクに固有のアドレス空間を遞択する必芁がなくなるため、マシンの展開が容易になりたす。 さらに、倖郚ネットワヌクを事前に登録でき、展開時に倖郚アドレスをクラむアント マシンに関連付けるだけで枈みたす。

ここで NAT が圹に立ちたす。NAT 倉換を䜿甚しお、クラむアントがデフォルトの名前空間を通じお倖郚の䞖界にアクセスできるようにするだけです。 さお、ここで小さな問題がありたす。 これは、クラむアント サヌバヌがサヌバヌずしおではなくクラむアントずしお機胜する堎合、぀たり接続を受け入れるのではなく開始する堎合に適しおいたす。 しかし、私たちにずっおは逆になりたす。 この堎合、トラフィックを受信するずきに、このトラフィックがクラむアント A の仮想マシン A 宛おであるこずを制埡ノヌドが理解できるように、宛先 NAT を実行する必芁がありたす。぀たり、倖郚アドレス (100.1.1.1 など) から NAT 倉換を行う必芁がありたす。 .10.0.0.1、内郚アドレス 100 ぞ。 この堎合、すべおのクラむアントが同じネットワヌクを䜿甚したすが、内郚の分離は完党に維持されたす。 ぀たり、制埡ノヌドで dNAT ず sNAT を実行する必芁がありたす。 フロヌティング アドレスを持぀単䞀のネットワヌクを䜿甚するか、倖郚ネットワヌクを䜿甚するか、あるいはその䞡方を同時に䜿甚するかは、クラりドに䜕を取り蟌みたいかによっお異なりたす。 この図にはフロヌティング アドレスを远加したせんが、すでに远加されおいる倖郚ネットワヌクはそのたたにしおおきたす。各クラむアントには独自の倖郚ネットワヌクがありたす (図では、倖郚むンタヌフェむス䞊で vlan 200 および XNUMX ずしお瀺されおいたす)。

その結果、䞀定の柔軟性はあるものの、フォヌルト トレランス メカニズムがただ備わっおいない、興味深いず同時によく考え抜かれた゜リュヌションを受け取りたした。

たず、制埡ノヌドは 3 ぀だけです。その障害はすべおのシステムの厩壊に぀ながりたす。 この問題を解決するには、少なくずも XNUMX ぀のノヌドのクォヌラムを䜜成する必芁がありたす。 これを図に远加しおみたしょう。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

圓然のこずながら、すべおのノヌドは同期されおおり、アクティブなノヌドが離れるず、別のノヌドがその責任を匕き継ぎたす。

次の問題は仮想マシンのディスクです。 珟時点では、それらはハむパヌバむザヌ自䜓に保存されおおり、ハむパヌバむザヌに問題が発生した堎合、すべおのデヌタが倱われたす。ディスクではなくサヌバヌ党䜓が倱われるず、RAID の存圚は圹に立ちたせん。 これを行うには、ある皮のストレヌゞのフロント゚ンドずしお機胜するサヌビスを䜜成する必芁がありたす。 どのような皮類のストレヌゞになるかは私たちにずっお特に重芁ではありたせんが、ディスクずノヌドの䞡方、堎合によっおはキャビネット党䜓の障害からデヌタを保護する必芁がありたす。 ここにはいく぀かのオプションがありたす - もちろん、ファむバヌ チャネルを備えた SAN ネットワヌクもありたすが、正盎に蚀いたす - FC はすでに過去の遺物です - トランスポヌトにおける E1 の類䌌物です - はい、同意したす、ただ䜿甚されおいたすが、それなしでは絶察に䞍可胜な堎合にのみ。 したがっお、他にもっず興味深い代替手段があるこずを知っおいるので、私は 2020 幎に自発的に FC ネットワヌクを展開する぀もりはありたせん。 人それぞれですが、限界がある FC だけで十分だず信じる人もいるかもしれたせん。私は異論はありたせん。人それぞれの意芋がありたす。 ただし、私の意芋では、最も興味深い解決策は、Ceph などの SDS を䜿甚するこずです。

Ceph を䜿甚するず、パリティ チェック (RAID 5 たたは 6 に類䌌) を備えたコヌドから始たり、ディスクの堎所を考慮した別のディスクぞの完党なデヌタ レプリケヌションで終わる、倚数のバックアップ オプションを備えた可甚性の高いデヌタ ストレヌゞ ゜リュヌションを構築できたす。サヌバヌ、キャビネット内のサヌバヌなど。

Ceph を構築するには、さらに 3 ぀のノヌドが必芁です。 ストレヌゞずの察話も、ブロック、オブゞェクト、およびファむル ストレヌゞ サヌビスを䜿甚しおネットワヌク経由で実行されたす。 図にストレヌゞを远加しおみたしょう。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

泚: ハむパヌコンバヌゞド コンピュヌティング ノヌドを䜜成するこずもできたす。これは、ceph ストレヌゞ専甚の特別なノヌドを䜿甚せずに、XNUMX ぀のノヌド䞊で耇数の機胜 (たずえば、ストレヌゞ + コンピュヌティング) を組み合わせるずいう抂念です。 SDS は指定した予玄レベルでデヌタを予玄するため、同じフォヌルト トレラント スキヌムが埗られたす。 ただし、ハむパヌコンバヌゞド ノヌドには垞に劥協が䌎いたす。ストレヌゞ ノヌドは䞀芋したように空気を加熱するだけではなく (仮想マシンが存圚しないため)、SDS のサヌビスに CPU リ゜ヌスを費やしたす (実際には、ストレヌゞ ノヌドはすべおを実行したす)。ノヌドやディスクなどの障害埌のレプリケヌションずリカバリ)。 ぀たり、コンピュヌティング ノヌドをストレヌゞず組み合わせるず、その胜力の䞀郚が倱われたす。

これらすべおを䜕らかの方法で管理する必芁がありたす。マシン、ネットワヌク、仮想ルヌタヌなどを䜜成できるものが必芁です。これを行うには、ダッシュボヌドずしお機胜するサヌビスを制埡ノヌドに远加したす。クラむアントは http/https 経由でこのポヌタルに接続し、必芁なすべおのこずを (ほが) 行うこずができたす。

その結果、珟圚ではフォヌルトトレラントなシステムが完成したした。 このむンフラストラクチャのすべおの芁玠は、䜕らかの方法で管理する必芁がありたす。 Openstack は䞀連のプロゞェクトであり、それぞれが特定の機胜を提䟛するこずは前述したした。 ご芧のずおり、構成および制埡する必芁がある芁玠は十分すぎるほどありたす。 今日はネットワヌク郚分に぀いおお話したす。

䞭性子アヌキテクチャ

OpenStack では、仮想マシンのポヌトを共通の L2 ネットワヌクに接続し、異なる L2 ネットワヌクにある VM 間のトラフィック ルヌティングず倖郚ルヌティングを確保し、NAT、フロヌティング IP、DHCP などのサヌビスを提䟛するのは Neutron です。

ネットワヌク サヌビスの動䜜 (基本郚分) は、倧たかに次のように説明できたす。

VM を起動するず、ネットワヌク サヌビスは次のようになりたす。

  1. 指定された VM (たたは耇数のポヌト) のポヌトを䜜成し、それに぀いお DHCP サヌビスに通知したす。
  2. 新しい仮想ネットワヌクデバむスが (libvirt 経由で) 䜜成されたす。
  3. VM は手順 1 で䜜成したポヌトに接続したす。

奇劙なこずに、Neutron の䜜業は、Linux に興味を持ったこずがある人なら誰でもよく知っおいる暙準メカニズム (名前空間、iptables、linux ブリッゞ、openvswitch、conntrack など) に基づいおいたす。

Neutron が SDN コントロヌラヌではないこずを盎ちに明確にする必芁がありたす。

Neutron は、盞互接続されたいく぀かのコンポヌネントで構成されおいたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

Openstack-neutron-サヌバヌ API を介しおナヌザヌのリク゚ストを凊理するデヌモンです。 このデヌモンはネットワヌク接続の登録には関䞎したせんが、これに必芁な情報をプラグむンに提䟛し、プラグむンが目的のネットワヌク芁玠を構成したす。 OpenStack ノヌド䞊の Neutron ゚ヌゞェントは、Neutron サヌバヌに登録したす。

Neutron-server は実際には Python で曞かれたアプリケヌションで、次の XNUMX ぀の郚分で構成されたす。

  • RESTサヌビス
  • Neutron プラグむン (コア/サヌビス)

REST サヌビスは、他のコンポヌネントから API 呌び出し (たずえば、䜕らかの情報を提䟛するリク゚ストなど) を受信するように蚭蚈されおいたす。

プラグむンは、API リク゚スト䞭に呌び出されるプラグむン ゜フトりェア コンポヌネント/モゞュヌルです。぀たり、サヌビスの垰属はプラグむンを通じお行われたす。 プラグむンは、サヌビスずルヌトの 2 ぀のタむプに分類されたす。 通垞、horse プラグむンは䞻に VM 間のアドレス空間ず LXNUMX 接続の管理を担圓し、サヌビス プラグむンはすでに VPN や FW などの远加機胜を提䟛しおいたす。

珟圚利甚可胜なプラグむンのリストは次のように衚瀺できたす。 ここで

サヌビス プラグむンは耇数存圚できたすが、銬プラグむンは XNUMX ぀だけです。

openstack-neutron-ml2 暙準の OpenStack ルヌト プラグむンです。 このプラグむンは (以前のプラグむンずは異なり) モゞュラヌ アヌキテクチャを備えおおり、接続されおいるドラむバヌを通じおネットワヌク サヌビスを構成したす。 プラグむン自䜓に぀いおは、埌で少し芋おいきたす。実際、このプラグむンは、ネットワヌク郚分で OpenStack が持぀柔軟性を提䟛するからです。 ルヌト プラグむンは眮き換えるこずができたす (たずえば、Contrail Networking はそのような眮き換えを行いたす)。

RPC サヌビス (rabbitmq-server) — キュヌ管理ず他の OpenStack サヌビスずの察話、およびネットワヌク サヌビス ゚ヌゞェント間の察話を提䟛するサヌビス。

ネットワヌク゚ヌゞェント — 各ノヌドに配眮され、ネットワヌク サヌビスが蚭定される゚ヌゞェント。

゚ヌゞェントにはいく぀かの皮類がありたす。

䞻な゚ヌゞェントは、 L2゚ヌゞェント。 これらの゚ヌゞェントは、制埡ノヌドを含む各ハむパヌバむザヌ䞊 (より正確には、テナントにサヌビスを提䟛するすべおのノヌド䞊) で実行され、その䞻な機胜は、仮想マシンを共通の L2 ネットワヌクに接続し、むベントが発生したずきにアラヌトを生成するこずです (たずえば、ポヌトを無効/有効にしたす)。

次の、同様に重芁な゚ヌゞェントは、 L3゚ヌゞェント。 デフォルトでは、この゚ヌゞェントはネットワヌク ノヌド (倚くの堎合、ネットワヌク ノヌドは制埡ノヌドず組み合わされたす) 䞊で排他的に実行され、テナント ネットワヌク間 (そのネットワヌクず他のテナントのネットワヌク間の䞡方) のルヌティングを提䟛し、倖郚からアクセス可胜です。 NAT、および DHCP サヌビス)。 ただし、DVR (分散ルヌタヌ) を䜿甚する堎合、コンピュヌティング ノヌドにも L3 プラグむンが必芁になりたす。

L3 ゚ヌゞェントは、Linux 名前空間を䜿甚しお、各テナントに独自の分離ネットワヌクのセットず、トラフィックをルヌティングし、レむダヌ 2 ネットワヌクにゲヌトりェむ サヌビスを提䟛する仮想ルヌタヌの機胜を提䟛したす。

デヌタベヌス — ネットワヌク、サブネット、ポヌト、プヌルなどの識別子のデヌタベヌス。

実際、Neutron は、任意のネットワヌク ゚ンティティの䜜成からの API リク゚ストを受け入れ、リク゚ストを認蚌し、RPC (プラグむンたたぱヌゞェントにアクセスする堎合) たたは REST API (SDN で通信する堎合) を介しお (プラグむン経由で) ゚ヌゞェントに送信したす。芁求されたサヌビスを線成するために必芁な指瀺。

次に、テスト むンストヌル (どのように展開されるか、䜕が含たれるかに぀いおは、実践線で埌ほど説明したす) に移り、各コンポヌネントがどこにあるかを確認しおみたしょう。

(overcloud) [stack@undercloud ~]$ openstack network agent list  
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host                                | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| 10495de9-ba4b-41fe-b30a-b90ec3f8728b | Open vSwitch agent | overcloud-novacompute-1.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| 1515ad4a-5972-46c3-af5f-e5446dff7ac7 | L3 agent           | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-l3-agent          |
| 322e62ca-1e5a-479e-9a96-4f26d09abdd7 | DHCP agent         | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-dhcp-agent        |
| 9c1de2f9-bac5-400e-998d-4360f04fc533 | Open vSwitch agent | overcloud-novacompute-0.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| d99c5657-851e-4d3c-bef6-f1e3bb1acfb0 | Open vSwitch agent | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-openvswitch-agent |
| ff85fae6-5543-45fb-a301-19c57b62d836 | Metadata agent     | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-metadata-agent    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
(overcloud) [stack@undercloud ~]$ 

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

実際、それが Neutron の党䜓構造です。 ここで、ML2 プラグむンに時間を費やす䟡倀がありたす。

モゞュラヌレむダヌ2

前述したように、このプラグむンは暙準の OpenStack ルヌト プラグむンであり、モゞュラヌ アヌキテクチャを備えおいたす。

ML2 プラグむンの前のバヌゞョンはモノリシック構造を持っおいたため、たずえば、2 ぀のむンストヌルで耇数のテクノロゞヌを組み合わせお䜿甚​​するこずはできたせんでした。 たずえば、openvswitch ず linuxbridge の䞡方 (XNUMX 番目たたは XNUMX 番目のどちらか) を同時に䜿甚するこずはできたせん。 このため、そのアヌキテクチャを備えた MLXNUMX プラグむンが䜜成されたした。

ML2 には XNUMX ぀のコンポヌネント、぀たりタむプ ドラむバヌずメカニズム ドラむバヌの XNUMX 皮類のドラむバヌがありたす。

タむプドラむバヌ ネットワヌク接続を構成するために䜿甚されるテクノロゞヌ (VxLAN、VLAN、GRE など) を決定したす。 同時に、ドラむバヌによりさたざたなテクノロゞヌの䜿甚が可胜になりたす。 暙準テクノロゞヌは、オヌバヌレむ ネットワヌクおよび VLAN 倖郚ネットワヌク甚の VxLAN カプセル化です。

タむプ ドラむバヌには次のネットワヌク タむプが含たれたす。

フラット型の刃は完党に平行な状態ではありたせんが、コニカル型の刃よりも明らかに平らになっおおり、幅もコニカル刃に比べお広いこずが倚いです。 - タグなしのネットワヌク
VLAN - タグ付きネットワヌク
ロヌカル — オヌルむンワン むンストヌル甚の特殊なタむプのネットワヌク (このようなむンストヌルは開発者たたはトレヌニングのいずれかに必芁です)
GRE — GREトンネルを䜿甚したオヌバヌレむネットワヌク
VxLAN — VxLAN トンネルを䜿甚したオヌバヌレむ ネットワヌク

メカニズムドラむバヌ タむプ ドラむバヌで指定されたテクノロゞヌ (openvswitch、sr-iov、opendaylight、OVN など) を確実に構成するツヌルを定矩したす。

このドラむバヌの実装に応じお、Neutron によっお制埡される゚ヌゞェントが䜿甚されるか、倖郚 SDN コントロヌラヌぞの接続が䜿甚され、L2 ネットワヌクの線成やルヌティングなどに関連するすべおの問題が凊理されたす。

䟋: ML2 を OVS ずずもに䜿甚する堎合、OVS を管理する各コンピュヌティング ノヌドに L2 ゚ヌゞェントがむンストヌルされたす。 ただし、たずえば OVN や OpenDayLight を䜿甚する堎合、OVS の制埡はその管蜄䞋にありたす。Neutron はルヌト プラグむンを通じおコン​​トロヌラヌにコマンドを䞎え、指瀺されたこずをすでに実行したす。

Open vSwitch をブラッシュアップしたしょう

珟時点では、OpenStack の䞻芁コンポヌネントの XNUMX ぀は Open vSwitch です。
Juniper Contrail や Nokia Nuage などの远加のベンダヌ SDN を䜿甚せずに OpenStack をむンストヌルする堎合、OVS はクラりド ネットワヌクの䞻芁なネットワヌク コンポヌネントであり、iptables、conntrack、名前空間ず組み合わせお、本栌的なマルチテナント オヌバヌレむ ネットワヌクを線成できたす。 圓然のこずながら、このコンポヌネントは、たずえばサヌドパヌティ独自の (ベンダヌ) SDN ゜リュヌションを䜿甚する堎合に眮き換えるこずができたす。

OVS は、仮想化環境で仮想トラフィック フォワヌダヌずしお䜿甚するために蚭蚈されたオヌプン ゜ヌス ゜フトりェア スむッチです。

珟時点では、OVS には、QoS、LACP、VLAN、VxLAN、GENEVE、OpenFlow、DPDK などのテクノロゞヌを含む、非垞に優れた機胜がありたす。

泚: OVS は圓初、高負荷の電気通信機胜甚の゜フト スむッチずしお考えられたものではなく、WEB サヌバヌやメヌル サヌバヌなどの垯域幅芁求の少ない IT 機胜向けに蚭蚈されたした。 ただし、OVS はさらに開発が進められおおり、珟圚の OVS 実装ではパフォヌマンスず機胜が倧幅に向䞊しおいるため、通信事業者が高負荷の機胜を䜿甚できるようになりたした。たずえば、DPDK アクセラレヌションをサポヌトする OVS 実装がありたす。

OVS には、次の XNUMX ぀の重芁なコンポヌネントがあるこずに泚意しおください。

  • カヌネルモゞュヌル — カヌネル空間に配眮され、制埡芁玠から受信したルヌルに基づいおトラフィックを凊理するコンポヌネント。
  • vスむッチ デヌモン (ovs-vswitchd) は、カヌネル モゞュヌルのプログラミングを担圓するナヌザヌ空間で起動されるプロセスです。぀たり、スむッチの動䜜ロゞックを盎接衚したす。
  • デヌタベヌスサヌバヌ - OVS を実行しおいる各ホストに配眮され、構成が保存されるロヌカル デヌタベヌス。 SDN コントロヌラヌは、OVSDB プロトコルを䜿甚しおこのモゞュヌルを通じお通信できたす。

これらすべおには、ovs-vsctl、ovs-appctl、ovs-ofctl などの䞀連の蚺断および管理ナヌティリティが付属しおいたす。

珟圚、Openstack は、EPC、SBC、HLR などのネットワヌク機胜を Openstack に移行するために通信事業者によっお広く䜿甚されおいたす。䞀郚の機胜はそのたた OVS で問題なく動䜜したすが、たずえば、EPC は加入者のトラフィックを凊理し、その埌通過したす。膚倧な量のトラフィック (珟圚、トラフィック量は毎秒数癟ギガビットに達しおいたす)。 圓然のこずながら、このようなトラフィックをカヌネル空間経由で転送するこずは (フォワヌダヌがデフォルトでカヌネル空間に配眮されおいるため) 最善のアむデアではありたせん。 したがっお、OVS は倚くの堎合、カヌネルをバむパスしお NIC からナヌザヌ空間にトラフィックを転送する DPDK アクセラレヌション テクノロゞを䜿甚しお、完党にナヌザヌ空間に展開されたす。

泚: 通信機胜甚に展開されたクラりドの堎合、OVS をバむパスしおコンピュヌティング ノヌドからスむッチング機噚にトラフィックを盎接出力するこずが可胜です。 この目的には、SR-IOV およびパススルヌ メカニズムが䜿甚されたす。

これは実際のレむアりトではどのように機胜するのでしょうか?

それでは、実践的な郚分に移り、実際にすべおがどのように機胜するかを芋おみたしょう。

たず、単玔な Openstack むンストヌルをデプロむしたしょう。 実隓甚のサヌバヌセットが手元にないため、仮想マシンから XNUMX 台の物理サヌバヌ䞊にプロトタむプを組み立おたす。 はい、圓然のこずながら、このような゜リュヌションは商業目的には適しおいたせんが、OpenStack でネットワヌクがどのように機胜するかを瀺す䟋を芋るには、このようなむンストヌルで十分です。 さらに、このようなむンスタレヌションは、亀通状況などを把握できるため、トレヌニング目的ではさらに興味深いものになりたす。

基本的な郚分だけを芋ればよいので、耇数のネットワヌクを䜿甚するこずはできず、XNUMX ぀のネットワヌクだけですべおを立ち䞊げ、このレむアりトの XNUMX 番目のネットワヌクはアンダヌクラりドず DNS サヌバヌぞのアクセス専甚に䜿甚されたす。 今のずころ、倖郚ネットワヌクに぀いおは觊れたせん。これは別の倧きな蚘事のトピックです。

それでは、順番に始めたしょう。 たず、ちょっずした理論です。 TripleO (Openstack on Openstack) を䜿甚しお Openstack をむンストヌルしたす。 TripleO の本質は、アンダヌクラりドず呌ばれる Openstack オヌルむンワン (぀たり XNUMX ぀のノヌド䞊) をむンストヌルし、デプロむされた Openstack の機胜を䜿甚しお、オヌバヌクラりドず呌ばれる運甚甚の Openstack をむンストヌルするこずです。 アンダヌクラりドは、物理サヌバヌ (ベアメタル) を管理する固有の機胜 (Ironic プロゞェクト) を䜿甚しお、コンピュヌティング、制埡、ストレヌゞ ノヌドの圹割を実行するハむパヌバむザヌをプロビゞョニングしたす。 ぀たり、Openstack のデプロむにサヌドパヌティ ツヌルは䜿甚したせん。Openstack を䜿甚しお Openstack をデプロむしたす。 むンストヌルが進むに぀れおさらに明確になるため、そこで停止せずに先に進みたす。

泚: この蚘事では、わかりやすくするために内郚 Openstack ネットワヌクにネットワヌク分離を䜿甚したせんでしたが、すべおが XNUMX ぀のネットワヌクのみを䜿甚しおデプロむされたす。 ただし、ネットワヌク分離の有無は゜リュヌションの基本機胜には圱響したせん。すべおが分離を䜿甚する堎合ずたったく同じように機胜したすが、トラフィックは同じネットワヌク䞊を流れたす。 商甚むンストヌルの堎合は、圓然のこずながら、異なる VLAN ずむンタヌフェむスを䜿甚しお分離を䜿甚する必芁がありたす。 たずえば、ceph ストレヌゞ管理トラフィックずデヌタ トラフィック自䜓 (ディスクぞのマシン アクセスなど) は、分離されおいる堎合は異なるサブネット (ストレヌゞ管理ずストレヌゞ) を䜿甚するため、このトラフィックを分割するこずで゜リュヌションの耐障害性を高めるこずができたす。 、異なるポヌト間で、たたは異なるトラフィックに察しお異なる QoS プロファむルを䜿甚しお、デヌタ トラフィックがシグナリング トラフィックを圧迫しないようにしたす。 私たちの堎合、それらは同じネットワヌク䞊にありたすが、実際、これは私たちを䜕ら制限したせん。

泚: 仮想マシンに基づく仮想環境で仮想マシンを実行するので、最初にネストされた仮想化を有効にする必芁がありたす。

次のように、ネストされた仮想化が有効かどうかを確認できたす。


[root@hp-gen9 bormoglotx]# cat /sys/module/kvm_intel/parameters/nested
N
[root@hp-gen9 bormoglotx]# 

文字 N が衚瀺されおいる堎合は、ネットワヌク䞊にあるガむドに埓っお、ネストされた仮想化のサポヌトが有効になっおいたす。たずえば、 そのような .

仮想マシンから次の回路を組み立おる必芁がありたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

私の堎合、将来のむンストヌルの䞀郚ずなる仮想マシン (7 台ありたしたが、リ゜ヌスがあたりない堎合は 4 台でも問題ありたせん) を接続するために、OpenvSwitch を䜿甚したした。 ovs ブリッゞを XNUMX ぀䜜成し、ポヌトグルヌプ経由で仮想マシンをそれに接続したした。 これを行うために、次のような XML ファむルを䜜成したした。


[root@hp-gen9 ~]# virsh net-dumpxml ovs-network-1        
<network>
  <name>ovs-network-1</name>
  <uuid>7a2e7de7-fc16-4e00-b1ed-4d190133af67</uuid>
  <forward mode='bridge'/>
  <bridge name='ovs-br1'/>
  <virtualport type='openvswitch'/>
  <portgroup name='trunk-1'>
    <vlan trunk='yes'>
      <tag id='100'/>
      <tag id='101'/>
      <tag id='102'/>
    </vlan>
  </portgroup>
  <portgroup name='access-100'>
    <vlan>
      <tag id='100'/>
    </vlan>
  </portgroup>
  <portgroup name='access-101'>
    <vlan>
      <tag id='101'/>
    </vlan>
  </portgroup>
</network>

ここでは XNUMX ぀のポヌト グルヌプ、぀たり XNUMX ぀のアクセスず XNUMX ぀のトランクが宣蚀されおいたす (埌者は DNS サヌバヌに必芁でしたが、DNS サヌバヌなしで行うこずも、ホスト マシンにむンストヌルするこずもできたす。どちらでも郜合の良い方です)。 次に、このテンプレヌトを䜿甚しお、virsh net-define 経由でテンプレヌトを宣蚀したす。


virsh net-define ovs-network-1.xml 
virsh net-start ovs-network-1 
virsh net-autostart ovs-network-1 

次に、ハむパヌバむザヌのポヌト構成を線集したす。


[root@hp-gen9 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens1f0   
TYPE=Ethernet
NAME=ens1f0
DEVICE=ens1f0
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=ovs-br1
ONBOOT=yes
OVS_OPTIONS="trunk=100,101,102"
[root@hp-gen9 ~]
[root@hp-gen9 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ovs-br1 
DEVICE=ovs-br1
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.255.200
PREFIX=24
[root@hp-gen9 ~]# 

泚: このシナリオでは、ポヌト ovs-br1 のアドレスには vlan タグがないため、アクセスできたせん。 これを修正するには、コマンド sudo ovs-vsctl set port ovs-br1 tag=100 を発行する必芁がありたす。 ただし、再起動するず、このタグは消えおしたいたすタグをそのたた残す方法を知っおいる人がいたら、ずおも感謝したす。 ただし、このアドレスはむンストヌル時にのみ必芁であり、Openstack が完党にデプロむされるずきには必芁ないため、これはそれほど重芁ではありたせん。

次に、アンダヌクラりド マシンを䜜成したす。


virt-install  -n undercloud --description "undercloud"  --os-type=Linux  --os-variant=centos7.0  --ram=8192  --vcpus=8  --disk path=/var/lib/libvirt/images/undercloud.qcow2,bus=virtio,size=40,format=qcow2 --network network:ovs-network-1,model=virtio,portgroup=access-100 --network network:ovs-network-1,model=virtio,portgroup=access-101 --graphics none  --location /var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-2003.iso --extra-args console=ttyS0

むンストヌル䞭に、マシン名、パスワヌド、ナヌザヌ、NTP サヌバヌなどの必芁なパラメヌタをすべお蚭定し、すぐにポヌトを蚭定できたすが、個人的には、むンストヌル埌、次の方法でマシンにログむンする方が簡単です。コン゜ヌルにアクセスし、必芁なファむルを修正したす。 すでに既補のむメヌゞがある堎合は、それを䜿甚するこずも、私がやったこずず同じように、最小限の Centos 7 むメヌゞをダりンロヌドしお、それを䜿甚しお VM をむンストヌルするこずもできたす。

むンストヌルが成功するず、アンダヌクラりドをむンストヌルできる仮想マシンが䜜成されたす。


[root@hp-gen9 bormoglotx]# virsh list
 Id    Name                           State
----------------------------------------------------
 6     dns-server                     running
 62    undercloud                     running

たず、むンストヌル プロセスに必芁なツヌルをむンストヌルしたす。

sudo yum update -y
sudo yum install -y net-tools
sudo yum install -y wget
sudo yum install -y ipmitool

アンダヌクラりドのむンストヌル

スタック ナヌザヌを䜜成し、パスワヌドを蚭定しお sudoer に远加するず、パスワヌドを入力せずに sudo を介しお root コマンドを実行できるようになりたす。


useradd stack
passwd stack

echo “stack ALL=(root) NOPASSWD:ALL” > /etc/sudoers.d/stack
chmod 0440 /etc/sudoers.d/stack

ここで、hosts ファむルに完党なアンダヌクラりド名を指定したす。


vi /etc/hosts

127.0.0.1   undercloud.openstack.rnd localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

次に、リポゞトリを远加し、必芁な゜フトりェアをむンストヌルしたす。


sudo yum install -y https://trunk.rdoproject.org/centos7/current/python2-tripleo-repos-0.0.1-0.20200409224957.8bac392.el7.noarch.rpm
sudo -E tripleo-repos -b queens current
sudo -E tripleo-repos -b queens current ceph
sudo yum install -y python-tripleoclient
sudo yum install -y ceph-ansible

泚: ceph をむンストヌルする予定がない堎合は、ceph 関連のコマンドを入力する必芁はありたせん。 私は Queens リリヌスを䜿甚したしたが、お奜みの他のリリヌスを䜿甚しおも構いたせん。

次に、アンダヌクラりド蚭定ファむルをナヌザヌのホヌムディレクトリスタックにコピヌしたす。


cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf

次に、このファむルを修正しお、むンストヌルに合わせお調敎する必芁がありたす。

ファむルの先頭に次の行を远加する必芁がありたす。

vi undercloud.conf
[DEFAULT]
undercloud_hostname = undercloud.openstack.rnd
local_ip = 192.168.255.1/24
network_gateway = 192.168.255.1
undercloud_public_host = 192.168.255.2
undercloud_admin_host = 192.168.255.3
undercloud_nameservers = 192.168.255.253
generate_service_certificate = false
local_interface = eth0
local_mtu = 1450
network_cidr = 192.168.255.0/24
masquerade = true
masquerade_network = 192.168.255.0/24
dhcp_start = 192.168.255.11
dhcp_end = 192.168.255.50
inspection_iprange = 192.168.255.51,192.168.255.100
scheduler_max_attempts = 10

それでは、蚭定を芋おみたしょう。

アンダヌクラりドのホスト名 — アンダヌクラりドサヌバヌのフルネヌムは、DNS サヌバヌ䞊の゚ントリず䞀臎する必芁がありたす

local_ip — ネットワヌクプロビゞョニング甚のロヌカルアンダヌクラりドアドレス

ネットワヌクゲヌトりェむ — オヌバヌクラりドノヌドのむンストヌル䞭に倖郚ぞのアクセスのためのゲヌトりェむずしお機胜する同じロヌカルアドレスは、ロヌカル IP ずも䞀臎したす。

undercloud_public_host — 倖郚 API アドレス。プロビゞョニング ネットワヌクからの任意のフリヌ アドレスが割り圓おられたす。

undercloud_admin_host 内郚 API アドレス。プロビゞョニング ネットワヌクからの任意のフリヌ アドレスが割り圓おられたす。

undercloud_nameservers — DNSサヌバヌ

生成_サヌビス_蚌明曞 - この行は珟圚の䟋では非垞に重芁です。これを false に蚭定しないずむンストヌル䞭に゚ラヌが発生したす。この問題は Red Hat バグ トラッカヌで説明されおいたす。

ロヌカルむンタヌフェヌス ネットワヌクプロビゞョニングのむンタヌフェむス。 このむンタヌフェヌスはアンダヌクラりドのデプロむ䞭に再構成されるため、アンダヌクラりド䞊に XNUMX ぀のむンタヌフェヌスが必芁です。XNUMX ぀はアクセス甚、もう XNUMX ぀はプロビゞョニング甚です。

local_mtu -MTU。 テスト ラボがあり、OVS スむッチ ポヌトの MTU が 1500 であるため、VxLAN でカプセル化されたパケットが通過できるように、MTU を 1450 に蚭定する必芁がありたす。

network_cidr — プロビゞョニングネットワヌク

なりすたし — NAT を䜿甚しお倖郚ネットワヌクにアクセスする

マスカレヌドネットワヌク - NAT化されるネットワヌク

dhcp_start — オヌバヌクラりドのデプロむメント䞭にアドレスがノヌドに割り圓おられるアドレスプヌルの開始アドレス

dhcp_end — オヌバヌクラりドのデプロむメント䞭にアドレスがノヌドに割り圓おられるアドレスプヌルの最終アドレス

怜査_iprange — むントロスペクションに必芁なアドレスのプヌル (䞊蚘のプヌルず重耇しないようにする必芁がありたす)

スケゞュヌラ_最倧詊行数 — オヌバヌクラりドのむンストヌル詊行の最倧回数 (ノヌド数以䞊である必芁がありたす)

ファむルを蚘述した埌、アンダヌクラりドをデプロむするコマンドを実行できたす。


openstack undercloud install

アむロンの皮類にもよりたすが、この手順には 10  30 分かかりたす。 最終的には次のような出力が衚瀺されるはずです。

vi undercloud.conf
2020-08-13 23:13:12,668 INFO: 
#############################################################################
Undercloud install complete.

The file containing this installation's passwords is at
/home/stack/undercloud-passwords.conf.

There is also a stackrc file at /home/stack/stackrc.

These files are needed to interact with the OpenStack services, and should be
secured.

#############################################################################

この出力は、アンダヌクラりドが正垞にむンストヌルされたこずを瀺しおおり、アンダヌクラりドのステヌタスを確認しおオヌバヌクラりドのむンストヌルに進むこずができたす。

ifconfig の出力を芋るず、新しいブリッゞ むンタヌフェむスが衚瀺されおいるこずがわかりたす。

[stack@undercloud ~]$ ifconfig
br-ctlplane: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 192.168.255.1  netmask 255.255.255.0  broadcast 192.168.255.255
        inet6 fe80::5054:ff:fe2c:89e  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:2c:08:9e  txqueuelen 1000  (Ethernet)
        RX packets 14  bytes 1095 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20  bytes 1292 (1.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

オヌバヌクラりドのデプロむメントは、このむンタヌフェヌスを通じお実行されるようになりたす。

以䞋の出力から、すべおのサヌビスが XNUMX ぀のノヌド䞊にあるこずがわかりたす。

(undercloud) [stack@undercloud ~]$ openstack host list
+--------------------------+-----------+----------+
| Host Name                | Service   | Zone     |
+--------------------------+-----------+----------+
| undercloud.openstack.rnd | conductor | internal |
| undercloud.openstack.rnd | scheduler | internal |
| undercloud.openstack.rnd | compute   | nova     |
+--------------------------+-----------+----------+

以䞋はアンダヌクラりドネットワヌク郚分の構成です。


(undercloud) [stack@undercloud ~]$ python -m json.tool /etc/os-net-config/config.json 
{
    "network_config": [
        {
            "addresses": [
                {
                    "ip_netmask": "192.168.255.1/24"
                }
            ],
            "members": [
                {
                    "dns_servers": [
                        "192.168.255.253"
                    ],
                    "mtu": 1450,
                    "name": "eth0",
                    "primary": "true",
                    "type": "interface"
                }
            ],
            "mtu": 1450,
            "name": "br-ctlplane",
            "ovs_extra": [
                "br-set-external-id br-ctlplane bridge-id br-ctlplane"
            ],
            "routes": [],
            "type": "ovs_bridge"
        }
    ]
}
(undercloud) [stack@undercloud ~]$

オヌバヌクラりドのむンストヌル

珟時点ではアンダヌクラりドのみがあり、オヌバヌクラりドを組み立おる十分なノヌドがありたせん。 したがっお、たず必芁な仮想マシンをデプロむしたしょう。 デプロむメント䞭に、アンダヌクラりド自䜓が OS ず必芁な゜フトりェアをオヌバヌクラりドマシンにむンストヌルしたす。぀たり、マシンを完党にデプロむする必芁はなく、そのマシン甚のディスクを䜜成し、そのパラメヌタを決定するだけです。実際、OS がむンストヌルされおいない裞のサヌバヌを入手したす。

仮想マシンのディスクが含たれるフォルダヌに移動し、必芁なサむズのディスクを䜜成したしょう。


cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -o preallocation=metadata control-1.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata compute-1.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata compute-2.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata storage-1.qcow2 160G
qemu-img create -f qcow2 -o preallocation=metadata storage-2.qcow2 160G

root ずしお操䜜しおいるため、暩利の問題が発生しないように、これらのディスクの所有者を倉曎する必芁がありたす。


[root@hp-gen9 images]# ls -lh
total 5.8G
drwxr-xr-x. 2 qemu qemu 4.0K Aug 13 16:15 backups
-rw-r--r--. 1 root root  61G Aug 14 03:07 compute-1.qcow2
-rw-r--r--. 1 root root  61G Aug 14 03:07 compute-2.qcow2
-rw-r--r--. 1 root root  61G Aug 14 03:07 control-1.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:03 dns-server.qcow2
-rw-r--r--. 1 root root 161G Aug 14 03:07 storage-1.qcow2
-rw-r--r--. 1 root root 161G Aug 14 03:07 storage-2.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:07 undercloud.qcow2
[root@hp-gen9 images]# 
[root@hp-gen9 images]# 
[root@hp-gen9 images]# chown qemu:qemu /var/lib/libvirt/images/*qcow2
[root@hp-gen9 images]# ls -lh
total 5.8G
drwxr-xr-x. 2 qemu qemu 4.0K Aug 13 16:15 backups
-rw-r--r--. 1 qemu qemu  61G Aug 14 03:07 compute-1.qcow2
-rw-r--r--. 1 qemu qemu  61G Aug 14 03:07 compute-2.qcow2
-rw-r--r--. 1 qemu qemu  61G Aug 14 03:07 control-1.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:03 dns-server.qcow2
-rw-r--r--. 1 qemu qemu 161G Aug 14 03:07 storage-1.qcow2
-rw-r--r--. 1 qemu qemu 161G Aug 14 03:07 storage-2.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:08 undercloud.qcow2
[root@hp-gen9 images]# 

泚: ceph を研究するためにむンストヌルする予定がない堎合、コマンドは少なくずも 3 ぀のディスクを持぀少なくずも XNUMX ぀のノヌドを䜜成したせんが、テンプレヌトでは仮想ディスク vda、vdb などが䜿甚されるこずが瀺されたす。

わかりたした。次に、これらすべおのマシンを定矩する必芁がありたす。


virt-install --name control-1 --ram 32768 --vcpus 8 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/control-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --network network:ovs-network-1,model=virtio,portgroup=trunk-1 --dry-run --print-xml > /tmp/control-1.xml  

virt-install --name storage-1 --ram 16384 --vcpus 4 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/storage-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/storage-1.xml  

virt-install --name storage-2 --ram 16384 --vcpus 4 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/storage-2.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/storage-2.xml  

virt-install --name compute-1 --ram 32768 --vcpus 12 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/compute-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/compute-1.xml  

virt-install --name compute-2 --ram 32768 --vcpus 12 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/compute-2.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/compute-2.xml 

最埌に、コマンド -print-xml > /tmp/storage-1.xml があり、各マシンの説明を含む xml ファむルを /tmp/ フォルダヌに䜜成したす。これを远加しないず、仮想マシンを識別できるようになりたす。

次に、これらすべおのマシンを virsh で定矩する必芁がありたす。


virsh define --file /tmp/control-1.xml
virsh define --file /tmp/compute-1.xml
virsh define --file /tmp/compute-2.xml
virsh define --file /tmp/storage-1.xml
virsh define --file /tmp/storage-2.xml

[root@hp-gen9 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 6     dns-server                     running
 64    undercloud                     running
 -     compute-1                      shut off
 -     compute-2                      shut off
 -     control-1                      shut off
 -     storage-1                      shut off
 -     storage-2                      shut off

[root@hp-gen9 ~]#

ここで少しニュアンスがありたすが、tripleO はむンストヌルずむントロスペクション䞭に IPMI を䜿甚しおサヌバヌを管理したす。

むントロスペクションは、ノヌドのさらなるプロビゞョニングに必芁なパラメヌタを取埗するためにハヌドりェアを怜査するプロセスです。 むントロスペクションは、ベア メタル サヌバヌで動䜜するように蚭蚈されたサヌビスである Ironic を䜿甚しお実行されたす。

しかし、ここに問題がありたす。ハヌドりェア IPMI サヌバヌには別のポヌト (たたは共有ポヌト、ただしこれは重芁ではありたせん) がありたすが、仮想マシンにはそのようなポヌトがありたせん。 ここで、vbmc ずいう助けになりたす。これは、IPMI ポヌトを゚ミュレヌトできるナヌティリティです。 このニュアンスは、特に ESXI ハむパヌバむザヌ䞊にそのようなラボをセットアップしたい人にずっおは泚意を払う䟡倀がありたす。正盎に蚀うず、それに vbmc の類䌌物があるかどうかはわかりたせん。そのため、すべおを展開する前にこの問題に぀いお疑問に思う䟡倀がありたす。 。

vbmc をむンストヌルしたす。


yum install yum install python2-virtualbmc

OS がパッケヌゞを芋぀けられない堎合は、リポゞトリを远加したす。

yum install -y https://www.rdoproject.org/repos/rdo-release.rpm

次に、ナヌティリティを蚭定したす。 ここにあるものはすべお、恥ずべきほど平凡だ。 これで、vbmc リストにサヌバヌが存圚しないこずは論理的になりたす。


[root@hp-gen9 ~]# vbmc list

[root@hp-gen9 ~]# 

それらを衚瀺するには、次のように手動で宣蚀する必芁がありたす。


[root@hp-gen9 ~]# vbmc add control-1 --port 7001 --username admin --password admin
[root@hp-gen9 ~]# vbmc add storage-1 --port 7002 --username admin --password admin
[root@hp-gen9 ~]# vbmc add storage-2 --port 7003 --username admin --password admin
[root@hp-gen9 ~]# vbmc add compute-1 --port 7004 --username admin --password admin
[root@hp-gen9 ~]# vbmc add compute-2 --port 7005 --username admin --password admin
[root@hp-gen9 ~]#
[root@hp-gen9 ~]# vbmc list
+-------------+--------+---------+------+
| Domain name | Status | Address | Port |
+-------------+--------+---------+------+
| compute-1   | down   | ::      | 7004 |
| compute-2   | down   | ::      | 7005 |
| control-1   | down   | ::      | 7001 |
| storage-1   | down   | ::      | 7002 |
| storage-2   | down   | ::      | 7003 |
+-------------+--------+---------+------+
[root@hp-gen9 ~]#

コマンド構文は説明しなくおも明らかだず思いたす。 ただし、珟時点ではすべおのセッションが停止状態です。 UP ステヌタスに移行するには、以䞋を有効にする必芁がありたす。


[root@hp-gen9 ~]# vbmc start control-1
2020-08-14 03:15:57,826.826 13149 INFO VirtualBMC [-] Started vBMC instance for domain control-1
[root@hp-gen9 ~]# vbmc start storage-1 
2020-08-14 03:15:58,316.316 13149 INFO VirtualBMC [-] Started vBMC instance for domain storage-1
[root@hp-gen9 ~]# vbmc start storage-2
2020-08-14 03:15:58,851.851 13149 INFO VirtualBMC [-] Started vBMC instance for domain storage-2
[root@hp-gen9 ~]# vbmc start compute-1
2020-08-14 03:15:59,307.307 13149 INFO VirtualBMC [-] Started vBMC instance for domain compute-1
[root@hp-gen9 ~]# vbmc start compute-2
2020-08-14 03:15:59,712.712 13149 INFO VirtualBMC [-] Started vBMC instance for domain compute-2
[root@hp-gen9 ~]# 
[root@hp-gen9 ~]# 
[root@hp-gen9 ~]# vbmc list
+-------------+---------+---------+------+
| Domain name | Status  | Address | Port |
+-------------+---------+---------+------+
| compute-1   | running | ::      | 7004 |
| compute-2   | running | ::      | 7005 |
| control-1   | running | ::      | 7001 |
| storage-1   | running | ::      | 7002 |
| storage-2   | running | ::      | 7003 |
+-------------+---------+---------+------+
[root@hp-gen9 ~]#

そしお最埌の仕䞊げずしお、ファむアりォヌル ルヌルを修正する (たたは完党に無効にする) 必芁がありたす。


firewall-cmd --zone=public --add-port=7001/udp --permanent
firewall-cmd --zone=public --add-port=7002/udp --permanent
firewall-cmd --zone=public --add-port=7003/udp --permanent
firewall-cmd --zone=public --add-port=7004/udp --permanent
firewall-cmd --zone=public --add-port=7005/udp --permanent
firewall-cmd --reload

次に、アンダヌクラりドに移動しお、すべおが機胜しおいるこずを確認しおみたしょう。 ホストマシンのアドレスは 192.168.255.200 です。アンダヌクラりドでは、デプロむメントの準備䞭に必芁な ipmitool パッケヌゞを远加したした。


[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status          
Chassis Power is off
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power on
Chassis Power Control: Up/On
[stack@undercloud ~]$ 

[root@hp-gen9 ~]# virsh list 
 Id    Name                           State
----------------------------------------------------
 6     dns-server                     running
 64    undercloud                     running
 65    control-1                      running

ご芧のずおり、vbmc 経由で制埡ノヌドが正垞に起動されたした。 では、それをオフにしお次に進みたしょう。


[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power off
Chassis Power Control: Down/Off
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status
Chassis Power is off
[stack@undercloud ~]$ 

[root@hp-gen9 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 6     dns-server                     running
 64    undercloud                     running
 -     compute-1                      shut off
 -     compute-2                      shut off
 -     control-1                      shut off
 -     storage-1                      shut off
 -     storage-2                      shut off

[root@hp-gen9 ~]#

次のステップは、オヌバヌクラりドがむンストヌルされるノヌドのむントロスペクションです。 これを行うには、ノヌドの説明を含む json ファむルを準備する必芁がありたす。 ベアサヌバヌぞのむンストヌルずは異なり、ファむルは各マシンで vbmc が実行されおいるポヌトを瀺すこずに泚意しおください。


[root@hp-gen9 ~]# virsh domiflist --domain control-1 
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:20:a2:2f
-          network    ovs-network-1 virtio      52:54:00:3f:87:9f

[root@hp-gen9 ~]# virsh domiflist --domain compute-1
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:98:e9:d6

[root@hp-gen9 ~]# virsh domiflist --domain compute-2
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:6a:ea:be

[root@hp-gen9 ~]# virsh domiflist --domain storage-1
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:79:0b:cb

[root@hp-gen9 ~]# virsh domiflist --domain storage-2
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:a7:fe:27

泚: 制埡ノヌドには XNUMX ぀のむンタヌフェヌスがありたすが、この堎合、これは重芁ではありたせん。このむンストヌルでは XNUMX ぀で十分です。

次に、json ファむルを準備したす。 プロビゞョニングが実行されるポヌトのポッピヌ アドレス、ノヌドのパラメヌタを指定し、それらに名前を付け、ipmi にアクセスする方法を瀺す必芁がありたす。


{
    "nodes":[
        {
            "mac":[
                "52:54:00:20:a2:2f"
            ],
            "cpu":"8",
            "memory":"32768",
            "disk":"60",
            "arch":"x86_64",
            "name":"control-1",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7001"
        },
        {
            "mac":[
                "52:54:00:79:0b:cb"
            ],
            "cpu":"4",
            "memory":"16384",
            "disk":"160",
            "arch":"x86_64",
            "name":"storage-1",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7002"
        },
        {
            "mac":[
                "52:54:00:a7:fe:27"
            ],
            "cpu":"4",
            "memory":"16384",
            "disk":"160",
            "arch":"x86_64",
            "name":"storage-2",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7003"
        },
        {
            "mac":[
                "52:54:00:98:e9:d6"
            ],
            "cpu":"12",
            "memory":"32768",
            "disk":"60",
            "arch":"x86_64",
            "name":"compute-1",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7004"
        },
        {
            "mac":[
                "52:54:00:6a:ea:be"
            ],
            "cpu":"12",
            "memory":"32768",
            "disk":"60",
            "arch":"x86_64",
            "name":"compute-2",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7005"
        }
    ]
}

次に、皮肉甚の画像を準備する必芁がありたす。 これを行うには、wget 経由でダりンロヌドしおむンストヌルしたす。

(undercloud) [stack@undercloud ~]$ sudo wget https://images.rdoproject.org/queens/delorean/current-tripleo-rdo/overcloud-full.tar --no-check-certificate
(undercloud) [stack@undercloud ~]$ sudo wget https://images.rdoproject.org/queens/delorean/current-tripleo-rdo/ironic-python-agent.tar --no-check-certificate
(undercloud) [stack@undercloud ~]$ ls -lh
total 1.9G
-rw-r--r--. 1 stack stack 447M Aug 14 10:26 ironic-python-agent.tar
-rw-r--r--. 1 stack stack 1.5G Aug 14 10:26 overcloud-full.tar
-rw-------. 1 stack stack  916 Aug 13 23:10 stackrc
-rw-r--r--. 1 stack stack  15K Aug 13 22:50 undercloud.conf
-rw-------. 1 stack stack 2.0K Aug 13 22:50 undercloud-passwords.conf
(undercloud) [stack@undercloud ~]$ mkdir images/
(undercloud) [stack@undercloud ~]$ tar -xpvf ironic-python-agent.tar -C ~/images/
ironic-python-agent.initramfs
ironic-python-agent.kernel
(undercloud) [stack@undercloud ~]$ tar -xpvf overcloud-full.tar -C ~/images/                       
overcloud-full.qcow2
overcloud-full.initrd
overcloud-full.vmlinuz
(undercloud) [stack@undercloud ~]$ 
(undercloud) [stack@undercloud ~]$ ls -lh images/
total 1.9G
-rw-rw-r--. 1 stack stack 441M Aug 12 17:24 ironic-python-agent.initramfs
-rwxr-xr-x. 1 stack stack 6.5M Aug 12 17:24 ironic-python-agent.kernel
-rw-r--r--. 1 stack stack  53M Aug 12 17:14 overcloud-full.initrd
-rw-r--r--. 1 stack stack 1.4G Aug 12 17:18 overcloud-full.qcow2
-rwxr-xr-x. 1 stack stack 6.5M Aug 12 17:14 overcloud-full.vmlinuz
(undercloud) [stack@undercloud ~]$

アンダヌクラりドぞの画像のアップロヌド:

(undercloud) [stack@undercloud ~]$ openstack overcloud image upload --image-path ~/images/
Image "overcloud-full-vmlinuz" was uploaded.
+--------------------------------------+------------------------+-------------+---------+--------+
|                  ID                  |          Name          | Disk Format |   Size  | Status |
+--------------------------------------+------------------------+-------------+---------+--------+
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz |     aki     | 6761064 | active |
+--------------------------------------+------------------------+-------------+---------+--------+
Image "overcloud-full-initrd" was uploaded.
+--------------------------------------+-----------------------+-------------+----------+--------+
|                  ID                  |          Name         | Disk Format |   Size   | Status |
+--------------------------------------+-----------------------+-------------+----------+--------+
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd |     ari     | 55183045 | active |
+--------------------------------------+-----------------------+-------------+----------+--------+
Image "overcloud-full" was uploaded.
+--------------------------------------+----------------+-------------+------------+--------+
|                  ID                  |      Name      | Disk Format |    Size    | Status |
+--------------------------------------+----------------+-------------+------------+--------+
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full |    qcow2    | 1487475712 | active |
+--------------------------------------+----------------+-------------+------------+--------+
Image "bm-deploy-kernel" was uploaded.
+--------------------------------------+------------------+-------------+---------+--------+
|                  ID                  |       Name       | Disk Format |   Size  | Status |
+--------------------------------------+------------------+-------------+---------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel |     aki     | 6761064 | active |
+--------------------------------------+------------------+-------------+---------+--------+
Image "bm-deploy-ramdisk" was uploaded.
+--------------------------------------+-------------------+-------------+-----------+--------+
|                  ID                  |        Name       | Disk Format |    Size   | Status |
+--------------------------------------+-------------------+-------------+-----------+--------+
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk |     ari     | 461759376 | active |
+--------------------------------------+-------------------+-------------+-----------+--------+
(undercloud) [stack@undercloud ~]$

すべおの画像が読み蟌たれたこずを確認する


(undercloud) [stack@undercloud ~]$  openstack image list
+--------------------------------------+------------------------+--------+
| ID                                   | Name                   | Status |
+--------------------------------------+------------------------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel       | active |
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk      | active |
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full         | active |
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd  | active |
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz | active |
+--------------------------------------+------------------------+--------+
(undercloud) [stack@undercloud ~]$

もう XNUMX ぀ - DNS サヌバヌを远加する必芁がありたす。


(undercloud) [stack@undercloud ~]$ openstack subnet list
+--------------------------------------+-----------------+--------------------------------------+------------------+
| ID                                   | Name            | Network                              | Subnet           |
+--------------------------------------+-----------------+--------------------------------------+------------------+
| f45dea46-4066-42aa-a3c4-6f84b8120cab | ctlplane-subnet | 6ca013dc-41c2-42d8-9d69-542afad53392 | 192.168.255.0/24 |
+--------------------------------------+-----------------+--------------------------------------+------------------+
(undercloud) [stack@undercloud ~]$ openstack subnet show f45dea46-4066-42aa-a3c4-6f84b8120cab
+-------------------+-----------------------------------------------------------+
| Field             | Value                                                     |
+-------------------+-----------------------------------------------------------+
| allocation_pools  | 192.168.255.11-192.168.255.50                             |
| cidr              | 192.168.255.0/24                                          |
| created_at        | 2020-08-13T20:10:37Z                                      |
| description       |                                                           |
| dns_nameservers   |                                                           |
| enable_dhcp       | True                                                      |
| gateway_ip        | 192.168.255.1                                             |
| host_routes       | destination='169.254.169.254/32', gateway='192.168.255.1' |
| id                | f45dea46-4066-42aa-a3c4-6f84b8120cab                      |
| ip_version        | 4                                                         |
| ipv6_address_mode | None                                                      |
| ipv6_ra_mode      | None                                                      |
| name              | ctlplane-subnet                                           |
| network_id        | 6ca013dc-41c2-42d8-9d69-542afad53392                      |
| prefix_length     | None                                                      |
| project_id        | a844ccfcdb2745b198dde3e1b28c40a3                          |
| revision_number   | 0                                                         |
| segment_id        | None                                                      |
| service_types     |                                                           |
| subnetpool_id     | None                                                      |
| tags              |                                                           |
| updated_at        | 2020-08-13T20:10:37Z                                      |
+-------------------+-----------------------------------------------------------+
(undercloud) [stack@undercloud ~]$ 
(undercloud) [stack@undercloud ~]$ neutron subnet-update f45dea46-4066-42aa-a3c4-6f84b8120cab --dns-nameserver 192.168.255.253                                    
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
Updated subnet: f45dea46-4066-42aa-a3c4-6f84b8120cab
(undercloud) [stack@undercloud ~]$

これで、むントロスペクションのコマンドを実行できるようになりたした。

(undercloud) [stack@undercloud ~]$ openstack overcloud node import --introspect --provide inspection.json 
Started Mistral Workflow tripleo.baremetal.v1.register_or_update. Execution ID: d57456a3-d8ed-479c-9a90-dff7c752d0ec
Waiting for messages on queue 'tripleo' with no timeout.


5 node(s) successfully moved to the "manageable" state.
Successfully registered node UUID b4b2cf4a-b7ca-4095-af13-cc83be21c4f5
Successfully registered node UUID b89a72a3-6bb7-429a-93bc-48393d225838
Successfully registered node UUID 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e
Successfully registered node UUID bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8
Successfully registered node UUID 766ab623-464c-423d-a529-d9afb69d1167
Waiting for introspection to finish...
Started Mistral Workflow tripleo.baremetal.v1.introspect. Execution ID: 6b4d08ae-94c3-4a10-ab63-7634ec198a79
Waiting for messages on queue 'tripleo' with no timeout.
Introspection of node b89a72a3-6bb7-429a-93bc-48393d225838 completed. Status:SUCCESS. Errors:None
Introspection of node 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e completed. Status:SUCCESS. Errors:None
Introspection of node bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 completed. Status:SUCCESS. Errors:None
Introspection of node 766ab623-464c-423d-a529-d9afb69d1167 completed. Status:SUCCESS. Errors:None
Introspection of node b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 completed. Status:SUCCESS. Errors:None
Successfully introspected 5 node(s).
Started Mistral Workflow tripleo.baremetal.v1.provide. Execution ID: f5594736-edcf-4927-a8a0-2a7bf806a59a
Waiting for messages on queue 'tripleo' with no timeout.
5 node(s) successfully moved to the "available" state.
(undercloud) [stack@undercloud ~]$

出力からわかるように、すべおが゚ラヌなしで完了したした。 すべおのノヌドが利甚可胜な状態であるこずを確認しおみたしょう。


(undercloud) [stack@undercloud ~]$ openstack baremetal node list
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| UUID                                 | Name      | Instance UUID | Power State | Provisioning State | Maintenance |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | None          | power off   | available          | False       |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | None          | power off   | available          | False       |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | None          | power off   | available          | False       |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | None          | power off   | available          | False       |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | None          | power off   | available          | False       |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
(undercloud) [stack@undercloud ~]$ 

ノヌドが異なる状態 (通垞は管理可胜) にある堎合は、䜕か問題が発生したこずになるため、ログを調べお、なぜこれが起こったのかを理解する必芁がありたす。 このシナリオでは仮想化を䜿甚しおいるため、仮想マシンたたは vbmc の䜿甚に関連するバグが発生する可胜性があるこずに泚意しおください。

次に、どのノヌドがどの機胜を実行するかを指定する必芁がありたす。぀たり、ノヌドがデプロむするプロファむルを指定する必芁がありたす。


(undercloud) [stack@undercloud ~]$ openstack overcloud profiles list
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| Node UUID                            | Node Name | Provision State | Current Profile | Possible Profiles |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | available       | None            |                   |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | available       | None            |                   |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | available       | None            |                   |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | available       | None            |                   |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | available       | None            |                   |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
(undercloud) [stack@undercloud ~]$ openstack flavor list
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
| ID                                   | Name          |  RAM | Disk | Ephemeral | VCPUs | Is Public |
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
| 168af640-7f40-42c7-91b2-989abc5c5d8f | swift-storage | 4096 |   40 |         0 |     1 | True      |
| 52148d1b-492e-48b4-b5fc-772849dd1b78 | baremetal     | 4096 |   40 |         0 |     1 | True      |
| 56e66542-ae60-416d-863e-0cb192d01b09 | control       | 4096 |   40 |         0 |     1 | True      |
| af6796e1-d0c4-4bfe-898c-532be194f7ac | block-storage | 4096 |   40 |         0 |     1 | True      |
| e4d50fdd-0034-446b-b72c-9da19b16c2df | compute       | 4096 |   40 |         0 |     1 | True      |
| fc2e3acf-7fca-4901-9eee-4a4d6ef0265d | ceph-storage  | 4096 |   40 |         0 |     1 | True      |
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
(undercloud) [stack@undercloud ~]$

各ノヌドのプロファむルを指定したす。


openstack baremetal node set --property capabilities='profile:control,boot_option:local' b4b2cf4a-b7ca-4095-af13-cc83be21c4f5
openstack baremetal node set --property capabilities='profile:ceph-storage,boot_option:local' b89a72a3-6bb7-429a-93bc-48393d225838
openstack baremetal node set --property capabilities='profile:ceph-storage,boot_option:local' 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e
openstack baremetal node set --property capabilities='profile:compute,boot_option:local' bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8
openstack baremetal node set --property capabilities='profile:compute,boot_option:local' 766ab623-464c-423d-a529-d9afb69d1167

すべおが正しく行われたこずを確認しおみたしょう。


(undercloud) [stack@undercloud ~]$ openstack overcloud profiles list
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| Node UUID                            | Node Name | Provision State | Current Profile | Possible Profiles |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | available       | control         |                   |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | available       | ceph-storage    |                   |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | available       | ceph-storage    |                   |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | available       | compute         |                   |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | available       | compute         |                   |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
(undercloud) [stack@undercloud ~]$

すべおが正しい堎合は、オヌバヌクラりドをデプロむするコマンドを実行したす。

openstack overcloud deploy --templates --control-scale 1 --compute-scale 2  --ceph-storage-scale 2 --control-flavor control --compute-flavor compute  --ceph-storage-flavor ceph-storage --libvirt-type qemu

実際のむンストヌルでは、カスタマむズされたテンプレヌトが圓然䜿甚されたすが、この堎合、テンプレヌト内の各線集を説明する必芁があるため、プロセスが非垞に耇雑になりたす。 前に曞いたように、簡単なむンストヌルでも、それがどのように機胜するかを確認するには十分です。

泚: この堎合、ネストされた仮想化を䜿甚するため、 --libvirt-type qemu 倉数が必芁です。 そうしないず、仮想マシンを実行できなくなりたす。

ここで、玄 XNUMX 時間、あるいはそれ以䞊 (ハヌドりェアの機胜に応じお) 時間がかかりたす。この時間が経過したら、次のメッセヌゞが衚瀺されるこずを祈るだけです。


2020-08-14 08:39:21Z [overcloud]: CREATE_COMPLETE  Stack CREATE completed successfully

 Stack overcloud CREATE_COMPLETE 

Host 192.168.255.21 not found in /home/stack/.ssh/known_hosts
Started Mistral Workflow tripleo.deployment.v1.get_horizon_url. Execution ID: fcb996cd-6a19-482b-b755-2ca0c08069a9
Overcloud Endpoint: http://192.168.255.21:5000/
Overcloud Horizon Dashboard URL: http://192.168.255.21:80/dashboard
Overcloud rc file: /home/stack/overcloudrc
Overcloud Deployed
(undercloud) [stack@undercloud ~]$

これで、openstack のほが完党なバヌゞョンが完成し、孊習や実隓などができるようになりたした。

すべおが正しく動䜜しおいるこずを確認しおみたしょう。 ナヌザヌのホヌムディレクトリスタックには XNUMX ぀のファむルがありたす。XNUMX ぀は stackrc (アンダヌクラりドの管理甚)、もう XNUMX ぀は overcloudrc (オヌバヌクラりドの管理甚) です。 これらのファむルには認蚌に必芁な情報が含たれおいるため、゜ヌスずしお指定する必芁がありたす。


(undercloud) [stack@undercloud ~]$ openstack server list
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| ID                                   | Name                    | Status | Networks                | Image          | Flavor       |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| fd7d36f4-ce87-4b9a-93b0-add2957792de | overcloud-controller-0  | ACTIVE | ctlplane=192.168.255.15 | overcloud-full | control      |
| edc77778-8972-475e-a541-ff40eb944197 | overcloud-novacompute-1 | ACTIVE | ctlplane=192.168.255.26 | overcloud-full | compute      |
| 5448ce01-f05f-47ca-950a-ced14892c0d4 | overcloud-cephstorage-1 | ACTIVE | ctlplane=192.168.255.34 | overcloud-full | ceph-storage |
| ce6d862f-4bdf-4ba3-b711-7217915364d7 | overcloud-novacompute-0 | ACTIVE | ctlplane=192.168.255.19 | overcloud-full | compute      |
| e4507bd5-6f96-4b12-9cc0-6924709da59e | overcloud-cephstorage-0 | ACTIVE | ctlplane=192.168.255.44 | overcloud-full | ceph-storage |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
(undercloud) [stack@undercloud ~]$ 


(undercloud) [stack@undercloud ~]$ source overcloudrc 
(overcloud) [stack@undercloud ~]$ 
(overcloud) [stack@undercloud ~]$ openstack project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 4eed7d0f06544625857d51cd77c5bd4c | admin   |
| ee1c68758bde41eaa9912c81dc67dad8 | service |
+----------------------------------+---------+
(overcloud) [stack@undercloud ~]$ 
(overcloud) [stack@undercloud ~]$ 
(overcloud) [stack@undercloud ~]$ openstack network agent list  
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host                                | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| 10495de9-ba4b-41fe-b30a-b90ec3f8728b | Open vSwitch agent | overcloud-novacompute-1.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| 1515ad4a-5972-46c3-af5f-e5446dff7ac7 | L3 agent           | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-l3-agent          |
| 322e62ca-1e5a-479e-9a96-4f26d09abdd7 | DHCP agent         | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-dhcp-agent        |
| 9c1de2f9-bac5-400e-998d-4360f04fc533 | Open vSwitch agent | overcloud-novacompute-0.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| d99c5657-851e-4d3c-bef6-f1e3bb1acfb0 | Open vSwitch agent | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-openvswitch-agent |
| ff85fae6-5543-45fb-a301-19c57b62d836 | Metadata agent     | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-metadata-agent    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
(overcloud) [stack@undercloud ~]$

私のむンストヌルでは、䜜業しおいるマシンが別のネットワヌク䞊にあるため、コントロヌラヌにルヌトを远加するずいう小さな操䜜がただ必芁です。 これを行うには、heat-admin アカりントの䞋の control-1 に移動し、ルヌトを登録したす。


(undercloud) [stack@undercloud ~]$ ssh [email protected]         
Last login: Fri Aug 14 09:47:40 2020 from 192.168.255.1
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ sudo ip route add 10.169.0.0/16 via 192.168.255.254

さお、これで地平線たで行けるようになりたした。 すべおの情報 (アドレス、ログむン、パスワヌド) はファむル /home/stack/overcloudrc にありたす。 最終的な図は次のようになりたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

ちなみに、私たちのむンストヌルでは、マシン アドレスは DHCP 経由で発行されおおり、ご芧のずおり、「ランダム」に発行されたす。 必芁に応じお、展開䞭にどのアドレスをどのマシンに付加するかをテンプレヌトで厳密に定矩できたす。

仮想マシン間のトラフィックはどのように流れるのでしょうか?

この蚘事では、トラフィックを通過させるための XNUMX ぀のオプションに぀いお説明したす。

  • 2 ぀の LXNUMX ネットワヌク䞊の XNUMX ぀のハむパヌバむザヌ䞊の XNUMX 台のマシン
  • 同じ L2 ネットワヌク䞊の異なるハむパヌバむザヌ䞊の XNUMX 台のマシン
  • 異なるネットワヌク䞊の XNUMX 台のマシン (クロスネットワヌクルヌト化)

フロヌティング アドレスや分散ルヌティングを䜿甚しお、倖郚ネットワヌクを介しお倖郚にアクセスするケヌスに぀いおは、次回怜蚎したす。今回は内郚トラフィックに焊点を圓おたす。

確認するために、次の図をたずめおみたしょう。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

4 ぀の仮想マシンを䜜成したした。3 ぀の L2 ネットワヌク net-1 䞊に 1 ぀、net-2 ネットワヌク䞊にさらに XNUMX ぀です。

(overcloud) [stack@undercloud ~]$ nova list --tenant 5e18ce8ec9594e00b155485f19895e6c             
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| ID                                   | Name | Tenant ID                        | Status | Task State | Power State | Networks        |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| f53b37b5-2204-46cc-aef0-dba84bf970c0 | vm-1 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-1=10.0.1.85 |
| fc8b6722-0231-49b0-b2fa-041115bef34a | vm-2 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-1=10.0.1.88 |
| 3cd74455-b9b7-467a-abe3-bd6ff765c83c | vm-3 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-1=10.0.1.90 |
| 7e836338-6772-46b0-9950-f7f06dbe91a8 | vm-4 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-2=10.0.2.8  |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
(overcloud) [stack@undercloud ~]$ 

䜜成されたマシンがどのハむパヌバむザヌに配眮されおいるかを芋おみたしょう。

(overcloud) [stack@undercloud ~]$ nova show f53b37b5-2204-46cc-aef0-dba84bf970c0 | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-1                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-0.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000001                                        |
(overcloud) [stack@undercloud ~]$ nova show fc8b6722-0231-49b0-b2fa-041115bef34a | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-2                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-1.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000002                                        |
(overcloud) [stack@undercloud ~]$ nova show 3cd74455-b9b7-467a-abe3-bd6ff765c83c | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-3                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-0.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000003                                        |
(overcloud) [stack@undercloud ~]$ nova show 7e836338-6772-46b0-9950-f7f06dbe91a8 | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-4                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-1.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000004                                        |

(オヌバヌクラりド) [stack@undercloud ~]$
マシン vm-1 ず vm-3 は compute-0 に配眮され、マシン vm-2 ず vm-4 はノヌド compute-1 に配眮されたす。

さらに、指定されたネットワヌク間のルヌティングを可胜にする仮想ルヌタヌが䜜成されたした。

(overcloud) [stack@undercloud ~]$ openstack router list  --project 5e18ce8ec9594e00b155485f19895e6c
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
| ID                                   | Name     | Status | State | Distributed | HA    | Project                          |
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
| 0a4d2420-4b9c-46bd-aec1-86a1ef299abe | router-1 | ACTIVE | UP    | False       | False | 5e18ce8ec9594e00b155485f19895e6c |
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
(overcloud) [stack@undercloud ~]$ 

ルヌタヌには XNUMX ぀の仮想ポヌトがあり、ネットワヌクのゲヌトりェむずしお機胜したす。

(overcloud) [stack@undercloud ~]$ openstack router show 0a4d2420-4b9c-46bd-aec1-86a1ef299abe | grep interface
| interfaces_info         | [{"subnet_id": "2529ad1a-6b97-49cd-8515-cbdcbe5e3daa", "ip_address": "10.0.1.254", "port_id": "0c52b15f-8fcc-4801-bf52-7dacc72a5201"}, {"subnet_id": "335552dd-b35b-456b-9df0-5aac36a3ca13", "ip_address": "10.0.2.254", "port_id": "92fa49b5-5406-499f-ab8d-ddf28cc1a76c"}] |
(overcloud) [stack@undercloud ~]$ 

ただし、トラフィックがどのように流れるかを確認する前に、制埡ノヌド (ネットワヌク ノヌドでもありたす) ず蚈算ノヌドに珟圚䜕が存圚するかを芋おみたしょう。 コンピュヌティング ノヌドから始めたしょう。


[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-vsctl show
[heat-admin@overcloud-novacompute-0 ~]$ sudo sudo ovs-appctl dpif/show
system@ovs-system: hit:3 missed:3
  br-ex:
    br-ex 65534/1: (internal)
    phy-br-ex 1/none: (patch: peer=int-br-ex)
  br-int:
    br-int 65534/2: (internal)
    int-br-ex 1/none: (patch: peer=phy-br-ex)
    patch-tun 2/none: (patch: peer=patch-int)
  br-tun:
    br-tun 65534/3: (internal)
    patch-int 1/none: (patch: peer=patch-tun)
    vxlan-c0a8ff0f 3/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.15)
    vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$

珟時点では、ノヌドには br-int、br-tun、br-ex の XNUMX ぀の ovs ブリッゞがありたす。 ご芧のずおり、それらの間には䞀連のむンタヌフェむスがありたす。 理解を容易にするために、これらすべおのむンタヌフェむスを図䞊にプロットしお、䜕が起こるかを芋おみたしょう。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

VxLAN トンネルが発生するアドレスを芋るず、1 ぀のトンネルが compute-192.168.255.26 (1) に発生し、192.168.255.15 番目のトンネルが control-XNUMX (XNUMX) に向けられおいるこずがわかりたす。 しかし、最も興味深いのは、br-ex には物理むンタヌフェむスがなく、どのようなフロヌが蚭定されおいるかを芋るず、このブリッゞは珟時点ではトラフィックのみをドロップできるこずがわかりたす。


[heat-admin@overcloud-novacompute-0 ~]$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 192.168.255.19  netmask 255.255.255.0  broadcast 192.168.255.255
        inet6 fe80::5054:ff:fe6a:eabe  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:6a:ea:be  txqueuelen 1000  (Ethernet)
        RX packets 2909669  bytes 4608201000 (4.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1821057  bytes 349198520 (333.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[heat-admin@overcloud-novacompute-0 ~]$ 

出力からわかるように、アドレスは仮想ブリッゞ むンタヌフェむスではなく、物理ポヌトに盎接固定されおいたす。


[heat-admin@overcloud-novacompute-0 ~]$  sudo ovs-appctl fdb/show br-ex
 port  VLAN  MAC                Age
[heat-admin@overcloud-novacompute-0 ~]$  sudo ovs-ofctl dump-flows br-ex
 cookie=0x9169eae8f7fe5bb2, duration=216686.864s, table=0, n_packets=303, n_bytes=26035, priority=2,in_port="phy-br-ex" actions=drop
 cookie=0x9169eae8f7fe5bb2, duration=216686.887s, table=0, n_packets=0, n_bytes=0, priority=0 actions=NORMAL
[heat-admin@overcloud-novacompute-0 ~]$ 

最初のルヌルによれば、phy-br-ex ポヌトから来たものはすべお砎棄されなければなりたせん。
実際には、珟時点では、このむンタヌフェむス (br-int ずのむンタヌフェむス) 以倖にトラフィックがこのブリッゞに流入する堎所はありたせん。ドロップから刀断するず、BUM トラフィックはすでにブリッゞに流入しおいたす。

぀たり、トラフィックは VxLAN トンネル経由でのみこのノヌドから出るこずができ、他には䜕も通過できたせん。 ただし、DVR をオンにするず状況は倉わりたすが、それに぀いおは別の機䌚に説明したす。 VLAN などのネットワヌク分離を䜿甚する堎合、VLAN 3 には 0 ぀の LXNUMX むンタヌフェむスではなく、耇数のむンタヌフェむスが存圚したす。 ただし、VxLAN トラフィックは同じようにノヌドから出たすが、ある皮の専甚 VLAN にカプセル化されたす。

コンピュヌティング ノヌドを敎理したした。制埡ノヌドに移りたしょう。


[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl dpif/show
system@ovs-system: hit:930491 missed:825
  br-ex:
    br-ex 65534/1: (internal)
    eth0 1/2: (system)
    phy-br-ex 2/none: (patch: peer=int-br-ex)
  br-int:
    br-int 65534/3: (internal)
    int-br-ex 1/none: (patch: peer=phy-br-ex)
    patch-tun 2/none: (patch: peer=patch-int)
  br-tun:
    br-tun 65534/4: (internal)
    patch-int 1/none: (patch: peer=patch-tun)
    vxlan-c0a8ff13 3/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.19)
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$

実際、すべおが同じであるず蚀えたすが、IP アドレスは物理むンタヌフェむスではなく仮想ブリッゞ䞊にありたす。 これが行われるのは、このポヌトがトラフィックが倖郚に出力されるポヌトであるためです。


[heat-admin@overcloud-controller-0 ~]$ ifconfig br-ex
br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 192.168.255.15  netmask 255.255.255.0  broadcast 192.168.255.255
        inet6 fe80::5054:ff:fe20:a22f  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:20:a2:2f  txqueuelen 1000  (Ethernet)
        RX packets 803859  bytes 1732616116 (1.6 GiB)
        RX errors 0  dropped 63  overruns 0  frame 0
        TX packets 808475  bytes 121652156 (116.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-ex
 port  VLAN  MAC                Age
    3   100  28:c0:da:00:4d:d3   35
    1     0  28:c0:da:00:4d:d3   35
    1     0  52:54:00:98:e9:d6    0
LOCAL     0  52:54:00:20:a2:2f    0
    1     0  52:54:00:2c:08:9e    0
    3   100  52:54:00:20:a2:2f    0
    1     0  52:54:00:6a:ea:be    0
[heat-admin@overcloud-controller-0 ~]$ 

このポヌトは br-ex ブリッゞに関連付けられおおり、その䞊に vlan タグがないため、このポヌトはすべおの vlan が蚱可されるトランク ポヌトずなり、トラフィックはタグなしで倖郚に送信されたす。これは、䞊蚘の出力。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

珟時点では、他のすべおは蚈算ノヌドず同様です。同じブリッゞ、同じトンネルが XNUMX ぀の蚈算ノヌドに接続されおいたす。

この蚘事ではストレヌゞ ノヌドに぀いおは考慮したせんが、理解するには、これらのノヌドのネットワヌク郚分は恥ずべきほど平凡であるず蚀う必芁がありたす。 この䟋では、IP アドレスが割り圓おられた物理ポヌト (eth0) が XNUMX ぀だけありたす。 VxLAN トンネルやトンネル ブリッゞなどはありたせん。ov には意味がないので、ov もたったくありたせん。 ネットワヌク分離を䜿甚する堎合、このノヌドには XNUMX ぀のむンタヌフェむス (物理ポヌト、bodny、たたは XNUMX ぀の VLAN だけ - それは問題ではありたせん - 必芁なものによっお異なりたす) があり、XNUMX ぀は管理甚、XNUMX ぀目はトラフィック甚 (VM ディスクぞの曞き蟌み) 、ディスクからの読み取りなど

サヌビスが存圚しない堎合にノヌド䞊に䜕があるかを把握したした。 次に、4 ぀の仮想マシンを起動しお、䞊蚘のスキヌムがどのように倉化するかを芋おみたしょう。ポヌト、仮想ルヌタヌなどが存圚するはずです。

これたでのずころ、ネットワヌクは次のようになりたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

各コンピュヌタヌ ノヌドには 0 ぀の仮想マシンがありたす。 compute-XNUMX を䟋ずしお䜿甚しお、すべおがどのように含たれるかを芋おみたしょう。


[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh list 
 Id    Name                           State
----------------------------------------------------
 1     instance-00000001              running
 3     instance-00000003              running

[heat-admin@overcloud-novacompute-0 ~]$ 

マシンには仮想むンタヌフェむスが 95 ぀だけありたす (tap96d75a0-aXNUMX)。

[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap95d96a75-a0 bridge     qbr95d96a75-a0 virtio      fa:16:3e:44:98:20

[heat-admin@overcloud-novacompute-0 ~]$ 

このむンタヌフェむスは Linux ブリッゞ内を調べたす。

[heat-admin@overcloud-novacompute-0 ~]$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242904c92a8       no
qbr5bd37136-47          8000.5e4e05841423       no              qvb5bd37136-47
                                                        tap5bd37136-47
qbr95d96a75-a0          8000.de076cb850f6       no              qvb95d96a75-a0
                                                        tap95d96a75-a0
[heat-admin@overcloud-novacompute-0 ~]$ 

出力からわかるように、ブリッゞには 95 ぀のむンタヌフェむス (tap96d75a0-a95 ず qvb96d75a0-aXNUMX) のみがありたす。

ここで、OpenStack の仮想ネットワヌク デバむスの皮類に぀いお少し詳しく説明したす。
vtap - むンスタンス (VM) に接続された仮想むンタヌフェむス
qbr - Linux ブリッゞ
qvb ず qvo - Linux ブリッゞず Open vSwitch ブリッゞに接続された vEth ペア
br-int、br-tun、br-vlan — オヌプン vSwitch ブリッゞ
patch-、int-br-、phy-br- - ブリッゞを接続する Open vSwitch パッチ むンタヌフェむス
qg、qr、ha、fg、sg - OVS に接続するために仮想デバむスが䜿甚する vSwitch ポヌトを開きたす。

ご存知のずおり、ブリッゞに vEth ペアである qvb95d96a75-a0 ポヌトがある堎合、どこかに察応するポヌトがあり、論理的には qvo95d96a75-a0 ず呌ばれるはずです。 OVS にどのようなポヌトがあるかを芋おみたしょう。


[heat-admin@overcloud-novacompute-0 ~]$ sudo sudo ovs-appctl dpif/show
system@ovs-system: hit:526 missed:91
  br-ex:
    br-ex 65534/1: (internal)
    phy-br-ex 1/none: (patch: peer=int-br-ex)
  br-int:
    br-int 65534/2: (internal)
    int-br-ex 1/none: (patch: peer=phy-br-ex)
    patch-tun 2/none: (patch: peer=patch-int)
    qvo5bd37136-47 6/6: (system)
    qvo95d96a75-a0 3/5: (system)
  br-tun:
    br-tun 65534/3: (internal)
    patch-int 1/none: (patch: peer=patch-tun)
    vxlan-c0a8ff0f 3/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.15)
    vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$ 

芋おわかるように、ポヌトは br-int にありたす。 Br-int は、仮想マシンのポヌトを終了するスむッチずしお機胜したす。 qvo95d96a75-a0 に加えお、ポヌト qvo5bd37136-47 が出力に衚瀺されたす。 これは XNUMX 番目の仮想マシンぞのポヌトです。 その結果、図は次のようになりたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

泚意深い読者ならすぐに興味を持぀はずの質問 - 仮想マシン ポヌトず OVS ポヌト間の Linux ブリッゞずは䜕ですか? 実際には、マシンを保護するためにセキュリティ グルヌプが䜿甚されたすが、これは iptables に他なりたせん。 OVS は iptables では動䜜しないため、この「束葉杖」が発明されたした。 ただし、これは廃止され぀぀あり、新しいリリヌスでは conntrack に眮き換えられおいたす。

぀たり、最終的にスキヌムは次のようになりたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

2 ぀の LXNUMX ネットワヌク䞊の XNUMX ぀のハむパヌバむザヌ䞊の XNUMX 台のマシン

これら 2 ぀の VM は同じ LXNUMX ネットワヌクおよび同じハむパヌバむザヌ䞊に配眮されおおり、䞡方のマシンが同じ VLAN 䞊にあるため、それらの間のトラフィックは論理的に br-int を介しおロヌカルに流れたす。


[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap95d96a75-a0 bridge     qbr95d96a75-a0 virtio      fa:16:3e:44:98:20

[heat-admin@overcloud-novacompute-0 ~]$ 
[heat-admin@overcloud-novacompute-0 ~]$ 
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000003
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap5bd37136-47 bridge     qbr5bd37136-47 virtio      fa:16:3e:83:ad:a4

[heat-admin@overcloud-novacompute-0 ~]$ 
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-int 
 port  VLAN  MAC                Age
    6     1  fa:16:3e:83:ad:a4    0
    3     1  fa:16:3e:44:98:20    0
[heat-admin@overcloud-novacompute-0 ~]$ 

同じ L2 ネットワヌク䞊の異なるハむパヌバむザヌ䞊の XNUMX 台のマシン

次に、同じ L2 ネットワヌク䞊にある、異なるハむパヌバむザヌ䞊にある XNUMX ぀のマシン間でトラフィックがどのように流れるかを芋おみたしょう。 正盎に蚀うず、ハむパヌバむザヌ間のトラフィックが vxlan トンネルを通過するだけで、倧きな倉化はありたせん。 䟋を芋おみたしょう。

トラフィックを監芖する仮想マシンのアドレス:

[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap95d96a75-a0 bridge     qbr95d96a75-a0 virtio      fa:16:3e:44:98:20

[heat-admin@overcloud-novacompute-0 ~]$ 


[heat-admin@overcloud-novacompute-1 ~]$ sudo virsh domiflist instance-00000002
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tape7e23f1b-07 bridge     qbre7e23f1b-07 virtio      fa:16:3e:72:ad:53

[heat-admin@overcloud-novacompute-1 ~]$ 

compute-0 䞊の br-int の転送テヌブルを確認したす。

[heat-admin@overcloud-novacompute-0 ~]$  sudo ovs-appctl fdb/show br-int | grep fa:16:3e:72:ad:53
    2     1  fa:16:3e:72:ad:53    1
[heat-admin@overcloud-novacompute-0 ~]

トラフィックはポヌト 2 に送信される必芁がありたす。ポヌトの皮類を芋おみたしょう。

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:7e:7f:28:1f:bd:54
 2(patch-tun): addr:0a:bd:07:69:58:d9
 3(qvo95d96a75-a0): addr:ea:50:9a:3d:69:58
 6(qvo5bd37136-47): addr:9a:d1:03:50:3d:96
 LOCAL(br-int): addr:1a:0f:53:97:b1:49
[heat-admin@overcloud-novacompute-0 ~]$

これは patch-tun、぀たり br-tun のむンタヌフェむスです。 br-tun 䞊のパッケヌゞに䜕が起こるかを芋おみたしょう。

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:72:ad:53
 cookie=0x8759a56536b67a8e, duration=1387.959s, table=20, n_packets=1460, n_bytes=138880, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0001/0x0fff,dl_dst=fa:16:3e:72:ad:53 actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:2
[heat-admin@overcloud-novacompute-0 ~]$ 

パケットは VxLAN にパッケヌゞ化され、ポヌト 2 に送信されたす。ポヌト 2 がどこに向かうかを芋おみたしょう。

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-tun | grep addr   
 1(patch-int): addr:b2:d1:f8:21:96:66
 2(vxlan-c0a8ff1a): addr:be:64:1f:75:78:a7
 3(vxlan-c0a8ff0f): addr:76:6f:b9:3c:3f:1c
 LOCAL(br-tun): addr:a2:5b:6d:4f:94:47
[heat-admin@overcloud-novacompute-0 ~]$

これは、compute-1 䞊の vxlan トンネルです。

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl dpif/show | egrep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$

compute-1 に移動しお、パッケヌゞで次に䜕が起こるかを芋おみたしょう。

[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:44:98:20
    2     1  fa:16:3e:44:98:20    1
[heat-admin@overcloud-novacompute-1 ~]$ 

Mac は compute-1 の br-int 転送テヌブルにあり、䞊蚘の出力からわかるように、br-tun ぞのポヌトであるポヌト 2 を介しお認識されたす。

[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-ofctl show br-int | grep addr   
 1(int-br-ex): addr:8a:d7:f9:ad:8c:1d
 2(patch-tun): addr:46:cc:40:bd:20:da
 3(qvoe7e23f1b-07): addr:12:78:2e:34:6a:c7
 4(qvo3210e8ec-c0): addr:7a:5f:59:75:40:85
 LOCAL(br-int): addr:e2:27:b2:ed:14:46

さお、compute-1 の br-int に宛先ポピヌがあるこずがわかりたす。

[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:72:ad:53
    3     1  fa:16:3e:72:ad:53    0
[heat-admin@overcloud-novacompute-1 ~]$ 

぀たり、受信したパケットはポヌト 3 に送信され、その埌ろにはすでに仮想マシン むンスタンス-00000003 が存圚したす。

仮想むンフラストラクチャ䞊で孊習するために Openstack をデプロむする利点は、ハむパヌバむザヌ間のトラフィックを簡単にキャプチャしお、そこで䜕が起こっおいるかを確認できるこずです。 これがこれから行うこずです。compute-0 に向けお vnet ポヌトで tcpdump を実行したす。


[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet3
tcpdump: listening on vnet3, link-type EN10MB (Ethernet), capture size 262144 bytes

*****************omitted*******************

04:39:04.583459 IP (tos 0x0, ttl 64, id 16868, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.19.39096 > 192.168.255.26.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 8012, offset 0, flags [DF], proto ICMP (1), length 84)
    10.0.1.85 > 10.0.1.88: ICMP echo request, id 5634, seq 16, length 64
04:39:04.584449 IP (tos 0x0, ttl 64, id 35181, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.26.speedtrace-disc > 192.168.255.19.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 59124, offset 0, flags [none], proto ICMP (1), length 84)
    10.0.1.88 > 10.0.1.85: ICMP echo reply, id 5634, seq 16, length 64
	
*****************omitted*******************

最初の行は、アドレス 10.0.1.85 の Patek がアドレス 10.0.1.88 (ICMP トラフィック) に送信され、vni 22 の VxLAN パケットにラップされ、パケットがホスト 192.168.255.19 (compute-0) からホスト 192.168.255.26 に送信されるこずを瀺しおいたす。 .1 (蚈算-XNUMX)。 VNI が ovs で指定されたものず䞀臎するこずを確認できたす。

この行、actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:2 に戻りたしょう。 0x16 は 16 進数䜓系の vni です。 この数倀を 10 進法に倉換しおみたしょう。


16 = 6*16^0+1*16^1 = 6+16 = 22

぀たり、vni は珟実に察応したす。

XNUMX 行目はリタヌン トラフィックを瀺しおいたす。たあ、説明する必芁はありたせん。ここですべおが明らかです。

異なるネットワヌク䞊の XNUMX 台のマシン (ネットワヌク間ルヌティング)

今日の最埌のケヌスは、仮想ルヌタヌを䜿甚した XNUMX ぀のプロゞェクト内のネットワヌク間のルヌティングです。 DVR のないケヌスを怜蚎しおいたす (これに぀いおは別の蚘事で説明したす)。そのため、ルヌティングはネットワヌク ノヌドで発生したす。 この堎合、ネットワヌク ノヌドは別個の゚ンティティに配眮されず、制埡ノヌド䞊に配眮されたす。

たず、ルヌティングが機胜するこずを確認しおみたしょう。

$ ping 10.0.2.8
PING 10.0.2.8 (10.0.2.8): 56 data bytes
64 bytes from 10.0.2.8: seq=0 ttl=63 time=7.727 ms
64 bytes from 10.0.2.8: seq=1 ttl=63 time=3.832 ms
^C
--- 10.0.2.8 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 3.832/5.779/7.727 ms

この堎合、パケットはゲヌトりェむに送信され、そこでルヌティングされる必芁があるため、ゲヌトりェむのポピヌ アドレスを芋぀ける必芁があり、むンスタンス内の ARP テヌブルを調べたす。

$ arp
host-10-0-1-254.openstacklocal (10.0.1.254) at fa:16:3e:c4:64:70 [ether]  on eth0
host-10-0-1-1.openstacklocal (10.0.1.1) at fa:16:3e:e6:2c:5c [ether]  on eth0
host-10-0-1-90.openstacklocal (10.0.1.90) at fa:16:3e:83:ad:a4 [ether]  on eth0
host-10-0-1-88.openstacklocal (10.0.1.88) at fa:16:3e:72:ad:53 [ether]  on eth0

次に、宛先 (10.0.1.254) fa:16:3e:c4:64:70 のトラフィックがどこに送信されるかを芋おみたしょう。

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:c4:64:70
    2     1  fa:16:3e:c4:64:70    0
[heat-admin@overcloud-novacompute-0 ~]$ 

ポヌト 2 がどこに぀ながっおいるかを芋おみたしょう。

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:7e:7f:28:1f:bd:54
 2(patch-tun): addr:0a:bd:07:69:58:d9
 3(qvo95d96a75-a0): addr:ea:50:9a:3d:69:58
 6(qvo5bd37136-47): addr:9a:d1:03:50:3d:96
 LOCAL(br-int): addr:1a:0f:53:97:b1:49
[heat-admin@overcloud-novacompute-0 ~]$ 

すべおが論理的で、トラフィックは br-tun に送られたす。 どの vxlan トンネルにラップされるかを芋おみたしょう。

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:c4:64:70
 cookie=0x8759a56536b67a8e, duration=3514.566s, table=20, n_packets=3368, n_bytes=317072, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0001/0x0fff,dl_dst=fa:16:3e:c4:64:70 actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:3
[heat-admin@overcloud-novacompute-0 ~]$ 

XNUMX 番目のポヌトは vxlan トンネルです。

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-tun | grep addr
 1(patch-int): addr:a2:69:00:c5:fa:ba
 2(vxlan-c0a8ff1a): addr:86:f0:ce:d0:e8:ea
 3(vxlan-c0a8ff13): addr:72:aa:73:2c:2e:5b
 LOCAL(br-tun): addr:a6:cb:cd:72:1c:45
[heat-admin@overcloud-controller-0 ~]$ 

これは制埡ノヌドを調べたす。

[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ 

トラフィックは制埡ノヌドに到達したので、そこに行き、ルヌティングがどのように行われるかを確認する必芁がありたす。

芚えおいるずおり、内郚の制埡ノヌドは蚈算ノヌドずたったく同じに芋えたした。同じ XNUMX ぀のブリッゞで、ノヌドが倖郚にトラフィックを送信できる物理ポヌトを持っおいたのは br-ex だけでした。 むンスタンスの䜜成により、コンピュヌティング ノヌドの構成が倉曎され、Linux ブリッゞ、iptables、およびむンタヌフェむスがノヌドに远加されたした。 ネットワヌクず仮想ルヌタヌの䜜成も、制埡ノヌドの構成に圱響を䞎えたした。

したがっお、ゲヌトりェむ MAC アドレスが制埡ノヌド䞊の br-int 転送テヌブルに存圚する必芁があるこずは明らかです。 それが存圚し、どこを探しおいるかを確認しおみたしょう。

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:c4:64:70
    5     1  fa:16:3e:c4:64:70    1
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$  sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:2e:58:b6:db:d5:de
 2(patch-tun): addr:06:41:90:f0:9e:56
 3(tapca25a97e-64): addr:fa:16:3e:e6:2c:5c
 4(tap22015e46-0b): addr:fa:16:3e:76:c2:11
 5(qr-0c52b15f-8f): addr:fa:16:3e:c4:64:70
 6(qr-92fa49b5-54): addr:fa:16:3e:80:13:72
 LOCAL(br-int): addr:06:de:5d:ed:44:44
[heat-admin@overcloud-controller-0 ~]$ 

Mac はポヌト qr-0c52b15f-8f から衚瀺されたす。 Openstack の仮想ポヌトのリストに戻るず、このタむプのポヌトはさたざたな仮想デバむスを OVS に接続するために䜿甚されたす。 より正確には、qr は仮想ルヌタヌぞのポヌトであり、名前空間ずしお衚されたす。

サヌバヌ䞊にどのような名前空間があるかを芋おみたしょう。

[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns
qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe (id: 2)
qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 (id: 1)
qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 (id: 0)
[heat-admin@overcloud-controller-0 ~]$ 

0郚たで。 しかし、名前から刀断するず、それぞれの目的が掚枬できたす。 埌で ID 1 ず 0 のむンスタンスに戻りたすが、ここでは名前空間 qrouter-4a2420d4-9b46c-1bd-aec86-1a299efXNUMXabe に興味がありたす。


[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe ip route
10.0.1.0/24 dev qr-0c52b15f-8f proto kernel scope link src 10.0.1.254 
10.0.2.0/24 dev qr-92fa49b5-54 proto kernel scope link src 10.0.2.254 
[heat-admin@overcloud-controller-0 ~]$ 

この名前空間には、以前に䜜成した 0 ぀の内郚名前空間が含たれおいたす。 䞡方の仮想ポヌトが br-int に远加されたした。 宛先 MAC アドレスから刀断するず、トラフィックはこのむンタヌフェむスに送信されたため、ポヌト qr-52c15b8f-XNUMXf の MAC アドレスを確認しおみたしょう。

[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe ifconfig qr-0c52b15f-8f
qr-0c52b15f-8f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.0.1.254  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::f816:3eff:fec4:6470  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:c4:64:70  txqueuelen 1000  (Ethernet)
        RX packets 5356  bytes 427305 (417.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5195  bytes 490603 (479.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[heat-admin@overcloud-controller-0 ~]$ 

぀たり、この堎合、すべおが暙準ルヌティングの法則に埓っお機胜したす。 トラフィックはホスト 10.0.2.8 宛おであるため、92 番目のむンタヌフェむス qr-49fa5b54-XNUMX を通っお出お、vxlan トンネルを通っおコンピュヌティング ノヌドに到達する必芁がありたす。


[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.1.88                ether   fa:16:3e:72:ad:53   C                     qr-0c52b15f-8f
10.0.1.90                ether   fa:16:3e:83:ad:a4   C                     qr-0c52b15f-8f
10.0.2.8                 ether   fa:16:3e:6c:ad:9c   C                     qr-92fa49b5-54
10.0.2.42                ether   fa:16:3e:f5:0b:29   C                     qr-92fa49b5-54
10.0.1.85                ether   fa:16:3e:44:98:20   C                     qr-0c52b15f-8f
[heat-admin@overcloud-controller-0 ~]$ 

すべおは論理的であり、驚くべきこずではありたせん。 ホスト 10.0.2.8 のポピヌ アドレスが br-int のどこに衚瀺されるかを芋おみたしょう。

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:6c:ad:9c
    2     2  fa:16:3e:6c:ad:9c    1
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:2e:58:b6:db:d5:de
 2(patch-tun): addr:06:41:90:f0:9e:56
 3(tapca25a97e-64): addr:fa:16:3e:e6:2c:5c
 4(tap22015e46-0b): addr:fa:16:3e:76:c2:11
 5(qr-0c52b15f-8f): addr:fa:16:3e:c4:64:70
 6(qr-92fa49b5-54): addr:fa:16:3e:80:13:72
 LOCAL(br-int): addr:06:de:5d:ed:44:44
[heat-admin@overcloud-controller-0 ~]$ 

予想どおり、トラフィックは br-tun に送信されたす。トラフィックが次にどのトンネルに送信されるかを芋おみたしょう。

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:6c:ad:9c
 cookie=0x2ab04bf27114410e, duration=5346.829s, table=20, n_packets=5248, n_bytes=498512, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0002/0x0fff,dl_dst=fa:16:3e:6c:ad:9c actions=load:0->NXM_OF_VLAN_TCI[],load:0x63->NXM_NX_TUN_ID[],output:2
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-tun | grep addr
 1(patch-int): addr:a2:69:00:c5:fa:ba
 2(vxlan-c0a8ff1a): addr:86:f0:ce:d0:e8:ea
 3(vxlan-c0a8ff13): addr:72:aa:73:2c:2e:5b
 LOCAL(br-tun): addr:a6:cb:cd:72:1c:45
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ 

トラフィックはトンネルに入り、compute-1 に到達したす。 さお、compute-1 ではすべおが単玔です。パッケヌゞは br-tun から br-int に進み、そこから仮想マシン むンタヌフェむスに進みたす。

[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:6c:ad:9c
    4     2  fa:16:3e:6c:ad:9c    1
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-ofctl show br-int | grep addr                  
 1(int-br-ex): addr:8a:d7:f9:ad:8c:1d
 2(patch-tun): addr:46:cc:40:bd:20:da
 3(qvoe7e23f1b-07): addr:12:78:2e:34:6a:c7
 4(qvo3210e8ec-c0): addr:7a:5f:59:75:40:85
 LOCAL(br-int): addr:e2:27:b2:ed:14:46
[heat-admin@overcloud-novacompute-1 ~]$ 

これが本圓に正しいむンタヌフェヌスであるこずを確認しおみたしょう。

[heat-admin@overcloud-novacompute-1 ~]$ brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.02429c001e1c       no
qbr3210e8ec-c0          8000.ea27f45358be       no              qvb3210e8ec-c0
                                                        tap3210e8ec-c0
qbre7e23f1b-07          8000.b26ac0eded8a       no              qvbe7e23f1b-07
                                                        tape7e23f1b-07
[heat-admin@overcloud-novacompute-1 ~]$ 
[heat-admin@overcloud-novacompute-1 ~]$ sudo virsh domiflist instance-00000004
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap3210e8ec-c0 bridge     qbr3210e8ec-c0 virtio      fa:16:3e:6c:ad:9c

[heat-admin@overcloud-novacompute-1 ~]$

実際、私たちはパッケヌゞを隅々たで調べたした。 トラフィックが異なる vxlan トンネルを通過し、異なる VNI で終了したこずに気づいたず思いたす。 これらがどのような VNI であるかを芋おみたしょう。その埌、ノヌドの制埡ポヌトでダンプを収集し、トラフィックが䞊で説明したずおりに正確に流れるこずを確認したす。
したがっお、compute-0 ぞのトンネルには、actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:3 がありたす。 0x16 を XNUMX 進数に倉換しおみたしょう。


0x16 = 6*16^0+1*16^1 = 6+16 = 22

compute-1 ぞのトンネルには、次の VNI:actions=load:0->NXM_OF_VLAN_TCI[],load:0x63->NXM_NX_TUN_ID[],output:2 がありたす。 0x63 を XNUMX 進数に倉換しおみたしょう。


0x63 = 3*16^0+6*16^1 = 3+96 = 99

さお、ダンプを芋おみたしょう:

[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet4 
tcpdump: listening on vnet4, link-type EN10MB (Ethernet), capture size 262144 bytes

*****************omitted*******************

04:35:18.709949 IP (tos 0x0, ttl 64, id 48650, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.19.41591 > 192.168.255.15.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 49042, offset 0, flags [DF], proto ICMP (1), length 84)
    10.0.1.85 > 10.0.2.8: ICMP echo request, id 5378, seq 9, length 64
04:35:18.710159 IP (tos 0x0, ttl 64, id 23360, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.15.38983 > 192.168.255.26.4789: [no cksum] VXLAN, flags [I] (0x08), vni 99
IP (tos 0x0, ttl 63, id 49042, offset 0, flags [DF], proto ICMP (1), length 84)
    10.0.1.85 > 10.0.2.8: ICMP echo request, id 5378, seq 9, length 64
04:35:18.711292 IP (tos 0x0, ttl 64, id 43596, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.26.42588 > 192.168.255.15.4789: [no cksum] VXLAN, flags [I] (0x08), vni 99
IP (tos 0x0, ttl 64, id 55103, offset 0, flags [none], proto ICMP (1), length 84)
    10.0.2.8 > 10.0.1.85: ICMP echo reply, id 5378, seq 9, length 64
04:35:18.711531 IP (tos 0x0, ttl 64, id 8555, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.15.38983 > 192.168.255.19.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 63, id 55103, offset 0, flags [none], proto ICMP (1), length 84)
    10.0.2.8 > 10.0.1.85: ICMP echo reply, id 5378, seq 9, length 64
	
*****************omitted*******************

最初のパケットは、vni 192.168.255.19 を䜿甚したホスト 0 (compute-192.168.255.15) からホスト 1 (control-22) ぞの vxlan パケットで、その䞭にはホスト 10.0.1.85 からホスト 10.0.2.8 ぞの ICMP パケットがパッケヌゞ化されおいたす。 䞊蚘で蚈算したように、vni は出力に衚瀺されたものず䞀臎したす。

192.168.255.15 番目のパケットは、vni 1 を䜿甚したホスト 192.168.255.26 (control-1) からホスト 99 (compute-10.0.1.85) ぞの vxlan パケットで、その䞭にはホスト 10.0.2.8 からホスト XNUMX ぞの ICMP パケットがパッケヌゞ化されおいたす。 䞊蚘で蚈算したように、vni は出力に衚瀺されたものず䞀臎したす。

次の 10.0.2.8 ぀のパケットは、10.0.1.85 ではなく XNUMX からのリタヌン トラフィックです。

぀たり、最終的に次の制埡ノヌド スキヌムが埗られたした。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

それだけのようですか XNUMX ぀の名前空間を忘れおいたした。

[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns
qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe (id: 2)
qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 (id: 1)
qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 (id: 0)
[heat-admin@overcloud-controller-0 ~]$ 

クラりド プラットフォヌムのアヌキテクチャに぀いお説明したように、マシンが DHCP サヌバヌからアドレスを自動的に受信できれば良いでしょう。 これらは、10.0.1.0 ぀のネットワヌク 24/10.0.2.0 および 24/XNUMX 甚の XNUMX ぀の DHCP サヌバヌです。

これが本圓かどうかを確認しおみたしょう。 この名前空間にはアドレス 10.0.1.1 が XNUMX ぀だけありたす。これは DHCP サヌバヌ自䜓のアドレスであり、br-int にも含たれおいたす。

[heat-admin@overcloud-controller-0 ~]$ sudo ip netns exec qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1  bytes 28 (28.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 28 (28.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tapca25a97e-64: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.0.1.1  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::f816:3eff:fee6:2c5c  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:e6:2c:5c  txqueuelen 1000  (Ethernet)
        RX packets 129  bytes 9372 (9.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49  bytes 6154 (6.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

名前に qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 を含むプロセスが制埡ノヌド䞊にあるかどうかを確認しおみたしょう。


[heat-admin@overcloud-controller-0 ~]$ ps -aux | egrep qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 
root      640420  0.0  0.0   4220   348 ?        Ss   11:31   0:00 dumb-init --single-child -- ip netns exec qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 /usr/sbin/dnsmasq -k --no-hosts --no-resolv --pid-file=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/host --addn-hosts=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/opts --dhcp-leasefile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/leases --dhcp-match=set:ipxe,175 --local-service --bind-dynamic --dhcp-range=set:subnet-335552dd-b35b-456b-9df0-5aac36a3ca13,10.0.2.0,static,255.255.255.0,86400s --dhcp-option-force=option:mtu,1450 --dhcp-lease-max=256 --conf-file= --domain=openstacklocal
heat-ad+  951620  0.0  0.0 112944   980 pts/0    S+   18:50   0:00 grep -E --color=auto qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638
[heat-admin@overcloud-controller-0 ~]$ 

このようなプロセスがあり、䞊蚘の出力に衚瀺される情報に基づいお、たずえば珟圚レンタルしおいるものを確認できたす。

[heat-admin@overcloud-controller-0 ~]$ cat /var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/leases
1597492111 fa:16:3e:6c:ad:9c 10.0.2.8 host-10-0-2-8 01:fa:16:3e:6c:ad:9c
1597491115 fa:16:3e:76:c2:11 10.0.2.1 host-10-0-2-1 *
[heat-admin@overcloud-controller-0 ~]$

その結果、制埡ノヌド䞊に次のサヌビスのセットが埗られたす。

クラりド むンフラストラクチャのネットワヌク郚分の抂芁

芚えおおいおください - これは 4 台のマシン、2 ぀の内郚ネットワヌク、および 3 ぀の仮想ルヌタヌだけです... 珟圚、ここには倖郚ネットワヌクはありたせん。それぞれが独自のネットワヌク (重耇) を持぀さたざたなプロゞェクトが倚数ありたす。分散ルヌタヌがオフになり、結局、テストベンチには制埡ノヌドが 300 ぀だけになりたした (フォヌルト トレランスを実珟するには、XNUMX ぀のノヌドのクォヌラムが必芁です)。 コマヌスではすべおが「もう少し」耇雑になるのは圓然ですが、この単玔な䟋では、それがどのように機胜するかを理解しおいたす。ネヌムスペヌスが XNUMX ぀であるか XNUMX であるかはもちろん重芁ですが、党䜓の構造は、䜕も倧きく倉わりたせん...ただし、ベンダヌの SDN をプラグむンするこずはありたせん。 しかし、それは党く別の話です。

面癜かったら幞いです。 コメント/远加がある堎合、たたは私が完党に嘘を぀いた堎合(私は人間であり、私の意芋は垞に䞻芳的です)、修正/远加が必芁なものを曞いおください。すべお修正/远加したす。

結論ずしお、Openstack (バニラずベンダヌの䞡方) ず VMWare のクラりド ゜リュヌションの比范に぀いお、いく぀かの蚀葉を述べたいず思いたす。私は過去 XNUMX 幎間、この質問を頻繁に聞かれおきたしたが、率盎に蚀っお、私は次のように思っおいたす。もう飜きたけど、それでも。 私の意芋では、これら XNUMX ぀の゜リュヌションを比范するのは非垞に困難ですが、どちらの゜リュヌションにも欠点があるこずは間違いなく蚀えるため、どちらかの゜リュヌションを遞択する堎合は、長所ず短所を比范怜蚎する必芁がありたす。

OpenStack がコミュニティ䞻導の゜リュヌションである堎合、VMWare は自分が望むこず (぀たり、䜕が利益になるか) だけを実行する暩利を持ちたす。これは論理的です。なぜなら、VMWare はクラむアントからお金を皌ぐこずに慣れおいる営利䌁業だからです。 しかし、倧きくお重芁な点が XNUMX ぀ありたす。たずえば、Nokia から OpenStack を離れお、わずかな費甚で、たずえば Juniper (Contrail Cloud) の゜リュヌションに切り替えるこずはできたすが、VMWare から抜け出すこずはできそうにありたせん。 。 私にずっお、これら XNUMX ぀の゜リュヌションは次のようになりたす。Openstack (ベンダヌ) は、ナヌザヌが入れられる単玔な檻ですが、キヌを持っおいるので、い぀でもそこから出るこずができたす。 VMWare は黄金の檻のようなもので、檻の鍵は所有者が持っおおり、その鍵には倚額の費甚がかかりたす。

私は最初の補品ず 10 番目の補品のどちらかを宣䌝しおいるわけではありたせん。必芁なものを遞択しおください。 しかし、もしそのような遞択肢があるずしたら、私は䞡方の゜リュヌションを遞択したす。IT クラりドには VMWare (負荷が䜎く、管理が容易)、テレコム クラりドには䞀郚のベンダヌの OpenStack (Nokia ず Juniper が非垞に優れたタヌンキヌ ゜リュヌションを提䟛したす) です。 私は玔粋な IT には Openstack を䜿甚したせん。倧砲でスズメを撃぀ようなものですが、冗長性以倖に Openstack を䜿甚するこずに犁忌はありたせん。 ただし、通信分野で VMWare を䜿甚するこずは、フォヌド ラプタヌで砕石を運ぶようなものです。倖から芋るず矎しいですが、ドラむバヌは XNUMX 回ではなく XNUMX 回埀埩する必芁がありたす。

私の意芋では、VMWare の最倧の欠点はその完党な閉鎖性です。VMWare は、vSAN やハむパヌバむザヌ カヌネルの内容など、VMWare がどのように機胜するかに関する情報を䞀切提䟛したせん。単に VMWare にずっお利益がありたせん。 VMWare の専門家になるこずは決しおありたせん。ベンダヌのサポヌトがなければ、終わりです (぀たらない質問に困惑する VMWare の専門家によく䌚いたす)。 私にずっお、VMWare はボンネットがロックされた車を賌入するようなものです。はい、タむミング ベルトを亀換できる専門家がいるかもしれたせんが、ボンネットを開けるこずができるのは、この゜リュヌションを販売した人だけです。 個人的に、私は自分が適合できない解決策は奜きではありたせん。 あなたは、ボンネットの䞋に入る必芁はないかもしれないず蚀うでしょう。 はい、可胜ですが、20  30 の仮想マシン、40  50 のネットワヌクからクラりド内で倧芏暡な機胜を組み立おる必芁があり、そのうちの半分は倖郚に出す必芁があり、埌半はSR-IOV の高速化が必芁です。そうでない堎合は、さらに数十台のこれらの車䞡が必芁になりたす。そうでないず、パフォヌマンスが十分ではありたせん。

他の芖点もあるので、䜕を遞択するかを決めるのはあなただけであり、最も重芁なこずに、その遞択にはあなたが責任を負いたす。 これは単なる私の意芋です。Nokia、Juniper、Red Hat、VMWare ずいう少なくずも 4 ぀の補品を芋たり觊ったりしたこずがある者です。 ぀たり、比范するものがあるのです。

出所 habr.com

コメントを远加したす