vSwitch)のネットワーク設定(Bridge、Bonding、VLAN)の方法について記載しました。KVMとLXC/LXDにおいてLinuxBridgeで実現可能だったことを、ovsでも同様に実現可能にした内容となっています。このため、LinuxBridgeからovsへの移行設計が可能になると考えています。*1過去記事では、nmcliコマンドによるLinuxBridgeについて記載しましたが、LinuxBridgeからovsへ変更した際、どこが変わったのか?のポイントも記載したいと考えています。2.10.1今回は物理スイッチとLACPで接続するために上記の筐体を使用しましたが、LACP以外のところはVMWareWorkstation12上でも動作しますので、本記事に記載した内容は特に環境依存的なことはないと考えています。構成図上に(1)~(13)までの番号を割り振りました。スイッチ側の設定は以下となります。~コマンドのみ~以下のコマンドを投入していきます。やりたいことが既に決まっている方は、構成図とコマンドの内容を見るだけでもよいと思います。eth12.Bridge作成まずはBridgeを作成します。"2.10.1"3.BondingBondを作成し、物理インターフェースをBondにアタッチします。"2.10.1"過去記事の図と比較してもらえればわかると思いますが、過去記事の(3)~(5)を行った状態となります。"ovsbr0"の中にBondが入っています。"bond0"のインターフェースとして、物理のens1f0やens1f1が定義されています。これは仮想スイッチovsbr0のアップリンクポート(物理サーバの外部へ抜けるトラフィックが通るポート)がBondとして定義されている状態と言えます。仮にESXiのvSwitchで例えるなら、こんな↓状態です。4.永続化設定コマンドを打っただけだと、ホストOSをRebootすると消えてしまうので永続化設定を行います。networkいくつか、ポイントを記載します。固定LAGのどちらかの設定を行ってください。ここではLACPとします。・ovsのDefaultでは、vlan_mode=trunkにてFullTrunk状態となっているため、明示的にTrunkするVLANを絞りたい場合に、trunks=11,300-302が必要となります。*2・NM_CONTROLLED=noにより、該当するインターフェースがNetworkManagerの管理下から外れるため必須設定と考えてください。・nmcliコマンドでBondを作成した際も、上記パス*3に似たようなファイルが生成されていますが、ovs特有のオプションを指定できる点が異なります。・networkサービスのリスタートを行っても正常に動作しない場合、少々ダサいですがホストOSごと再起動してみてください。仮想マシン側でNICを追加する際、ovsを選択できるようにするため、libvirt上でネットワークの定義を行います。その際、仮想マシンとovsをaccessポートで接続するのか?trunkポートで接続するのか?を設定できるようにするため、PortGroupの定義も併せて行います。ESXiのvSwitchで例えるなら、下図の左側にある「仮想マシンのポートグループ」の設定を行っていくイメージです。</vlan></portgroup></network>いくつか、ポイントを記載します。portとして接続させたい場合の設定となります。portとして接続させたい場合の設定となります。IDを付けずにトラフィックを流してくる仮想マシン用として使用できます。IDを付けてトラフィックを流してくる仮想マシン用として使用できます。ちなみに、B.においては、4.永続化設定で記載したように、DefaultでFullTrunk状態です。このため、許可するVLANを絞ることも可能なようですが、ここでは割愛します。*4上記ファイルの作成が完了したら、virshコマンドで定義していきます。以下が各コマンドの出力結果となります。yes上記の設定が完了すると、Virt-Manager上の画面からovsやPortGroupが選択できるようになります。portで接続Virt-Manager画面上で設定する場合は、以下の通り。Network’ovsnw’を選択Portgroup:vlan300を選択virshコマンドで設定する場合は、以下の通り。portで接続Virt-Manager画面上で設定する場合は、以下の通り。Network’ovsnw’を選択Portgroup:untagを選択virshコマンドで設定する場合は、以下の通り。</interface>8.Guest側Tagging例1と2Guest2起動後、Guest2のbash上でnmcliコマンドにより、VLANインターフェースを作成します。nmcliコマンドの詳細については、過去記事を参照ください。portの設定により、(5)のeth0とvnet1間はFullTrunkで接続されていると考えてください。これにより、例えば、SrcIP:192.168.31.162-DstIP:192.168.31.254でPingを打つと、以下のような流れで処理されます。ID301がTaggingされる。(5)はFullTrunk状態なので、VLANタグは剥がされずに、そのままスイッチング処理*5される。(2)では11,300-302がAllowedされているので、VLANタグは剥がされずに、そのままスイッチング処理される。InterfaceがPingに応答する。Interface)の作成と同時に永続化設定も実施します。bridgeのアタッチ)に進むと、必ず躓くポイントになります。302をBridgeとして認識させる必要があるためです。302)にコンテナlxc762のeth1をアタッチします。eth1アタッチ後、仮想マシンやLXCコンテナを起動すると、ovs上では以下のように構成されていることが確認できます。」まで打った後、Tabキーで補完してみてください。すると、物理インターフェースもしくはBridgeインターフェースしか表示されません。virbr0すると、lxcコンテナをovsにアタッチするためには、ovsbr0を選択するしかない状態となってしまいます。302がBridgeであるということを明示的に認識させる必要があるため、fake_bridge=trueオプションを指定しています。ちなみに、上記のlxcコマンドでovsbr0を選択した場合、(5)に接続した状態となります。IDを付与する必要があります。IDを付ける設定を実施することは、そもそも使い方が間違っている気がしました。*6このため、KVM:(4)の通り、PortGroupで所属するVLANを決定する。bridgeで所属するVLANを決定する。いう使い方が適しているのではないかと考えています。12.補足2:ovs上での見え方Guest1と2を起動すると、ovs上では以下のように見えます。"2.10.1"また、今回LCAPを使用しましたが、LCAPの状態を確認する場合は、以下のコマンドで可能です。13.最後に以下のサイトを参考にさせて頂きました。GitHubovsは、最初は取っ付き難かったのですが、触ってみると意外と楽しかったです。LinuxBridgeと異なる点として、Port(Interface)やBond、VLANの概念がBridgeの中に集約されている(ように見える)ので、よりスイッチっぽいかな?と。ovsはVxLANのVTEPを作ったり、OpenFlowが使えたりと色々遊べるのですが、まずはLinuxBridgeからの移行で最低限必要な機能は網羅できたかなと思います。次のステップとして、DPDKを実装したいと考えています。*1:手前味噌ですが、私はovsに一本化しようと思いました。*2:ネットワークエンジニアという職業柄、意図しないループが怖いため、TrunkするVLANはなるべく絞りたい派です。id='11,300-302'などと記載すれば、できそうな気がしていますが、libvirt側の話題になるため、また別の機会に確認したいと思います。*5:宛先MACアドレスとMACアドレステーブルを照合し、受信したEtherフレームを然るべきポートへ転送する動作のこと*6:もちろん、ケースバイケースで充分な議論をする余地はあるかと思います。月別アーカイブはてなブログをはじめよう!metonymicalさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。