2015-12-01 45 views
4

我想嘗試OVS(軟件Linux交換機)http://openvswitch.org/與我的LXC容器與Ubuntu作爲主機和來賓。所以,我已經安裝了它:帶開放式vSwitch的LXC

# lxc-create -t ubuntu -n veth03-ovs -- -r trusty 
  • 創建OVS橋樑和分配的IP給它:

    # ovs-vsctl add-br switch0 
    # ip add add 192.168.100.1/24 dev switch0 
    

    # apt-get install openvswitch-switch 
    

    根據這個文檔https://infologs.wordpress.com/2015/06/19/how-to-attach-lxc-container-to-ovs-openvswitch/

    1. 創建的測試容器配置

    讓它成爲新的網絡192.168.100.0/24和switch0(根據我的理解)將在那裏的第一個地址(網關)。

    看起來很好:

    # ip a 
    ... 
    4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
        link/ether 52:9d:e1:60:1d:56 brd ff:ff:ff:ff:ff:ff 
    5: switch0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
        link/ether 16:63:eb:47:13:41 brd ff:ff:ff:ff:ff:ff 
        inet 192.168.100.1/24 scope global switch0 
         valid_lft forever preferred_lft forever 
    

    橋接口狀態:

    # ovs-vsctl show 
    1b236728-4637-42a5-8b81-53d4c93a6803 
        Bridge "switch0" 
         Port "switch0" 
          Interface "switch0" 
           type: internal 
        ovs_version: "2.3.2" 
    
  • 被修改LXC配置爲veth03-OVS容器使用這種橋:

    # vim /var/lib/lxc/veth03-ovs/config 
    ... 
    lxc.network.type = veth 
    lxc.network.flags = up 
    
    lxc.network.script.up = /etc/lxc/ifup 
    lxc.network.script.down = /etc/lxc/ifdown 
    # lxc.network.veth.pair = lxc0 
    lxc.network.hwaddr = 00:16:3e:15:b3:62 
    lxc.network.ipv4 = 192.168.100.10 
    
  • 所以我想指出192.168.100.10爲容器的內部接口。

    的/ etc/LXC/ifup的的/ etc/LXC/ifdown你添加/刪除端口啓動/停止容器後,此橋。

    # cat /etc/lxc/ifup 
    #!/bin/bash 
    
    BRIDGE=」switch0″ 
    ovs-vsctl –may-exist add-br $BRIDGE 
    ovs-vsctl –if-exists del-port $BRIDGE $5 
    ovs-vsctl –may-exist add-port $BRIDGE $5 
    
    # cat /etc/lxc/ifdown 
    #!/bin/bash 
    ovsBr=’switch0′ 
    ovs-vsctl –if-exists del-port ${ovsBr} $5 
    

    所以現在我要開始容器,但得到:

    # lxc-start -n veth03-ovs --logfile /tmp/log 
    lxc-start: lxc_start.c: main: 344 The container failed to start. 
    lxc-start: lxc_start.c: main: 346 To get more details, run the container in foreground mode. 
    lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options. 
    
    # cat /tmp/log 
        lxc-start 1448974395.199 ERROR lxc_conf - conf.c:run_buffer:342 - Script exited with status 1 
        lxc-start 1448974395.225 ERROR lxc_conf - conf.c:lxc_create_network:3079 - failed to create netdev 
        lxc-start 1448974395.225 ERROR lxc_start - start.c:lxc_spawn:950 - failed to create the network 
        lxc-start 1448974395.225 ERROR lxc_start - start.c:__lxc_start:1213 - failed to spawn 'veth03-ovs' 
        lxc-start 1448974400.730 ERROR lxc_start_ui - lxc_start.c:main:344 - The container failed to start. 
        lxc-start 1448974400.730 ERROR lxc_start_ui - lxc_start.c:main:346 - To get more details, run the container in foreground mode. 
        lxc-start 1448974400.730 ERROR lxc_start_ui - lxc_start.c:main:348 - Additional information can be obtained by setting the --logfile and --logpriority options. 
    

    我想在的錯誤lxc.network.script.up/lxc.network.script.down腳本和它沒有得到$5參數,這應該是LXC傳遞給OVS的中間接口。但我不確定。

    LXC是否支持Open vSwitch? https://github.com/lxc/lxc/issues/256

    回答

    3

    這是我的錯。我剛剛從WordPress博客複製了ifup/ifdown腳本。但也有錯別字:

    ovs-vsctl –may-exist add-br $BRIDGE 
    

    ,但應該是:

    ovs-vsctl --may-exist add-br $BRIDGE 
    

    --,不只是-之前may。在ifup/ifdown腳本中處處相同。所以他們應該看起來像這些:

    # cat /etc/lxc/ifup 
    #!/bin/bash 
    
    BRIDGE=switch0 
    ovs-vsctl --may-exist add-br $BRIDGE 
    ovs-vsctl --if-exists del-port $BRIDGE $5 
    ovs-vsctl --may-exist add-port $BRIDGE $5 
    
    # cat /etc/lxc/ifdown 
    #!/bin/bash 
    ovsBr=switch0 
    ovs-vsctl --if-exists del-port ${ovsBr} $5