openstack虚拟机实例创建并实现与外部网络通信流程

2024年 1月 7日 78.4k 0

1.准备镜像文件

镜像是创建虚拟机实例的基础,这里先准备两个镜像文件:

1.1下载cirros镜像文件

cirros官网下载最新的镜像文件

http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img

图片[1]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

1.2下载fedora镜像文件

fedora项目镜像文件下载地址为:

https://fedoraproject.org/cloud/download

图片[2]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

1.3上传cirros镜像

以云管理员admin身份登录OpenStack

左侧管理员-->计算-->镜像-->创建镜像

图片[3]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

输入镜像名称-->浏览本地镜像文件-->指定镜像格式-->指定镜像共享为公有-->然后点击创建镜像

图片[4]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

创建镜像成功:

图片[5]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

1.4上传fedora镜像文件

这里以demo的身份登录系统,进行上传操作,这里将镜像可见性设置为私有,也就是该镜像只为demo项目提供服务,不向其他项目提供:

图片[6]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

完成后,可以在镜像列表中查看到两个镜像文件:

图片[7]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

2.查看实例类型

以云管理员admin的身份登录系统,其他用户无权查看该选项:

管理员-->计算-->实例类型

图片[8]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

可以看到默认为5个实例类型。

3.查看网络

不同的项目可以使用的网络不完全相同,这里以demo身份登录系统:

项目-->网络-->网络

显示出当前网络列表,由于当前只能用private网络,所以public网络的信息不可见:

图片[9]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

4.添加安全组规则

安全组中的规则用于控制被关联的实例的网络通信,每个项目可以定义自己的安全组,然后将虚拟机关联到安全组。

这里先查看默认安全组规则:

项目-->网络-->安全组-->管理规则

图片[10]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

图片[11]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

由于后面实验中需要用到外部网络通过SSH登录虚拟机,同时用ping工具测试连通性,所以下面添加规则:

图片[12]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

图片[13]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

以上两条规则完成后,如下:

图片[14]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

5.添加密钥对

密钥对是虚拟机实例启动时被注入镜像中的SSH凭据,每个项目可以定义自己的密钥对。

同样,以demo身份登录系统,然后根据左侧导航:

项目-->计算-->密钥对

图片[15]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

可以看出,目前项目中密钥对为空。

要采用SSH方式以证书凭据方式登录虚拟机实例,就需要创建或导入密钥对,并在创建虚拟机实例时关联对应密钥对。

点击创建密钥对,进行创建:

图片[16]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

同时下载到本地一个mydemo-key.pem的私钥文件。

创建的新的密钥对文件列表如下:

图片[17]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.创建虚拟机实例

上在工作完成后,下面就可以创建虚拟机实例。这里还是以demo身份登录系统进行创建:

项目-->计算-->实例-->创建实例

图片[18]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.1设置实例名称和数量

图片[19]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.2设置实例源

图片[20]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.3设置实例类型

图片[21]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.4选择网络选项

图片[22]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.5选择安全组

图片[23]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.6选择密钥对选项

图片[24]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

6.7其他选项保持默认

在保持其他选项不变,然后点击创建实例。

图片[25]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

从而完成实例的创建。

7.创建第二个虚拟机实例

同第一个实例创建方法一样,这里只是注意卷大小的选择,根据镜像和系统文件大小来选择,另外,就是实例类型,根据需要选择合适的实例类型:

图片[26]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

图片[27]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

其他保持默认,然后点击创建实例,完成实例的创建,如下:

图片[28]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

8.操作和使用虚拟机实例

如下图,先进入控制台对虚拟机进行操作:

图片[29]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

图片[30]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

点击概况,可以查看虚拟机实例的配置情况:

图片[31]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

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 ~]# 

图片[32]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

如上,其中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-intpatch端口,没有端口连接到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

图片[33]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

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):

图片[34]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

管理员-->网络-->路由器

可以看出有一个名称为router1的路由器,这是一个虚拟路由器,用于连接外部网络和内部网络:

图片[35]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

1)删除路由器外部网关

由于默认外部网关172.24.4.23不符合实际情况,这里先删除掉:

图片[36]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

2)配置外部网络

先删除默认的子网:

管理员-->网络-->点击public-->然后切换到子网下-->删除子网

图片[37]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

然后再创建一个同名子网:

图片[38]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

图片[39]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

创建完成后:

图片[40]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

3)调整路由器配置

demo身份登录系统,打开路由器列表:

单击设置网关-->从外部网络下拉列表中选择public-->提交

图片[41]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

然后,选编辑路由,将路由器名称更改为router-demo,然后勾选启用管理员状态(启用此路由器):

图片[42]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

图片[43]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

4)查看网络拓扑

demo身份登录系统,然后:

项目-->网络-->网络拓扑

图片[44]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

可以看出路由器将内外网连接起来。

图片[45]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

9.3分配浮动IP地址

浮动IP地址和私有IP地址能够同时用于一个单独的网络接口。

要使外部网络中其他计算机能访问这些实例,就要为该实例分配浮动IP地址。

demo身份登录系统:

项目-->计算-->实例--对应实例右侧绑定浮动IP

图片[46]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

在弹出管理浮动IP的关联窗口,由于没有分配浮动IP,点击其右侧加号:

图片[47]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

在下拉资源池中选择public,然后点击分配IP:

图片[48]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

此时已经分配了一个IP地址,点击关联:

图片[49]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

这样就将IP地址192.168.250.75分配给实例cirrors-myvm

图片[50]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

可以看出,此时实例有两个IP地址。

进入控制台,可以测试访问外网:

图片[51]-openstack虚拟机实例创建并实现与外部网络通信流程-不念博客

可以正常访问。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论