Transcript Openstack网络
Openstack网络
吴江
[email protected]
Openstack网络技术方案选型
Openstack的复杂性主要来源于两点:
开源项目,系统本身开发时间短,不够稳定,
bug多。
配置自由,灵活度高,很难将所有的配置项都试全。
系统架构选型的原则:
软件成熟稳定:相对于其它的开源解决方案(rackspace
private cloud, rdo, devstack...), Mirantis fuel是目前最
为成熟的OpenStack部署工具。
配置简单够用:选择相对简单的网络和存储配置方案。
某些新的技术,比如Neutron, 配置更复杂,bug更多。
Neutron 还是 nova-network
Neutron为租户提供更灵活的
网络配置。每个租户可以配置
自己的虚网,虚拟路由器,可
以自己指定IP地址范围,自己
制定访问规则(SDN)。
Nova-network不如neutron灵
活,所有租户的虚拟机共享同
一个ip地址池,虚机之间没有
隔离(除非配置VLAN) 。
优点:更灵活,更安全(用户虚
网与外界用虚拟路由器隔开,
用户自己定义访问规则)。
优点: 成熟,稳定,配置简单。
缺点:配置复杂;不成熟, 一
直在修改中;bug多。
缺点: 安全性不如Neutron,
VLANManager 需要到交换机
上配置VLAN。
如果选用nova-network, 需要考虑的问题:
FlatManager, FlatDHCPManager, 还是VLANManager。
Single-host 还是 multi-host。
单网卡,双网卡,还是三网卡。
FlatDHCPManager 模式
Flat和FlatDHCP之所以称为flat, 是因为它们的虚机都必
须共享一个扁平的IP网段。他们的区别在于Flat模式不提
供DHCP服务,管理员需要另外配置DHCP服务器,或者
在虚拟机里使用静态IP(通过注入网络配置文件实现)。
实现原理:在每一台compute node里,创建一个bridge:
br100, 所有虚机的网卡都是attach在这个设备上。
这种方法的缺点在于扩展性和安全性:bridge相当于一个
hub,这样所有的虚机实际上在一个广播域里,相互间没
有隔离。另外广播域过大,会造成性能问题。
广播域的概念
广播域的概念:指的是广播帧(目标MAC地址全部为1)所
能传递到的范围,亦即能够直接通信的范围。
如果广播域过大,有可能会影响到网络整体的传输性能。
……
交换机1
ARP Request
Broadcast
交换机4
……
交换机3
广播帧会传播到网络中
的每一台主机,
并且对每一台计算机的
CPU造成负担。
交换机2
交换机5
……
FlatDHCPManager 模式续: single-host还是
multi-host
Single-host还是multi-host, 在/etc/nova/nova.conf里配置。
single-host: 只有一个nova-network和一个dnsmasql进程,
一般运行在controller节点上。所有虚机访问internet必须
通过controller节点。
multi-host: 每个compute节点运行一个nova-network, 和
一个dnsmasq进程,虚机通过compute node访问internet,
不需要经过controller node。
由于single-host模式下,所有流量通过controller node, 如
果controller node出现问题,所有虚机都无法访问。另外
可能有性能问题。所以一般选择multi-host模式。
FlatDHCPManager 模式续: multi-host详解
原理:
Bridge br100上配置了一个IP。
每个compute机器上,启动一个dnsmasq DHCP
server,监听在那个IP上。
bridge做为每个虚机的default gateway。
虚机访问外网,IP包首先发到br100上,进行
NAT后,通过eth0出去。
每个compute node上, dnsmasq进程维护一个
静态的DHCP lease文件,包含IP, MAC,
hostname等信息。这些信息从nova database
里来,从而保证IP不被重复使用。
缺省情况下,所有vm可以互相通讯,除非配置
了 allow_same_net_traffic=False
VLANManager
FlatDHCPManager的缺点:
扩展性: 所有虚机在一个二层网络的广播域,扩展性受到限制。
(广播域内广播包过多造成冲突)
安全性: 不同的租户网络无法隔离。
如果对扩展性和安全性要求较高,可以考虑使用
VLANManager。
VLANManager模式下,管理员创建虚机的步骤:
1.
2.
3.
4.
创建tenant, 记录tenantID。
为这个tenant创建一个网络,这个网络使用自己的VLAN_ID。
为这个网络指定一个IP地址段。
之后创建虚机的时候,虚机会自动从这个网络里取得一个IP。
VLANManager续1
创建一个新的租户网络时,VLANManager做的事情:
1.
2.
3.
为每个tenant network创建一个单独的bridge。
在物理网卡(eth0)上创建一个vlan interface。
启动dnsmasq进程,让它监听在新建的bridge上。
VLANManager续2
不同compute node上的虚机互通
VLANManager的局限性:
最多只能有4096个VLAN_ID, 所以不能超过4096个租户。
租户使用的IP地址不能重叠。
如果有这样的需求,就必须使用Neutron。
浮动IP
浮动IP用于从外部网络访问虚机,用法:
1.
2.
3.
在安全组编辑安全组规则: 增加ping: ICMP, -1,
0.0.0.0/0, ssh: TCP, 22, 0.0.0.0/0。
在 项目 / 访问&安全 / 浮动IP里,分配IP给项目。
把浮动ip绑定给虚机。绑定完成后,在外网可以访问
虚机。
浮动IP是怎样实现的
原理: 登录到虚机上,看不到浮动IP, 浮动IP是在compute node实现的,
当给虚机分配了浮动IP后, 在compute node上发生两件事情:
1. 浮动IP分配给了eth0, 用 “ip addr show eth0”命令可以看到。
2. iptables增加了一些新的nat规则, 用“iptables -t nat -S”命令可以看到。
外部网络访问虚机过程:
IP包走DNAT规则被转换成10.0.0.2, IP包被发送到虚机10.0.0.2。
虚机访问外部网络(比如8.8.8.8)的过程:
由于8.8.8.8不在虚机本网段内,IP包被发到default gateway
10.0.0.3(compute node, br100)。
由于8.8.8.8不在compute node本网段内, IP包被发到default gateway:
172.16.0.2。
在IP包发送之前,走nat POSTROUTING规则,IP包里的IP被转换成浮动
IP。
Neutron
相比nova-network, Neutron提供更灵活的
网络配置。
在Neutron环境中,创建一个虚机的过程:
创建一个网络,每个租户可以有多个network,
network所使用的IP地址段可以随意指定。
创建一个虚拟路由器,用这个虚拟路由器,把
第一步创建的网络和外部网络连接起来。
创建一个虚机,创建时,指定它所在的网络。
Neutron的组成部分
Neutron包含以下几个组成部分
service: 提供API服务。
Neutron metadata agent: 负责把从instance来
的metadata请求传递到nova-api。
L2 agent: 同L2模块,如open vSwitch和Linux
bridge通讯。
L3 agent: 负责路由和NAT。
DHCP agent: 负责给instance提供private IP。
Neutron
Fuel Neutron 使用Open vSwitch和Linux
network namespace实现SDN。
Open vSwitch
在fuel中,nova-network使用linux bridge,
Neutron使用Open vSwitch。
相比Linux bridge, open vSwitch在以下方面有优
势:
移动性:
open vSwitch中网络实体的状态可以方便地在
不同主机之间迁移,包括L2 learning table,L3
forward state等等。
能够快速反映网络状态变化。
能够方便地在网络封包内增加逻辑标识(logical tags)。
执行效率高于linux bridge。
支持OpenFlow, 方便远程控制。
Linux network namespace
Neutron使用Linux network namespace实现虚拟网络的隔
离。
Linux namespace机制提供了一种资源隔离方案。有了
namespace, 系统资源例如PID, IPC, Network不再是全局
的,而是对应于某个namespace。
有了network namespace, Linux系统中可以同时存在多套
ip地址设置,路由设置和防火墙规则。Neutron利用
network namespace来为不同的tenant建立多个虚拟网络
和虚拟路由器。
Network namespace命令举例:
ip netns list # 显示所有的namespace
ip netns add <ns_name> # 增加新的namespace
ip netns exec <ns_name> ifconfig # 查看某个namespace的网
络配置信息
一个典型的GRE tunnel网络配置
一个典型的GRE tunnel网络配置续
在compute node上, OpenStack建立以下设备:
为每个虚机建立一个bridge “qbr…”, 这个设备主要负责定义一些防
火墙规则。
一个integration bridge “br-int”, 主要用于处理VLAN tag。
一个tunnel bridge “br-tun”, 用于把VLAN ID转换成GRE tunnel ID。
在controller node上,OpenStack建立以下设备:
一个tunnel bridge “br-tun”, 把GRE tunnel ID转换会VLAN ID。
一个integration bridge “br-int”, 用于连接虚拟路由器和DHCP
server。
为每个网络建立一个DHCP server。
每个网络需要建立一个虚拟路由器。
建立一个br-ex,使虚机可以访问外部网络。
实验:VMWare上安装fuel (FlatDHCP, multi-host)
两个网络:
安装完毕后,登录到controller上,可以看到:
没有bridge,没有nova-network, dnsmasq运行。
登录到compute node上,可以看到 :
VMnet2: 用于pxe, 管理网络,存储网络。Host-only, 不能连到internet。
10.20.0.0/255.255.255.0
VMnet3: 用于public, floating, 虚机网络。NAT, 可以连接到internet。
172.16.0.0/255.255.255.0
VMnet2, VMnet3都关闭DHCP服务。
每台机器的网关: 172.16.0.2, DNS: 172.16.0.2。
FlatDHCPManager, multi-host模式。
br100上有个ip, 10.0.0.3。
“ps -ef”可以看到dnsmasq是监听在10.0.0.3上。
/etc/nova/nova.conf里, multi_host是True。
iptables -t filter -S 看iptables的规则。
登录到虚机上:
route –n,可以看到 default gateway是 10.0.0.3。
ping www.sina.com.cn可以通。