带有Open vSwitch的LXC

时间:2015-12-01 12:59:14

标签: ubuntu containers lxc openvswitch

我想尝试OVS(软件Linux切换)http://openvswitch.org/和我的LXC容器,Ubuntu作为主机和访客。所以我安装了它:

# apt-get install openvswitch-switch

根据此文档https://infologs.wordpress.com/2015/06/19/how-to-attach-lxc-container-to-ovs-openvswitch/配置

  1. 创建测试容器:

    # lxc-create -t ubuntu -n veth03-ovs -- -r trusty
    
  2. 创建ovs桥并为其分配IP:

    # ovs-vsctl add-br switch0
    # ip add add 192.168.100.1/24 dev switch0
    
  3. 让它成为新的网络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"
    
    1. 使用此网桥编辑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
      
    2. 所以我想为容器的内部接口指出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

1 个答案:

答案 0 :(得分:3)

这是我的坏事。我刚从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