Openstack-Wallby版本使用指导

云平台登录

在按照“http://cloud.loongnix.cn/releases/loongarch64/openstack/Wallby-openeuler2403/openstack2403-Wallby-多节点部署.wps”完成openstack部署后，登录云平台（在部署时设置的登录密码为00000）。

http://10.130.0.167/dashboard

域：default

用户名：admin

密码：[REDACTED] #密码是在部署openstack服务时设置的

虚拟机创建

上传镜像

用两种方式：

（1）通过网页的形式上传

修改Apache配置

在部署时使用Apache作为前端，需要在其配置文件中设置允许上传的文件大小的最大值，在/etc/httpd/conf/httpd.conf 中添加以下内容，具体设置的数值大小根据自己实际需求进行修改：

LimitRequestBody 10737418240 # 设置为允许的最大上传文件大小，这里设置为10G（单位为字节）
重启httpd服务:

systemctl restart httpd
注意：若没有设置这个参数，在dashboard网页上传大于1G的镜像时会报错“413 Request Entity Too Large”。

备注：若是使用ngnix作为服务器前端，则在/etc/nginx/nginx/conf文件的http或server模块中增加以下配置项：

client_max_body_size 1G; # 设置允许上传的最大文件大小
重启nginx服务：

systemctl restart nginx

确认glance服务配置

在glance配置文件/etc/glance/glance-api.conf存在参数image_size_cap，该参数限制了用户在通过glance上传镜像时可上传的最大字节数，该参数设置的默认数值是1TiB，已经满足了当前需求，所以这里不再设置该参数值。

#image_size_cap = 1099511627776 //该参数的默认数值是1TiB
注意：如果修改了该参数的数值，需要使用命令”systemctl restart openstack-glance-api”重启该服务以后才可以生效。

3）上传镜像

按照下图所示上传镜像

（2）在controller机器上通过命令行的方式上传

命令如下：

openstack image create --property hw_firmware_type=uefi --disk-format qcow2 --container-format bare --file /root/openEuler-24.03-LTS-loongarch64.qcow2 --public loong64-euler

上传完成后可以使用以下命令确认镜像是否上传成功：

[root@controller home]# openstack image list

+--------------------------------------+-----------+--------+

| ID | Name | Status |

+--------------------------------------+-----------+--------+

| 56820e9c-4694-4274-a0d0-1c2e6e7827bb | loong64-euler | active |

+--------------------------------------+-----------+--------+
创建实例类型

按照下图所示创建实例类型，具体需要设置的vcpu、内存及根磁盘的大小与上传的镜像(在上传镜像时上传的是欧拉2403的qcow2)有关系。

备注：若这里设置的vcpu、内存及根磁盘的大小 小于欧拉2403的qcow2要求的值，在后面创建实例时会导致创建失败，所以在内存及根磁盘满足的情况下尽量设置的大一些。

创建网络

私有网络

用户创建的不同私有网络相互隔离，如分别创建私有网络private1、private2。创建虚拟机A，使用网络private1; 创建虚拟机B，使用网络private2。虚拟机A和B不同相互连通。

但如何A和C都使用private1，则A和C之间是可以相互通信的。

按照下图所示创建私有网络：

使用上面的网络private创建了2个虚拟机test1和test2，因为使用的是同一个私有网络，所以创建的虚拟机test1和test2的ip地址在同一网段，两个虚拟机之间可以相互通信。如：

私有网络也称为租户网络，该网络的作用和用途：

租户隔离：每个项目(租户)可以创建自己的私有网络，这些网络相互隔离，只有该项目的虚拟机可以访问。这种隔离保证了租户之间的网络不会相互干扰，确保了数据的隐私性和安全性。

内部通信：项目网络通常用于项目内部的虚拟机之间的通信。租户可以自定义网络拓扑，包括定义子网、路由、负载均衡、安全组规则等，以满足应用的特定需求。

自主管理：租户可以自由创建和管理自己的网络资源，而无需管理员的干预。包括添加、删除网络、配置子网、设置网络安全规则(如防火墙规则)、分配和管理IP地址等。

适用场景：适用于企业内部应用、开发测试环境、数据处理和分析等需要高隔离性和安全性的场景。

公共网络

公共网络又称外部网络，下面使用flat和vxlan网络二选一即可，但推荐使用flat网络，配置比较简单。

flat类型网络

