设为首页 收藏本站
查看: 5445|回复: 6

[经验分享] 浅谈openstack中的nova-network

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-11-25 09:33:46 | 显示全部楼层 |阅读模式

在Openstack中网络是比较复杂的一个部分。在openstack目前版本中的网络组件主要使用的是neutron, 但我们将neutron使用在产线上时机还并不成熟, 目前我们产线上仍然在使用nova-network。本文将分析一下nova-network的主要作用和其实现方式。


在Openstack中,nova-network主要实现了以下一些功能,括号中是其实现时主要使用的工具:

NAT (iptables,  ip)

VLAN (ifconfig,  brctl)

DHCP Server (dnsmasq)

DNS Server (dnsmasq)

Firewall (iptables)


目前,我们在部署nova-network时采用的是multi-host的部署方式,会在每台计算节点上nova-network。这样做的好处是可扩展性比较好。当我们计算资源不足时,仅需要直接扩展即可。如果将nova-network部署在controller节点上,当我们扩展计算节点时,会增加对controller节点的网络负载。可能会引起controller节点也需要扩展。从这个方面考虑,nova-network部署在计算节点上是比较好的,可以起到网络负载分流的作用。但也有不足之处,比如计算节点其实应该尽可能的单纯,上面跑的服务越单纯越少,对于虚拟机的稳定性肯定越好。 另外, nova-conductor已经将数据库访问操作从nova-compute中抽离,如果nova-network节点部署在计算节点上,那计算节点上任然会有数据库访问操作。

Whatever,综合考虑其利弊后,我们还是认为将nova-network部署在计算节点上是比较适合当前产线以及我们的应用的。


下面的图是我们lab中一个计算节点的示意图:

Center.jpg

对这幅图简单说明如下:

在Lab中,我们目前一台计算节点使用的是一块网卡(1Gbit/s),并将admin网络和data网络分离。

eth0接口上配有IP (10.224.159.64/26),这个IP是作为管理IP使用,Openstack组件间通信使用的是这个IP。

子接口eth0.90是作为public interface使用, Openstack的虚拟机想要和外部网络通信时使用的是这个IP。(这台计算节点的默认路由会走eth0.90)

eth0作为vlan interface使用,openstack中我们使用的是vlan模式,因此创建fixed ip的vlan时,会创建在这个接口上。

可以看到图中我们有两个fixed ip的vlan,一个是vlan70,另一个是vlan71。这两个网络中各起了一台虚拟机。以vlan70中的虚拟机为例, fixed ip 192.168.70.2是真正配置在虚拟机内部的, 通过vnet1绑定到桥br70下,br70由绑定了eth0的子接口vlan70, 这样虚拟机中的数据就会传输到vlan70中。

在桥br70上会起一个dnsmasq进程,这个进程在vlan70中起到dhcp server和dns server的作用。

图中左下部分,是由nova-compute管理的,右上部分是有nova-network管理的。


上面那副图从整体上介绍了计算节点上网络部分的构成。那么下面就讲一下一般容易混淆的内容。

首先说一下floating ip 和fixed ip的区别,说这个问题前,我们可以首先抛开openstack,我们想一下一般我们在企业内pc上网是怎么做的?

首先我们可以把网络的拓扑简化成如下所示:

PC(内部网络) --> Switch --> Route --> 外部网络

我们的pc一般会得到一个内部网络的ip地址,这个地址可能是192.168.X.Y。我们通过路由器的NAT转换成外部地址后,就可以上网了。

那现在我们考虑另一种情况, 外部网络的PC想要向内部网络PC发起连接该怎么办呢? 通常情况下就会使用端口映射的方式了。我们会在路由器设置一些NAT规则将路由器上的一个公有地址映射到内部网络的ip地址。这样就可以实现外部网络中PC对内网PC发起连接了。

其实在Openstack中,fixed ip就是上述情况中的内网IP,floating ip就是路由器上设置端口映射的公有IP。

在看下面这幅图应该就可以很容易理解了:

Center.jpg


在理解了fixed ip和floating ip的区别后,我们再来看看虚拟机启动时是怎样获取fixed ip的呢?

在虚拟机系统启动时,会发出dhcp请求,工作在brXXX上的dnsmasq会相应这些请求。可以从以下抓包中看到,虚机机会得到hostname, ip, 网关, dns server等信息。

拿到这些信息后, 虚机就会设置自己的hostname, 接口地址, 默认路由以及dns server等信息。 从抓包中可以看出, 网关和dns server就是计算节点中brXXX的地址。

# tcpdump -i br100 -vvv -nnn
tcpdump: listening on br100, link-type EN10MB (Ethernet), capture size 65535 bytes
01:01:15.270589 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 308)
    0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Requestfrom fa:16:3e:ad:6e:7f, length 280, xid 0xf42cb507, Flags [none] (0x0000)
  Client-IP 100.100.100.20
  Client-Ethernet-Address fa:16:3e:ad:6e:7f
  Vendor-rfc1048 Extensions
    Magic Cookie 0x63825363
    DHCP-Message Option 53, length 1: Request
    Client-ID Option 61, length 7: ether fa:16:3e:ad:6e:7f
    MSZ Option 57, length 2: 576
    Parameter-Request Option 55, length 7:
      Subnet-Mask, Default-Gateway, Domain-Name-Server, Hostname
      Domain-Name, BR, NTP
    Vendor-Class Option 60, length 12: "udhcp 1.18.5"
    END Option 255, length 0
