lxc網絡

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

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章