（1）按照下图所示创建网络：

图中的provider要与controller主机上/etc/neutron/plugins/ml2/ml2_conf.ini文件中的flat_networks保持一致：

[ml2_type_flat]

flat_networks = provider

（2）如果要使controller主机和虚拟机之间可以通信，则下图中使用网络地址应该设置为controller主机可达的，这里设置为和controller主机同一网段(controller主机ip地址：10.130.0.167)。

（3）下图中的dns与controller主机上设置一样即可，或者根据实际需求进行设置：

[root@controller home]# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 221.11.1.68

nameserver 221.11.1.67

（4）测试虚拟机test与controller之间的通信

下面的虚拟机test是使用上面创建的公有网络public-10-flat创建的，可以与controller之间正常通信：

controller ping 虚拟机test:

test ping controller:

从虚拟机可以正常ssh到controller，但此时从controller无法正常ssh到虚拟机。

（5）测试虚拟机test与外网之间的通信

下面的虚拟机test是使用上面创建的公有网络public-10-flat创建的，可以与外网如百度之间正常通信

从虚拟机访问外部网络，若在访问外部网络时报“Name or service not known”则在dns中添加8.8.8.8：

[root@host-10-130-0-182 home]# cat /etc/resolv.conf

# Generated by NetworkManager

search openstacklocal

nameserver 8.8.8.8

nameserver 8.8.4.4

nameserver 221.11.1.68

ping百度：

[root@host-10-130-0-182 home]# ping daibu.com

PING daibu.com (116.204.133.184) 56(84) 字节的数据。

64 字节，来自 116.204.133.184 (116.204.133.184): icmp_seq=1 ttl=115 时间=39.1 毫秒

64 字节，来自 116.204.133.184 (116.204.133.184): icmp_seq=2 ttl=115 时间=38.7 毫秒

64 字节，来自 116.204.133.184 (116.204.133.184): icmp_seq=3 ttl=115 时间=39.6 毫秒

ping github

[root@host-10-130-0-182 home]# ping github.com

PING github.com (20.205.243.166) 56(84) 字节的数据。

64 字节，来自 20.205.243.166 (20.205.243.166): icmp_seq=1 ttl=113 时间=100 毫秒

64 字节，来自 20.205.243.166 (20.205.243.166): icmp_seq=2 ttl=113 时间=98.6 毫秒

vxlan类型网络

按照下图所示创建vxlan类型的网络。但是使用vxlan创建的网络即使和controller主机配置在同一网段，也是无法直接和controller主机之间进行通信的。

（1）下图中的ID号是交换机的vlan ID, 300以内

（2）

虽然这里使用的网络是和controller在同一网段，但使用该网络创建的虚拟机仍然无法直接与主机通信。

（3）

设置完上面3个内容后点击创建即可。

备注

公共网络/外部网络的作用和用途：

对外通信：为所有租户提供访问外部网络(如互联网)的能力。这种网络一般用于将虚拟机连接到互联网或其他外部网络资源。

共享资源：公共网络是多个租户共享的，租户可以通过这个网络为自己的虚拟机分配浮动ip（公网IP），从而使虚拟机能够从外部访问。

网络入口/出口：充当虚拟机的网络出口。通过配置NAT（网络地址转换）和浮动ip，虚拟机能够与外部网络通信。管理员也可以通过这个网络管理和监控租户的网络使用情况。

适用场景：适用于需要对外暴露的服务，如web服务器、API服务器以及需要访问互联网的虚拟机。

安全组

安全组规则控制着虚拟机实例的网络流量进出。安全组是一组防火墙规则，这些规则定义了允许或拒绝进入/离开虚拟机的网络流量。每个虚拟机实例可以被分配一个或多个安全组，未明确允许的流量会被拒绝。

默认情况下，每个安全组没有规则，意味着所有流量都被拒绝，除非明确允许。

若要使controller主机可以ssh到openstack创建的虚拟机，需要创建安全组，添加端口22后才可以正常ssh。

点击下图中的管理规则：

选择添加规则

添加端口22

按照下图设置ICMP流量规则，允许来自任何 IP 地址的 ICMP 流量（如 ping 命令）进入虚拟机。

创建路由