01:01:15.270906 IP (tos 0x0, ttl 64, id 45514, offset 0, flags [none], proto UDP (17), length 338)
    100.100.100.4.67 > 100.100.100.20.68: [udp sum ok] BOOTP/DHCP, Reply, length 310, xid 0xf42cb507, Flags [none] (0x0000)
  Client-IP 100.100.100.20
  Your-IP 100.100.100.20
  Server-IP 100.100.100.4
  Client-Ethernet-Address fa:16:3e:ad:6e:7f
  Vendor-rfc1048 Extensions
    Magic Cookie 0x63825363
    DHCP-Message Option 53, length 1: ACK
    Server-ID Option 54, length 4: 100.100.100.4
    Lease-Time Option 51, length 4: 120
    RN Option 58, length 4: 55
    RB Option 59, length 4: 100
    Subnet-Mask Option 1, length 4: 255.255.255.0
    BR Option 28, length 4: 100.100.100.255
    Default-Gateway Option 3, length 4: 100.100.100.4
    Domain-Name-Server Option 6, length 4: 100.100.100.4
    Domain-Name Option 15, length 9: "novalocal"
    Hostname Option 12, length 5: "matt6"
    END Option 255, length 0


现在我们再来看一下,当一个虚拟机启动时大概会发生什么事情:

Center.jpg

当我们使用nova boot启动虚机时,首先scheduler选定一个有足够资源的计算节点,然后通过MQ消息发送给这台计算节点的nova-compute,之后nova-compute会做一系列的动作,其中有一步就是使用MQ消息发给nova-network通知"我要在计算节点上启动一个虚机,请帮我配置好计算节点的网络"。nova-network收到消息后就会开始配置网络了,首先看下这台虚机是属于哪个网络的,以上图为例,他是属于vlan70这个网络的,那nova-network就会检查这台计算节点上有没有已经配置了br70,有没有vlan70?如果没有就配置上这个vlan,然后检查dnsmasq启动过了吗?如果没有,就需要向防火墙中添加dhcp/dns端口的过滤规则,图中防火墙规则的意思就是接收端口为67(dhcp)和53(dns)的数据包。之后会从fixed ip池中分配一个IP给这台虚机,并将IP,hostname等信息写在dnsmasq的配置文件中,重启dnsmaq。这样nova-network的网络就大致配置好了。nova-compute在知道网络准备好后,就会继续启动虚机,在启动虚机的最后阶段在host主机的防火墙中为虚机配置Security Group中定义的访问控制规则,这样虚机就启动好了。


在启动虚机之后,我们可能还会像为这个虚机配置floating ip, 这时会发生什么呢?

其实floating IP的配置非常简单,其实所谓的floating ip无非是端口映射而已,而目前在openstack中实现方式是使用NAT来实现的。问题就变成了如何用iptables/netfilter框架来实现端口映射。

答案就是两条DNAT规则+一条SNAT规则,另外在接口上配置一个ip用来相应ARP请求,此处如果不明白的话就需要看下iptables防火墙的使用了。

#ip addr
17: eth0.90@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 7c:ad:74:6f:ca:fc brd ff:ff:ff:ff:ff:ff
inet 10.224.144.134/25 brd 10.224.144.255 scope global eth0.90
inet 10.224.144.138/32 scope global eth0.90


# iptables -nvL -t nat
Chain nova-network-OUTPUT (1 references)
pkts bytes target prot opt in out source destination
0 0 DNAT all -- * * 0.0.0.0/0 10.224.144.138 to:104.104.104.11
Chain nova-network-PREROUTING (1 references)
pkts bytes target prot opt in out source destination
10 684 DNAT all -- * * 0.0.0.0/0 10.224.144.138 to:104.104.104.11
Chain nova-network-float-snat (1 references)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * * 104.104.104.11 104.104.104.11 to:10.224.144.138
0 0 SNAT all -- * eth0.90 104.104.104.11 0.0.0.0/0 to:10.224.144.138

在这之后,我们可能会想去了解虚机之间,虚机与外部通信时,数据流是怎走的呢?

mirantis的大神早在去年就分析过了,在此不再累述,强烈推荐参考一下blog:

http://www.mirantis.com/blog/vlanmanager-network-flow-analysis/



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-10672-1-1.html 上篇帖子: 在openstack下用VM搭建openstack 下篇帖子: OpenStack中glance上传镜像出现500 Internal Server Error
发表于 2013-11-26 17:45:25 | 显示全部楼层
没看完~~~~~~ 先顶,好同志

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-11-29 06:41:20 | 显示全部楼层
执子之手、与子偕老?你演给我看吧.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-11-29 23:06:47 | 显示全部楼层
着寂寞光线的房间,吟听着一些掖藏的感觉。让我们一起遗忘。这寂寞爱情,我要把你给忘。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-11-30 09:15:39 | 显示全部楼层
我原本不懂爱,是你教会了我,我懂了你去选择了离开

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-11-30 20:57:51 | 显示全部楼层
也许,也许我只适合一个人,谁都不适合做我的朋友.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-1 07:53:50 | 显示全部楼层
我会把你们的好放在心里,永远不忘记

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表