2016年9月28日水曜日

Open vSwitch試してみよう

とりあえず、Open vSwtichを試してみる。

Open vSwitchは、どうやらNetworkManagerでは管理出来ないっぽい。
まだNetworkManagerが対応していないようなのだ。
IPを付与している物理NICも、Network Managerではなく、旧来の管理方法(/etc/network/interfaces)を用いる必要があるようだ。
せっかく、IPアドレスの固定化でNetworkManagerを使用したのに、元に戻すことになってしまう。

大きな流れは以下の通りだ。
  1. Open vSwitchをインストールする。
  2. NetworkManagerから旧来の/etc/network/interfacesに切り替える。
  3. Open vSwitchのブリッジを作成する。
  4. /etc/network/interfacesの設定を書き換え、物理NICのIPアドレスを削除(ブリッジに接続)し、ブリッジにIPアドレスを付与する設定にする。
  5. KVMに新しいネットワークを作成する。(Open vSwitchで作成したブリッジを認識させる。既存のdefaultをOpen vSwitchに切り替えるやり方もアリ。)
  6. 既存の仮想マシンの接続先を、新しいネットワークに変更する。
1番と2番は順序は関係無い。2番を先に実施してもいいぞ。
この間、何度かOS再起動をしながら確認することになるため、コンソールから作業することになる。

