Openstack网络

Download Report

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可以通。