1.准备镜像文件
镜像是创建虚拟机实例的基础,这里先准备两个镜像文件:
1.1下载cirros镜像文件
从cirros
官网下载最新的镜像文件
http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img
1.2下载fedora镜像文件
fedora
项目镜像文件下载地址为:
https://fedoraproject.org/cloud/download
1.3上传cirros
镜像
以云管理员admin
身份登录OpenStack
:
左侧管理员-->计算-->镜像-->创建镜像
输入镜像名称-->浏览本地镜像文件-->指定镜像格式-->指定镜像共享为公有-->然后点击创建镜像
创建镜像成功:
1.4上传fedora镜像文件
这里以demo
的身份登录系统,进行上传操作,这里将镜像可见性设置为私有,也就是该镜像只为demo项目提供服务,不向其他项目提供:
完成后,可以在镜像列表中查看到两个镜像文件:
2.查看实例类型
以云管理员admin
的身份登录系统,其他用户无权查看该选项:
管理员-->计算-->实例类型
可以看到默认为5个实例类型。
3.查看网络
不同的项目可以使用的网络不完全相同,这里以demo
身份登录系统:
项目-->网络-->网络
显示出当前网络列表,由于当前只能用private
网络,所以public
网络的信息不可见:
4.添加安全组规则
安全组中的规则用于控制被关联的实例的网络通信,每个项目可以定义自己的安全组,然后将虚拟机关联到安全组。
这里先查看默认安全组规则:
项目-->网络-->安全组-->管理规则
由于后面实验中需要用到外部网络通过SSH登录虚拟机,同时用ping
工具测试连通性,所以下面添加规则:
以上两条规则完成后,如下:
5.添加密钥对
密钥对是虚拟机实例启动时被注入镜像中的SSH
凭据,每个项目可以定义自己的密钥对。
同样,以demo身份登录系统,然后根据左侧导航:
项目-->计算-->密钥对
可以看出,目前项目中密钥对为空。
要采用SSH
方式以证书凭据方式登录虚拟机实例,就需要创建或导入密钥对,并在创建虚拟机实例时关联对应密钥对。
点击创建密钥对,进行创建:
同时下载到本地一个mydemo-key.pem的私钥文件。
创建的新的密钥对文件列表如下:
6.创建虚拟机实例
上在工作完成后,下面就可以创建虚拟机实例。这里还是以demo
身份登录系统进行创建:
项目-->计算-->实例-->创建实例
6.1设置实例名称和数量
6.2设置实例源
6.3设置实例类型
6.4选择网络选项
6.5选择安全组
6.6选择密钥对选项
6.7其他选项保持默认
在保持其他选项不变,然后点击创建实例。
从而完成实例的创建。
7.创建第二个虚拟机实例
同第一个实例创建方法一样,这里只是注意卷大小的选择,根据镜像和系统文件大小来选择,另外,就是实例类型,根据需要选择合适的实例类型:
其他保持默认,然后点击创建实例,完成实例的创建,如下:
8.操作和使用虚拟机实例
如下图,先进入控制台对虚拟机进行操作:
点击概况,可以查看虚拟机实例的配置情况:
9.配置虚拟机实例与外部网络通信
网络是OpenStack
非常重要的资源之一,没有网络,虚拟机实例将被完全隔绝。
RDO
一体化OpenStack
云平台默认已配置了虚拟网络,但是由于没有针对实际环境进行配置,即使分配浮动IP
地址,创建的虚拟机实例也不能与外部网络通信。
此时,通过修改相关配置来定制网络,即可实现虚拟机实例与外部网络之间的通信。
OpenStack
的虚拟机实例拥有一个私有IP
地址,通过该地址,它们可以在内部网络中相互访问,要从外部网络的其他计算机访问这些实例,需要为实例分配浮动IP
地址。
9.1将OpenStack
主机网卡添加到br-ex
网桥上
先查看OpenStack
主机的网络接口信息:
[root@mynode-a ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:bb:d5:35 brd ff:ff:ff:ff:ff:ff
inet 192.168.250.250/24 brd 192.168.250.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:febb:d535/64 scope link
valid_lft forever preferred_lft forever
3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 16:91:e1:b4:7c:4b brd ff:ff:ff:ff:ff:ff
4: br-ex: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 7e:27:21:cc:2d:40 brd ff:ff:ff:ff:ff:ff
5: br-int: <BROADCAST,MULTICAST> mtu 1442 qdisc noop state DOWN group default qlen 1000
link/ether 9a:df:16:e1:29:4f brd ff:ff:ff:ff:ff:ff
6: tap725a7e8c-b4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast master ovs-system state UNKNOWN group default qlen 1000
link/ether fe:16:3e:fc:f5:47 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc16:3eff:fefc:f547/64 scope link
valid_lft forever preferred_lft forever
7: tapad9cc827-30@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master ovs-system state UP group default qlen 1000
link/ether b6:1c:e1:31:01:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::b41c:e1ff:fe31:10d/64 scope link
valid_lft forever preferred_lft forever
8: tap5f3da2e4-3a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast master ovs-system state UNKNOWN group default qlen 1000
link/ether fe:16:3e:92:da:e9 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc16:3eff:fe92:dae9/64 scope link
valid_lft forever preferred_lft forever
[root@mynode-a ~]#
如上,其中eth0是主机网卡,以br开头的是网桥。
接着查看主机上当前的网桥:
[root@mynode-a ~]# ovs-vsctl list-br
br-ex
br-int
[root@mynode-a ~]#
可以看到目前主机已经有两个网桥,其中br-ex是外部网桥,br-int是集成网桥。
用下面命令查看br-ex
网桥端口:
[root@mynode-a ~]# ovs-vsctl list-ports br-ex
patch-provnet-3391f33e-a5ff-4066-83fd-633340ea4339-to-br-int
[root@mynode-a ~]#
可以看到,该网桥只有一个连接集成网桥br-int
的patch
端口,没有端口连接到openstack
主机上的外部网络接口,因此当前openstack
云平台上的虚拟机实例无法与外部网络进行通信。
解决的办法是将OpenStack
主机上的网卡作为一个端口添加到br-ex
网桥上
Open vSwitch
会生成一个普通端口来处理此网卡的数据包。但是以这种方式实现的配置在开机后会丢失,可以改用网卡配置文件来实现。
1)复制网卡ifcfg-eth0
文件
[root@mynode-a network-scripts]# cp ifcfg-eth0 ifcfg-br-ex
[root@mynode-a network-scripts]#
2)修改ifcfg-br-ex
文件
[root@mynode-a network-scripts]# vim ifcfg-br-ex
TYPE=OVSBridge # 将TYPE值修改为OVSBridge
DEVICETYPE=ovs # 添加DEVICETYPE,值为ovs
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br-ex # NAME值为br-ex
UUID=45242253-7348-405e-946a-40e72803e0ca
DEVICE=br-ex #DEVICE值为br-ex
ONBOOT=yes
IPADDR=192.168.250.250
PREFIX=24
GATEWAY=192.168.250.1
DNS1=222.222.222.222
PEERDNS=no
3)修改ifcfg-eth0
文件
删除相关信息,配置完成后,用cat
命令查看:
[root@mynode-a network-scripts]# cat ifcfg-eth0
TYPE=OVSPort
NAME=eth0
DEVICE=eth0
ONBOOT=yes
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
[root@mynode-a network-scripts]#
4)重启网络服务
为了使当前配置生效,需重启网络服务:
[root@mynode-a network-scripts]# systemctl restart network
此时,再查看网络配置信息:
[root@mynode-a /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
link/ether 52:54:00:bb:d5:35 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5054:ff:febb:d535/64 scope link
valid_lft forever preferred_lft forever
3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 16:91:e1:b4:7c:4b brd ff:ff:ff:ff:ff:ff
4: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 7e:27:21:cc:2d:40 brd ff:ff:ff:ff:ff:ff
inet 192.168.250.250/24 brd 192.168.250.255 scope global br-ex
valid_lft forever preferred_lft forever
inet6 fe80::7c27:21ff:fecc:2d40/64 scope link
valid_lft forever preferred_lft forever
5: br-int: <BROADCAST,MULTICAST> mtu 1442 qdisc noop state DOWN group default qlen 1000
link/ether 9a:df:16:e1:29:4f brd ff:ff:ff:ff:ff:ff
6: tap725a7e8c-b4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast master ovs-system state UNKNOWN group default qlen 1000
link/ether fe:16:3e:fc:f5:47 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc16:3eff:fefc:f547/64 scope link
valid_lft forever preferred_lft forever
7: tapad9cc827-30@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master ovs-system state UP group default qlen 1000
link/ether b6:1c:e1:31:01:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::b41c:e1ff:fe31:10d/64 scope link
valid_lft forever preferred_lft forever
8: tap5f3da2e4-3a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast master ovs-system state UNKNOWN group default qlen 1000
link/ether fe:16:3e:92:da:e9 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc16:3eff:fe92:dae9/64 scope link
valid_lft forever preferred_lft forever
可以看出,外部网桥br-ex
获得源eth0
网卡的IP
地址192.168.250.250
,而eth0
网卡作为该网桥上的一个端口后,可以没有IP
地址。
9.2调整网络配置
RDO
一体化OpenStack
云平台默认配置了一个内部网络、一个外部网络和一个路由器。
云管理员可以查看所有网络配置,以admin
身份登录系统:
管理员-->网络-->网络
可以看出默认系统一个外部网络(public)和一个内部网络(private):
管理员-->网络-->路由器
可以看出有一个名称为router1
的路由器,这是一个虚拟路由器,用于连接外部网络和内部网络:
1)删除路由器外部网关
由于默认外部网关172.24.4.23
不符合实际情况,这里先删除掉:
2)配置外部网络
先删除默认的子网:
管理员-->网络-->点击
public
-->然后切换到子网下-->删除子网
然后再创建一个同名子网:
创建完成后:
3)调整路由器配置
以demo
身份登录系统,打开路由器列表:
单击设置网关-->从外部网络下拉列表中选择public-->提交
然后,选编辑路由,将路由器名称更改为router-demo,然后勾选启用管理员状态(启用此路由器):
4)查看网络拓扑
以demo
身份登录系统,然后:
项目-->网络-->网络拓扑
可以看出路由器将内外网连接起来。
9.3分配浮动IP
地址
浮动IP
地址和私有IP
地址能够同时用于一个单独的网络接口。
要使外部网络中其他计算机能访问这些实例,就要为该实例分配浮动IP
地址。
以demo
身份登录系统:
项目-->计算-->实例--对应实例右侧绑定浮动
IP
在弹出管理浮动IP的关联窗口,由于没有分配浮动IP
,点击其右侧加号:
在下拉资源池中选择public,然后点击分配IP:
此时已经分配了一个IP
地址,点击关联:
这样就将IP
地址192.168.250.75
分配给实例cirrors-myvm
。
可以看出,此时实例有两个IP
地址。
进入控制台,可以测试访问外网:
可以正常访问。