通过创建路由可以实现私有网络到外部网络的通信。路由器通过配置一个外部网关，负责将内部网路的流量路由到外部网络(如互联网)。这使得部署在openstack内部子网中的虚拟机可以访问外部网络资源。但是仅通过创建路由还无法实现从外部网络访问私有网络（若要实现从外部网络访问私有网络需要配合使用浮动IP来实现）。

（1）选择“创建路由”

新建路由

为路由创建连接内外网的接口

（3.1）点击路由的名称

（3.2）选择“增加接口”

（3.3）在子网中选择要路由的子网，点击提交

本次测试中选择的是private-noshare，点击提交之后可以看到创建的接口：

验证

在添加了上述路由以后，内部网络（192.168.10.x）可以访问外部网络10.130.0.x ，如此时192.168.10.192的虚拟机可以访问外部网络：

但是从10.130.0.182的机器无法ping通192.168.10.192。若要实现从外网（这里是10.130.0.x）到私有网络（这里是192.168.10.192）的通信，需要通过浮动IP来实现。

浮动IP

绑定浮动IP时需要先创建路由，浮动IP一般用于与外网进行通信。

（1）按照下图所示选择“绑定浮动ip”

（2）选择浮动ip后出现以下内容，若之前创建过浮动IP，则点击下图中”小三角”直接选择即可。若之前没有创建过则选择“+”。

（3）选择“+”号后出现以下内容：

资源池选择已经创建的公共网络，然后点击分配IP即可。

此时会自动分配一个IP地址，确认待连接的端口是否为需要添加添加的虚拟机，若无误后选择关联。

（4）此时便可以在虚拟机test1上看到两个ip地址

此时，外部网络便可以通过ip 10.130.0.142连接到该虚拟机。如下，外部网络通过10.130.0.142的ip地址登录到test1虚拟机：

[root@host-10-130-0-182 home]# ssh root@10.130.0.142

The authenticity of host '10.130.0.142 (10.130.0.142)' can't be established.

ED25519 key fingerprint is SHA256:tsGMJD6XBmQENdEBHZK4siIxM6s6/ycbAiGVJOkqroc.

This key is not known by any other names.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '10.130.0.142' (ED25519) to the list of known hosts.

Authorized users only. All activities may be monitored and reported.

root@10.130.0.142's password:

[REDACTED] users only. All activities may be monitored and reported.

Last login: Mon Aug 19 08:22:21 2024

Welcome to 6.6.0-29.0.0.35.oe2403.loongarch64

System information as of time:	2024年 08月 20日 星期二 07:45:16 UTC

System load:	0.09

Memory used:	8.6%

Swap used:	0.0%

Usage On:	4%

IP address:	192.168.10.192

Users online:	2

[root@host-192-168-10-192 ~]#

附录

网络类型

Flat

Flat网络是一种最基础、最简单的网络配置方式，常用于虚拟机化环境中。在Flat网络中，所有的虚拟机VM和网络设备都位于同一个网络平面上，没有使用VLAN、VXLAN等技术进行网络隔离或分段。这种网络架构易于配置和管理，适合小规模或不需要复杂网络隔离的场景。

Flat网络的关键特性：

无网络隔离：在flat网络中，所有的虚拟机都位于同一广播域内，它们之间可以直接通信，没有使用VLAN等技术来隔离流量。这意味着所有的广播流量都会在网络中的所有设备上传播，适用于对安全性和隔离要求不高的应用场景。

配置简单

flat网络的配置很简单，因为它不涉及复杂的网络虚拟机或隔离技术。通常，所有的虚拟机都会连接到一个共享的网络交换机或网络接口，直接通过这个共享网络进行通信。

直接连接到物理网络

flat网络通常直接映射到物理网络上的一个网段，虚拟机可以使用与物理网络相同的ip地址范围。这种直接映射简化了网络的设计和维护，使虚拟机能够直接访问物理网络中的资源。

单一广播域

由于所有设备共享同一广播域，因此网络规模较大时，广播流量可能会导致网络性能下降。这也是flat网络通常仅在小型网络或开发环境中使用的原因

低扩展性

flat网络不适合大规模部署，因为随着虚拟机数量的增加，广播流量也会增加，可能会导致拥塞和性能问题。此外，缺乏网络隔离也意味着在多租户或安全敏感的环境中，flat网络无法提供足够的安全性。

VXLAN

