我想用我的LXC容器(以Ubuntu为主机和 guest )尝试OVS(软件Linux交换机)http://openvswitch.org/。所以我已经安装了它:

# apt-get install openvswitch-switch

根据此文档配置https://infologs.wordpress.com/2015/06/19/how-to-attach-lxc-container-to-ovs-openvswitch/
  • 创建的测试容器:
    # 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
    

  • 假设它是新网络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
    

    网桥接口(interface)状态:
    # ovs-vsctl show
    1b236728-4637-42a5-8b81-53d4c93a6803
        Bridge "switch0"
            Port "switch0"
                Interface "switch0"
                    type: internal
        ovs_version: "2.3.2"
    
  • 编辑了veth03-ovs容器的LXC配置,以使用此桥:
    # 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作为容器的内部接口(interface)。

    /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的中间接口(interface)。但我不确定。

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

    最佳答案

    这是我的坏事。我刚刚从Wordpress博客复制了ifup/ifdown脚本。但是有错别字:

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

    但应为:
    ovs-vsctl --may-exist add-br $BRIDGE
    
    --,而不仅仅是-之前的mayifup/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
    

    关于ubuntu - 具有Open vSwitch的LXC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34021070/

    10-13 07:31