lxc网络

本文详细介绍了LXC容器的网络配置,包括macvlan模式的bridge应用、vlan的工作原理和配置,以及phys模式的应用场景。在macvlan模式下,容器能与宿主机和其它主机通信,而在vlan模式下,容器只能与相同vlan的主机通信。对于phys模式,直接将物理网卡分配给容器。此外,还提供了详细的配置示例和应用场景。

lxc网络

 

1      macvlan方式

macvlan方式有三种模式private、bridge、vepa

要容器与宿主机间,容器与其他主机间都能正常通信,需要使用bridge的模式,并且主机也需要配置macvlan虚拟设备(参考1.3),使用其他模式,不管配不配置主机,都只能和其他主机通信,不能和宿主机通信。

1.1      应用场景

 

1.2      数据收发方式

 

1.3      目前验证能够网络正常的通信设置:

config:

lxc.network.type=macvlan

lxc.network.link=eth0

lxc.network.flags=up

lxc.network.macvlan.mode=bridge

lxc.network.ipv4=128.5.160.94/24

lxc.network.ipv4.gateway=128.5.160.254

lxc.utsname=suse1

         

lxc.tty = 4

lxc.pts = 1024

lxc.rootfs = /home/w00227741/SUSE_sp2_template/rootfs

lxc.mount  = /home/w00227741/SUSE_sp2_template/fstab

         

lxc.cgroup.devices.deny= a

# /dev/null andzero

lxc.cgroup.devices.allow= c 1:3 rwm

lxc.cgroup.devices.allow= c 1:5 rwm

# consoles

lxc.cgroup.devices.allow= c 5:1 rwm

lxc.cgroup.devices.allow= c 5:0 rwm

lxc.cgroup.devices.allow= c 4:0 rwm

lxc.cgroup.devices.allow= c 4:1 rwm

#/dev/{,u}random

lxc.cgroup.devices.allow= c 1:9 rwm

lxc.cgroup.devices.allow= c 1:8 rwm

lxc.cgroup.devices.allow= c 136:* rwm

lxc.cgroup.devices.allow= c 5:2 rwm

# rtc

lxc.cgroup.devices.allow= c 254:0 rwm

 

宿主机上:

配置前:

# ifconfig

eth0      Link encap:Ethernet  HWaddr 80:FB:06:36:96:68 

          inet addr:128.5.160.34  Bcast:128.5.160.255  Mask:255.255.255.0

          inet6 addr:fe80::82fb:6ff:fe36:9668/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1

          RX packets:67 errors:0 dropped:0overruns:0 frame:0

          TX packets:77 errors:0 dropped:0overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:7013 (6.8 Kb)  TX bytes:10224 (9.9 Kb)

          Memory:f9360000-f9380000

 

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436 Metric:1

          RX packets:27 errors:0 dropped:0overruns:0 frame:0

          TX packets:27 errors:0 dropped:0overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:1863 (1.8 Kb)  TX bytes:1863 (1.8 Kb)

配置:

#ifconfig eth0 0

#ip link add link eth0 name mac0 type macvlan modebridge

#ifconfig mac0128.5.160.34/24

#ip route adddefault via 128.5.160.254

配置后:

# ifconfig

eth0      Link encap:Ethernet  HWaddr 80:FB:06:36:96:68 

          inet6 addr:fe80::82fb:6ff:fe36:9668/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1

          RX packets:2195 errors:0 dropped:0overruns:0 frame:0

          TX packets:2398 errors:0 dropped:0overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:200385 (195.6 Kb)  TX bytes:731847 (714.6 Kb)

          Memory:f9360000-f9380000

 

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436 Metric:1

          RX packets:102 errors:0 dropped:0overruns:0 frame:0

          TX packets:102 errors:0 dropped:0overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:8291 (8.0 Kb)  TX bytes:8291 (8.0 Kb)

 

mac0      Link encap:Ethernet  HWaddr A2:43:7A:C1:7E:FE 

          inet addr:128.5.160.34  Bcast:128.5.160.255  Mask:255.255.255.0

          inet6 addr:fe80::a043:7aff:fec1:7efe/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1

          RX packets:1016 errors:0 dropped:0overruns:0 frame:0

          TX packets:998 errors:0 dropped:0overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:90631 (88.5 Kb)  TX bytes:344116 (336.0 Kb)

# netstat -r

Kernel IProuting table

Destination     Gateway         Genmask         Flags  MSS Window  irtt Iface

default         128.5.160.254   0.0.0.0         UG        0 0          0 mac0

loopback        *               255.0.0.0       U        0 0          0 lo

128.5.160.0     *               255.255.255.0   U        0 0          0 mac0

(一段时间后BMC好像会变得不能用,连接后一片漆黑,木有图像)

1.4      三种模式的区别

2      vlan

使用vlan方式,只能与配置了同意vlan id的主机通信,lxc使用的vlan方式是linux下的vlan

 

2.1      应用场景