VXLAN(Virtual Extensible LAN)是一种网络虚拟化技术，用于在大规模数据中心和云计算环境中扩展二层网络。解决了传统VLAN(虚拟局域网)的可扩展性限制，支持大规模、多租户环境中的虚拟网络隔离和分段。

网络虚拟化：VXLAN通过在现有的第3层（IP层）网络基础上构建虚拟的第2层(以太网)网络，提供了虚拟机之间的隔离和通信能力。它允许在大型数据中心中创建数百万个虚拟网络，使得网络架构可以灵活扩展。

VXLAN使用一个24位的VXLAN网络标识符(VNI)来区分不同的虚拟网络。VNI类似于VLAN ID，但由于其长度为24位，可以支持多达16,777,216个独立的虚拟网络实例，而VLAN只能支持4096个。

封装与隧道：VXLAN将二层以太网帧封装在UDP数据包中，通过第3层网络进行传输。这种封装允许跨越多个物理网络设备的二层网络连接。每个VXLAN隧道的两端由虚拟隧道端点VTEP负责，VTEP负责封装和解封VXLAN数据包。

多租户支持：在云计算和数据中心环境中，多租户支持是一个关键需求。VXLAN提供了强大的网络隔离能力，使得不同租户的流量完全隔离，即使它们在相同的物理网络基础设施上运行。

优势

高扩展性：VXLAN解决了VLAN的扩展性限制，支持多达16M的虚拟网络实例，非常适合大规模数据和云环境

跨数据中心连接：VXLAN允许在多个数据中心之间扩展二层网络连接，使虚拟机可以跨数据中心移动和通信，支持灾难恢复和高可用性部署。

多租户隔离：VXLAN提供了强大的网络隔离能力，使得不同租户的流量在共享物理基础设施上可以完全隔离

与现有网络的兼容性：VXLAN可以在现有的第3层网络基础设施上部署，不需要对现有网络进行大规模修改。

安全组

在openstack中，安全组相当于防火墙，应用于openstack中的虚拟机实例。默认情况下，每个安全组没有规则，意味着所有流量都被拒绝，除非明确允许。

（1）规则方向

入站规则：控制从外部网络到虚拟机的流量

出站规则：控制从虚拟机到外部网络的流量

（2）规则组成

协议：指定允许的网络协议，如TCP、UDP或ICMP

端口范围：指定允许的端口范围，如22(ssh)、80（HTTP）等

来源或目标IP地址：指定允许访问的源地址(入站规则)或目标地址(出站规则)。

来源或目标安全组：指定允许访问的安全组，通常用于虚拟机实例之间的通信。

（3）默认安全组

在openstack中，默认情况下会创建一个“默认安全组”，通常该组的初始规则设置非常保守，可以根据需求进行修改。

查看默认安全组的规则：可以使用openstack CLI或者通过Dashboard界面查看和管理安全组规则:

openstack security group rule list default

（4）常见的默认规则设置

允许虚拟机内部的所有入站和出站流量，这使得同一个安全组内的虚拟机可以相互通信：

openstack security group rule create --proto all --remote-group default default

允许所有出站流量，默认情况下，OpenStack 安装时会允许所有出站流量，这意味着虚拟机可以访问外部网络：

openstack security group rule create --egress --proto all default

阻止所有其他入站流量，除非明确允许，所有外部流量到虚拟机的请求都会被阻止。

（5）自定义安全组规则

根据实际需求，你可以添加不同的规则到安全组中，例如：

1. 允许 SSH 访问（端口 22）

openstack security group rule create --proto tcp --dst-port 22 --remote-ip 0.0.0.0/0 default
这条规则允许来自任何 IP 地址的流量通过端口 22（SSH）进入虚拟机。

2. 允许 HTTP 访问（端口 80）

openstack security group rule create --proto tcp --dst-port 80 --remote-ip 0.0.0.0/0 default
这条规则允许来自任何 IP 地址的流量通过端口 80（HTTP）进入虚拟机。

3. 允许 ICMP 流量（Ping）

openstack security group rule create --proto icmp --remote-ip 0.0.0.0/0 default
这条规则允许来自任何 IP 地址的 ICMP 流量（如 ping 命令）进入虚拟机。

4. 允许特定网络范围的访问

openstack security group rule create --proto tcp --dst-port 22 --remote-ip 192.168.1.0/24 default
这条规则允许来自特定网段（如 192.168.1.0/24）的 SSH 访问。

（6）删除规则