以下、上記流れに沿って実施してみる。
  1. Open vSwitchをインストールする。
    (aquarius)$ sudo apt-get update
    (aquarius)$ sudo apt-get --simulate install openvswitch-switch
    (aquarius)$ sudo apt-get install openvswitch-switch
     
  2. NetworkManagerから旧来の/etc/network/interfacesに切り替える。
    今回は、interfacesに直接記載するのではなく、/etc/network/interfaces.dの下にNICの名前のファイルを作って、そちらに定義してみることにする。
    (aquarius)$ sudo vi /etc/network/interfaces.d/enp0s25
    ----以下の内容で作成----
    auto enp0s25
    iface enp0s25 inet static
        address   192.168.55.131
        netmask   255.255.255.0
        network   192.168.55.0
        broadcast 192.168.55.255
        gateway   192.168.55.1

        dns-nameservers 192.168.55.1
        #dns-nameservers 8.8.8.8
    ----ココまで----
    あくまで、192.168.55.131/24のIPアドレスを付与する時の設定で、ルータのアドレスが192.168.55.1であることを想定して書いている。
    各自、自分のネットワーク環境に合わせて欲しい。

    また、最後の行は意味が無い行だ。ネームサーバを複数指定可能な環境の人向けのサンプルと思ってくれぃ。

    これを設定したら、一度OSを再起動して、正しく反映されるか確認しておこう。
    (aquarius)$ sudo shutdown -r now
    (aquarius)$ ip address show
    (aquarius)$ nmtui
    nmtuiで「接続をアクティベートする」を選び、enp0s25にマーク(*)が付いていなければ、NetworkManager管理下に無い(interfaces管理下)ので成功だ。

    ネームサーバの設定も行われているか確認しておこう。
    (aquarius)$ dig www.yahoo.co.jp
     
  3. Open vSwitchのブリッジを作成する。
    (ここでは、br-external という名前にしている)
    (aquarius)$ sudo ovs-vsctl show
    5070b377-4ad8-4ede-9ab5-d69ccfa820cb
        ovs_version: "2.5.0"
    (aquarius)$ sudo ovs-vsctl list-br
    (aquarius)$ sudo ovs-vsctl add-br br-external
    (aquarius)$ sudo ovs-vsctl show
    5070b377-4ad8-4ede-9ab5-d69ccfa820cb
        Bridge br-external
            Port br-external
                Interface br-external
                    type: internal
        ovs_version: "2.5.0"
    (aquarius)$ sudo ovs-vsctl list-br
    br-external
    (aquarius)$ sudo ovs-vsctl list-ports br-external
    (aquarius)$ sudo ovs-vsctl list-ifaces br-external
    (aquarius)$ sudo ovs-vsctl get-controller br-external
    (aquarius)$ sudo ovs-vsctl get-aa-mapping br-external
    (aquarius)$ sudo ovs-vsctl get-manager

    こんなんでいいのかな…?
     
  4. /etc/network/interfacesの設定を書き換え、物理NICのIPアドレスを削除(ブリッジに接続)し、ブリッジにIPアドレスを付与する設定にする。

    今度は、物理NIC(enp0s25)のIPアドレスを削除して、ブリッジI/Fを作成、IPアドレスをそちらに付与する。
    よく分かっていないのだが、ブリッジ側にIPを付与しないと、ホストマシン(aquarius)のネットワークが使えなくなるのだ。
    まずは、先に作成した設定ファイルを別の場所に移動しておく。(そのためのディレクトリも作っておく。)
    (aquarius)$ sudo mkdir /etc/network/interfaces.d.old
    (aquarius)$ ls -al /etc/network/interfaces.d.old
    (aquarius)$ sudo mv /etc/network/interfaces.d/enp0s25 /etc/network/interfaces.d.old/
    (aquarius)$ ls -al /etc/network/interfaces.d.old

    続いて、物理NICのIPを削除。(IP未設定とする)
    物理NIC設定と、ブリッジ設定で順番があるかもしれないので、ファイル名に数字を付与しておく。
    (aquarius)$ sudo vi /etc/network/interfaces.d/0110.enp0s25
    --ココから--
    auto enp0s25
    allow-br-external
    iface enp0s25 inet manual
        ovs_bridge br-external
        ovs_type   OVSPort
    --ココまで--

    ブリッジへのIP付与だ
    (aquarius)$ sudo vi /etc/network/interfaces.d/0010.br-external
    --ココから--
    auto br-external
    allow-ovs br-external
    iface br-external inet static
        address   192.168.55.131
        network   192.168.55.0
        netmask   255.255.255.0
        broadcast 192.168.55.255
        gateway   192.168.55.1
        ovs_type  OVSBridge
        ovs_ports enp0s25

        dns-nameservers 192.168.55.1
    --ココまで--

    ここまで出来たら、一度OSを再起動し、設定が反映されるか確認しよう。
    (aquarius)$ sudo shutdown -r now
    (aquarius)$ ip address show
    (aquarius)$ dig www.blogger.com
    (aquarius)$ sudo ovs-vsctl show

    ip address showを実行したら、今までIPが付与されていたenp0s25には直接IPは付与されておらず、master ovs-sysytemとなっていることが確認できる。
    (IPv6アドレスは特に変更していないため、リンクローカルアドレスは付与されているが…)

    そして、br-externalにIPが付与されているはずだ。
     
  5. KVMに新しいネットワークを作成する。(Open vSwitchで作成したブリッジを認識させる。既存のdefaultをOpen vSwitchに切り替えるやり方もアリ。)

    新しいネットワーク定義を作成するので、既存の定義を確認しておく。
    (aquarius)$ virsh net-list --all

    新しいネットワーク定義用のxmlファイルを作成する。
    (aquarius)$ vi ovsbridge.xml
    --ここから
    <network>
      <name>ovsbridge</name>
      <forward mode='bridge'/>
      <bridge name='br-external'/>
      <virtualport type='openvswitch'/>
    </network>
    --ここまで

    作成した定義ファイルを取り込もう。
    (aquarius)$ virsh net-define ovsbridge.xml
    (aquarius)$ virsh net-list --all

    定義が取り込めたら、自動起動に設定する。
    (aquarius)$ virsh net-autostart ovsbridge
    (aquarius)$ virsh net-list --all

    併せて、ネットワーク定義を起動しておこう。
    (aquarius)$ virsh net-start ovsbridge
    (aquarius)$ virsh net-list --all
     
  6. 既存の仮想マシンの接続先を、新しいネットワークに変更する。
    piscesもariesも同じ作業なので、同じ手順で設定できる。

    まずは、今の状態を出力しておく。
    (aquarius)$ virsh dumpxml pisces

    内容を確認したら、仮想マシンのネットワーク接続先をdefaultからovsbridgeに書き換える。
    (aquarius)$ virsh edit pisces
    <interface type='network'>という定義を探して、その中にある<source network='default'/>を<source network='ovsbridge'/>に書き換えよう。

    終わったら、設定が反映されているか確認だ。
    (aquarius)$ virsh dumpxml pisces
これで設定は完了だ。
piscesやariesを起動、Remote Viewerからログインして、IPアドレスを確認してみて欲しい。
今までは、DHCPで192.168.122.xのIPアドレスが付与されていたと思うが、今はDHCPで192.168.55.xのアドレスが付与されているはずだ。
そのアドレスに向かって、aquarisや他の(192.168.55.xネットワーク上の)マシンからsshログインが出来ることも併せて確認して欲しい。

以後、仮想マシン作成時に、接続するネットワークをovsbridgeにすれば、ホストOS側と同じネットワークにフラットに接続できる。

本来、Open vSwitchは、SDN(Software Defined Network)に使うような高機能仮想スイッチだが、今回は単純スイッチとして使っている。(勿体無いが)
いずれ、SDNスイッチとして色々実験していくことになると思うが、当面やりたいことは実現出来た。

今回は以上。

0 件のコメント:

コメントを投稿