一、使用基于openvswitch的flat网络连通外部网络

在测试环中,使用allinone部署的openstack,如果需要与外部物理网络通讯,则需要配置flat网路。在q版中,neutron服务默认使用openvswitch,而非使用linux bridge。

openstack-发放虚拟机与绑定浮动ip进行登陆_第1张图片



openvswitch支持五种网络类型,有gre,local,flat,vxlan和vlan类型,其中gre网络和vxlan比较类似,都是使用隧道模式。


local 网络:不会与宿主机的任何物理网卡连接,流量被限制在宿主机内,同时没有任何VLAN ID

flat 网络:不带有tag的网络,宿主机的网卡通过网桥与flat network连接,每个flat网络都占有一个物理网卡

vlan网络: 是带有tag的网络,在openvswitch的实现方式下,不同的vlan instance的虚拟网卡都会被接到br-int上

gre和vxlan网络:基于隧道技术的overlay network,建立在其他网络上的网络。

测试环境使用flat网络连接外部物理网络

首先在/etc/neutron/plugins/ml2/ml2_conf.ini中设置相关参数,指定普通用户网络类型为flat

vim /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
tenant_network_types=flat                #将tenaant_network_types修改为flat

因为使用packstack部署openstackallinone的时候,已经指明了flat网络与物理网络的对应关系。如果使用控制计算分离的部署,则需要修改配置文件指明对应关系,如:

[ml2_type_flat]
flat_networks=default

[ovs]
bridge_mappings=default:br-ex          #指定对应外部网桥br-ex

完成后,重启neutron网络服务

systemctl restart neutron-server

然后使用ovs-vsctl命令检查一下br-ex 配置

ovs-vsctl show

openstack-发放虚拟机与绑定浮动ip进行登陆_第2张图片



openstack-发放虚拟机与绑定浮动ip进行登陆_第3张图片

关于ovs-vswitch内部网络大致如下:

openstack-发放虚拟机与绑定浮动ip进行登陆_第4张图片

说明:

1、ens192是物理网卡(使用虚拟化vmware嵌套部署openstack,相对而言,本质还是虚拟网卡)

2、外部网桥br-ex配有ip地址,作为openstack登陆和发放虚拟机使用

3、发放的虚拟机首先需要需要通过neuntron提供的dhcp获取私网ip地址,然后通过router进行snat访问外网


二、浮动ip

DHCP服务器将专用IP地址分配给实例的网络接口。通过使用“ip a”之类的命令,可以在实例中看到该地址。该地址通常是专用网络的一部分,并且用于通过虚拟交换机(每个计算节点上的L2代理)在同一广播域中的实例之间进行通信。它也可以通过虚拟路由器(L3代理)从其他专用网络中的实例访问。


浮动IP地址是Neutron提供的服务。它不使用任何DHCP服务或在guest虚拟机中静态设置。事实上,客户的操作系统并不知道它被分配了一个浮动IP地址。使用指定的浮动地址将数据包传送到接口是Neutron的L3代理的责任。具有指定的浮动IP地址的实例可以通过浮动IP从公共网络访问。


OpenStack实例接收一个私有IP地址,通过该IP地址,它们可以相互联系并通过哪些主机可以访问它们。为了从网络中的其他计算机(例如工作站)访问这些实例,需要为实例分配“浮动IP”。Packstack会自动使用默认设置对您的网络进行错误配置。您需要使用一系列适合您网络的免费IP地址配置OpenStack安装。


简单说明:

1、外部网络配置flat网络,保证openstack 能够访问连通外部物理网络

2、浮动ip,就是可用的实际的物理ip地址范围,指虚拟机实例可以绑定的公网ip,在公有云中就是指弹性IP,本次测试环境则是对应的可用的物理地址范围,例如172.31.208.110。


在前面完成所有基础网络配置之后,在dashbord中看到网络拓扑

openstack-发放虚拟机与绑定浮动ip进行登陆_第5张图片

说明:

1、external_network对接的是外部物理网络,使用flat网络模式,172.31.208.0/24

2、路由器router是虚拟路由器,连接外部网络和虚拟网络

3、router上的一个接口对应的是外部物理网络的地址172.31.208.102,虚拟机实例将会在虚拟私有网络中使用snat,到外部网络网络,然后可以访问外网

4、router上的另一个接口对应的是虚拟私有网络,192.168.1.0/24,neutron的dhcp服务将分配地址给虚拟机实例


三、发放虚拟实例并绑定浮动ip 


前期已经完成了外部网络配置,镜像上传等配置。

测试使用 浮动IP 172.31.208.110

租户项目cloud

租户管理员vdc_admin


3.1 分配浮动ip

 以admin身份登陆dashbord,在管理员-网络-浮动IP中分配浮动ip172.31.208.110给项目cloud

openstack-发放虚拟机与绑定浮动ip进行登陆_第6张图片

可以分配多个浮动ip给项目,地址范围要在外部网络flat中配置的地址范围之内,点击分配浮动ip即可


3.2 创建虚拟机实例

    以租户管理员vdc_admin登陆项目cloud,然后再计算中点击创建实例

前面已经说明如何创建实例,本次不再说明

成功创建后,开始绑定浮动ip

openstack-发放虚拟机与绑定浮动ip进行登陆_第7张图片

然后选择分配到的浮动ip

openstack-发放虚拟机与绑定浮动ip进行登陆_第8张图片


然后需要再网络-安全组中修改规则,入方向开放能够通过tcp 22端口,然后我们可以通过浮动IP进行ssh服务到虚拟机实例

openstack-发放虚拟机与绑定浮动ip进行登陆_第9张图片

这样便完成了浮动ip与实例的配置,此时可以通过浮动ip 172.31.208.110进行登陆

测试的虚拟机实例

用户名 cirros

密码  cubswin:)

openstack-发放虚拟机与绑定浮动ip进行登陆_第10张图片


然后可以看到可以访问实例同时可以访问外网

openstack-发放虚拟机与绑定浮动ip进行登陆_第11张图片


此时我们查看网络拓扑

openstack-发放虚拟机与绑定浮动ip进行登陆_第12张图片



四、绑定卷

此时测试实例只有一块硬盘,我们需要卷服务来生成云硬盘(evs)

openstack-发放虚拟机与绑定浮动ip进行登陆_第13张图片

创建一块10G大小卷作为云硬盘

然后我们绑定到实例上

openstack-发放虚拟机与绑定浮动ip进行登陆_第14张图片

绑定之后,卷作为云硬盘使用,还是一块虚拟的块设备,需要格式化挂载

openstack-发放虚拟机与绑定浮动ip进行登陆_第15张图片

sudo fdisk /dev/vdb
sudo mkfs.ext3 /dev/vdb1
sudo mount /dev/vdb1 /var
df -h

可以看到已经挂载上了

openstack-发放虚拟机与绑定浮动ip进行登陆_第16张图片


五、思考

1、all in one部署的openstack无法仔细测试neutron的其他网络模式,比较遗憾

2、虚拟化部署的情况下,vmware需要调整分布式交换机的端口组模式为混杂和伪传输为接收,不然虚拟机实例发出访问外网的数据包会被vmware的安全机制所丢弃

3、如何快速自定义创建镜像格式,qcow2

4、如何利用其他自定义镜像格式,如ISO ,如何使用ISO格式发放虚拟机实例?