vlan是一种通过将局域网内的设备逻辑划分为一个个网段从而实现虚拟工作组的技术,是建立在物理网络基础上的一种逻辑子网,一个vlan组就是一个逻辑子网,即一个逻辑广播域,一个vlan内的广播和单播流量都不会转发到其他vlan中,通过对vlan的创建,隔离了广播,缩小了广播范围,可以控制广播风暴的产生。

2.2      数据收发方式

lxc中使用vlan的方式通信时,会根据指定的vlanid创建一个vlan设备,与真实的物理网卡进行绑定,并将其移入容器中。

数据收发送流程大致如下:


容器向外发送数据:

vlan设备对于上层协议而言,和实际的设备是平等的,因此也会参与路由的选择,当vlan设备被选为出口设备(容器内只有一个vlan设备,因此都是通过vlan设备对外发送数据),在hard_dev_start_xmit函数中检查到是vlan设备发送的数据包,就会插入vlan tag,并修改skb->proto=8021q,再调用vlan设备的ndo_start_xmit()函数发送数据,在该函数中会将skb重定向到宿主机上的真实物理设备,并调用真实物理设备发送数据。

当真实物理网卡接收到数据时,对数据进行检查,如果发现是vlan包,会将vlan tag移除,并将vlan id保存到skb->vlan_tci中,根据该设置的标志,将skb重定向到与真实物理网卡绑定的vlan设备,由vlan设备提交给协议栈上层,也就将数据传到了容器内。(vlan设备和真实物理设备的mac地址是一样的,所以发给vlan设备的数据包能被真实物理设备接受到)

 

2.3      配置方式

config:

lxc.network.type=vlan

lxc.network.link=eth2

lxc.network.flags=up

lxc.network.vlan.id= 1234

lxc.network.ipv4=128.5.130.65/24

lxc.utsname = suse1

                

lxc.tty = 4

lxc.pts = 1024

lxc.rootfs =/home/w00227741/SUSE_sp2_template/rootfs

lxc.mount = /home/w00227741/SUSE_sp2_template/fstab

                

lxc.cgroup.devices.deny = a

# /dev/null and zero

lxc.cgroup.devices.allow = c 1:3 rwm

lxc.cgroup.devices.allow = c 1:5 rwm

# consoles

lxc.cgroup.devices.allow = c 5:1 rwm

lxc.cgroup.devices.allow = c 5:0 rwm

lxc.cgroup.devices.allow = c 4:0 rwm

lxc.cgroup.devices.allow = c 4:1 rwm

# /dev/{,u}random

lxc.cgroup.devices.allow = c 1:9 rwm

lxc.cgroup.devices.allow = c 1:8 rwm

lxc.cgroup.devices.allow = c 136:* rwm

lxc.cgroup.devices.allow = c 5:2 rwm

# rtc

lxc.cgroup.devices.allow = c 254:0 rwm

 

在物理机上起的容器和宿主机以及和其他主机(配置同一vlan)都不能ping通,可能是和物理机上本身就划分了vlan的原因

 

在虚拟机上起vlan容器:

在另一虚拟机上配置vlan:

vconfig add eth1 1234

ifconfig eth1.1234 128.5.130.64/24

ifconfig eth1.1234 up

ifconfig eth1 0 (可选,测试发现并不影响)

 

这样虚拟机上的容器可以和配置同一vlan的其他虚拟机正常通信(不论是ping配置的vlan设备的ip还是vlan设备所在真是物理设备的ip),但是容器能和宿主机间不能互相ping通(不知道是不是虚拟机的问题)

2.4      vlan环境配置

l  同网段vlan通信:

为了避免网络风暴,二层交换机上通常会把网口设置成Access模式(交换机自动打上某个vlan id),这样只允许特定vlan通过,所以我们在单板上加入新vlan,数据包出去后会直接被二层交换机丢弃掉。为了解决这个问题需要:

1)     在二层交换机上把网口设置成trunk模式

2)     添加新vlan  id

3)     允许新vlan通过

这样同网段vlan就可以通信了。

l  不同网段vlan通信

需要二层交换机和三层交换机配合完成,在上面的配置上还需要:

1)     在三层交换机上添加新vlan  id

2)     三层交换机上为新vlan  id配置新网关(每个vlan  id都要有自己的网关)

3)     分别在二层交换机的出口和三层交换机对应的入口允许新vlan id通过,否则数据包不能到达三层交换机。

这样不同网段vlan就可以通信了。

上面是原理,具体操作请参见S5300交换机手册vlan章节。

2.5      应用场景

 

2.6      数据收发方式

 

2.7      配置方式

3      phys

3.1      应用场景

直接将一个现有的物理网卡分配给容器。

3.2      数据收发方式

 

3.3      配置方式

4      empty

4.1      应用场景

使用empty的网络类型在容器内只会创建loopback接口。

 

http://blog.csdn.net/dog250/article/details/7354590

https://blog.flameeyes.eu/2010/09/linux-containers-and-networking

http://www.cnblogs.com/zmkeil/archive/2013/04/18/3029339.html

http://www.kernelchina.org/node/215

http://wenku.baidu.com/view/b684f44fe45c3b3567ec8bf5.html

http://wenku.baidu.com/view/869c688984868762caaed5e2.html

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值