如果不再需要某条规则，可以通过以下命令删除：

openstack security group rule delete <rule-id>
你可以使用 openstack security group rule list <security-group-id> 列出规则并找到对应的 rule-id。

（7）通过 Dashboard 管理安全组

如果使用 OpenStack Dashboard（Horizon），可以通过以下步骤管理安全组：

登录 OpenStack Dashboard。

进入 “Project” -> “Network” -> “Security Groups”。

选择或创建一个安全组。

添加或编辑入站和出站规则。

（8）总结

安全组是 OpenStack 中确保虚拟机网络安全的核心工具。根据需求配置合理的安全组规则可以有效控制虚拟机的流量进出，保障系统的安全性。在实际操作中，需要根据应用需求来设置具体的规则，确保既能满足业务需求，又不暴露不必要的安全风险。

浮动IP

浮动IP是一种可以从外部访问的IP地址，通常从ISP（internet service provider）处购买。这些IP地址可用于从外部网络访问虚拟机实例，提供更高的灵活性和安全性。浮动IP可以使虚拟机切换到公网IP地址，它使虚拟机在不更改其内部IP地址的情况下，通过映射到浮动IP来实现与外部网络的通信。

浮动IP的主要作用是提供了一种灵活的网络连接方式。使虚拟机能够在需要时快速切换到不同的网络环境。可用于以下场景：

高可用性和负载均衡：通过将浮动IP绑定到多个虚拟机上，可以实现负载均衡和故障转移。当其中一个虚拟机发生故障时，可以将浮动IP重新绑定到另一个正常运行的虚拟机上，确保服务的连续性。

弹性扩展：通过使用浮动IP，可以动态地将新的虚拟机添加到集群中，以满足业务需求的增长。当需要扩展时，可以为新的虚拟机分配一个浮动IP，使其能够与外部网络进行通信。

临时访问：浮动IP还可以用于临时访问虚拟机。当需要从外部网络访问虚拟机时，可以为其分配一个浮动IP，以便临时建立连接并进行管理或调试操作。

为了更好地管理和控制这些IP地址，openstack引入了浮动IP池的概念。

Qemu工作流程

openstack调用qemu的工作流程：

用户请求创建虚拟机

用户通过openstack dashboard（horizon）或openstack CLI向nova API发送创建虚拟机的请求

nova接收请求并调度

nova api接收请求并将其传递给nova scheduler。 scheduler根据资源可用性和调度策略选择合适的计算节点(compute node)来运行虚拟机实例

调用nova compute服务

选定计算节点上的nova compute服务接收创建虚拟机的请求

配置虚拟机实例

nova compute负责为虚拟机实例配置必要的资源，如网络、存储和计算资源

通过与其他openstack服务(如neutron、cinder和glance)的交互来完成这些配置任务

生成虚拟机配置文件

nova compute生成虚拟机的配置文件(xml格式)，这些文件描述了虚拟机的所有配置参数，如CPU、内存、磁盘和网络接口

调用libvirt

nova compute使用libvirt（虚拟化管理库）来管理虚拟机。libvirt提供了一组统一的API来与不同的虚拟化技术(如QEMU/KVM、xen、VMware)交互

启动虚拟机实例

libvirt调用QEMU/KVM，使用传递的配置文件启动虚拟机实例。QEMU/KVM是负责实际虚拟机执行的底层虚拟化技术。

Memcached

memcached是一种内存对象缓存系统，用于加速动态数据库驱动的网站和应用程序的性能。通过在内存中缓存数据和对象，减少了对数据库的直接访问，从而提供了系统的响应速度。

memcached在openstack中的作用：

缓存认证令牌：在openstack中，keystone负责身份认证和授权，keystone生成的认证令牌(token)需要频繁验证，通过使用memcached缓存这些令牌，可以显著减少keystone服务的负载和响应时间。

缓存API响应：openstack的各个服务(如nova、glance、neutron等)提供的API响应可以被缓存，以减少对后端数据库和服务的查询次数，以提高API响应速度。

提升性能和扩展性：memcached通过分布式内存缓存系统，提供了一个高效的缓存机制。支持分布式集群部署，能够轻松扩展以适应大规模的openstack部署需求。

减低数据库负载：通过缓存频繁访问的数据，memcached减少了对数据库的查询次数，从而降低了数据库的负载，提高了整体系统的性能和稳定性。