您所在的位置:云计算 > 云开发 > 深入理解openstack网络架构(1) :基础讲解(2)

深入理解openstack网络架构(1) :基础讲解(2)

2014-11-27 15:32 追寻神迹 追寻神迹的博客 字号:T | T
一键收藏,随时查看,分享好友!

openstack网络功能强大同时也相对更复杂。本系列文章通过Oracle OpenStack TechPreview介绍openstack的配置,通过各种场景和例子说明openstack各种不同的网络组件。本文的目的在于提供openstack网络架构的全景图并展示各个模块是如何一起协作的。这对openstack的初学者以及希望理解openstack网络原理的人会非常有帮助。首先,我们先讲解下一些基础并举例说明。

AD:

Network Namespaces (netns)

网络namespace是linux上一个很cool的特性,它的用途很多。在openstack网络中被广泛使用。网络namespace是拥有独立的网络配置隔离容器,并且该网络不能被其他名字空间看到。网络名字空间可以被用于封装特殊的网络功能或者在对网络服务隔离的同时完成一个复杂的网络设置。在Oracle OpenStack Tech Preview中我们使用最新的R3企业版内核,该内核提供给了对netns的完整支持。

通过如下例子我们展示如何使用netns命令控制网络namespaces。定义一个新的namespace:

  1. # ip netns add my-ns 
  2. # ip netns list 
  3. my-ns 

我们说过namespace是一个隔离的容器,我们可以在namspace中进行各种操作,比如ifconfig命令。

  1. # ip netns exec my-ns ifconfig -a 
  2. lo        Link encap:Local Loopback 
  3.           LOOPBACK  MTU:16436 Metric:1 
  4.           RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
  5.           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
  6. collisions:0 txqueuelen:0 
  7.           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 

我们可以在namespace中运行任何命令,比如对debug非常有用的tcddump命令,我们使用ping、ssh、iptables命 令。连接namespace和外部:连接到namespace和namespace直接连接的方式有很多,我们主要聚集在openstack中使用的方 法。openstack使用了OVS和网络namespace的组合。OVS定义接口,然后我们将这些接口加入namespace中。

  1. # ip netns exec my-ns ifconfig -a 
  2. lo        Link encap:Local Loopback 
  3.           LOOPBACK  MTU:65536 Metric:1 
  4.           RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
  5.           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
  6. collisions:0 txqueuelen:0 
  7.           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 
  8.  
  9. my-port   Link encap:Ethernet HWaddr 22:04:45:E2:85:21 
  10.           BROADCAST  MTU:1500 Metric:1 
  11.           RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
  12.           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
  13. collisions:0 txqueuelen:0 
  14.           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 

现在我们可以增加更多的ports到OVS bridge,并且连接到其他namespace或者其他设备比如物理网卡。Neutron使用网络namespace来实现网络服务,如DHCP、routing、gateway、firewall、load balance等。下一篇文章我们会讨论更多细节 。

Linux bridge and veth pairs

Linux bridge用于连接OVS port和虚拟机。ports负责连通OVS bridge和linux bridge或者两者与虚拟机。linux bridage主要用于安全组增强。安全组通过iptables实现,iptables只能用于linux bridage而非OVS bridage。

Veth对在openstack网络中大量使用,也是debug网络问题的很好工具。Veth对是一个简单的虚拟网线,所以一般成对出现。通常Veth对的一端连接到bridge,另一端连接到另一个bridge或者留下在作为一个网口使用。

这个例子中,我们将创建一些veth对,把他们连接到bridge上并测试联通性。这个例子用于通常的Linux服务器而非openstack节点:创建一个veth对,注意我们定义了两端的名字:

  1. # ip link add veth0 type veth peer name veth1 
  2.  
  3. # ifconfig -a 
  4.  
  5.  
  6.  
  7. veth0     Link encap:Ethernet HWaddr 5E:2C:E6:03:D0:17 
  8.  
  9.           BROADCAST MULTICAST  MTU:1500 Metric:1 
  10.  
  11.           RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
  12.  
  13.           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
  14.  
  15. collisions:0 txqueuelen:1000 
  16.  
  17.           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 
  18.  
  19. veth1     Link encap:Ethernet HWaddr E6:B6:E2:6D:42:B8 
  20.  
  21.           BROADCAST MULTICAST  MTU:1500 Metric:1 
  22.  
  23.           RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
  24.  
  25.           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
  26.  
  27. collisions:0 txqueuelen:1000 
  28.  
  29.           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 
  30.  
  31.  

为了让例子更有意义,我们将创建如下配置:

  1. veth0 => veth1 =>br-eth3 => eth3 ======> eth2 on another Linux server 

br-eht3: 一个基本的Linux bridge,连接veth1和eth3eth3: 一个没有设定IP的物理网口,该网口连接着斯有网络eth2: 远端Linux服务器上的一个物理网口,连接着私有网络并且被配置了IP(50.50.50.1)一旦我们创建了这个配置,我们将通过veth0 ping 50.50.50.1这个远端IP,从而测试网络联通性:

  1. # brctl addbr br-eth3 
  2.  
  3. # brctl addif br-eth3 eth3 
  4.  
  5. # brctl addif br-eth3 veth1 
  6.  
  7. # brctl show 
  8.  
  9. bridge name     bridge id               STP enabled     interfaces 
  10.  
  11. br-eth3         8000.00505682e7f6       no              eth3 
  12.  
  13.                                                         veth1 
  14.  
  15. # ifconfig veth0 50.50.50.50 
  16.  
  17. # ping -I veth0 50.50.50.51 
  18.  
  19. PING 50.50.50.51 (50.50.50.51) from 50.50.50.50 veth0: 56(84) bytes of data. 
  20.  
  21. 64 bytes from 50.50.50.51: icmp_seq=1 ttl=64 time=0.454 ms 
  22.  
  23. 64 bytes from 50.50.50.51: icmp_seq=2 ttl=64 time=0.298 ms 
  24.  
  25. # ethtool -S veth1NIC statistics:peer_ifindex: 12# ip link..12: veth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 

如果命名不像例子中这么显而易见,导致我们无法支持veth设备的两端,我们可以使用ethtool命令查询。ethtool命令返回index号,通过ip link命令查看对应的设备:

  1. # ethtool -S veth1 
  2.  
  3. NIC statistics: 
  4.  
  5. peer_ifindex: 12 
  6.  
  7. # ip link 
  8.  
  9.  
  10.  
  11. 12: veth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000 

总结

文章中,我们快速了解了OVS/网络namespaces/Linux bridges/veth对。这些组件在openstack网络架构中大量使用,理解这些组件有助于我们理解不同的网络场景。

原文出自:http://blog.csdn.net/halcyonbaby/article/details/41524447

【编辑推荐】

  1. EMC收购Cloudscaling对OpenStack应用意义何在?
  2. HP Helion之OpenStack社区版
  3. 悉“数”HP Helion OpenStack
  4. OpenStack Neutron DVR L2 Agent的初步解析:DVR的创建及生效
  5. OpenStack Swift 存储策略及应用案例
【责任编辑:Ophira TEL:(010)68476606】

内容导航
 第 1 页:前言  第 2 页:Network Namespaces (netns)



分享到:

文章排行

本月本周24小时

热点职位

更多>>

热点专题

更多>>

读书

XML基础教程
本书分为8章。第1章主要对XML做了简单的介绍。第2章详细讲解规范的XML文件。第3章主要讲解有效的XML文件,特别重点讲解DTD文件。

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院